diff --git a/AUTHORS b/AUTHORS
index 6ef7b10..4e92cdec 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -858,6 +858,7 @@
 Robert Hogan <robhogan@gmail.com>
 Robert Nagy <robert.nagy@gmail.com>
 Robert Sesek <rsesek@bluestatic.org>
+Roger Zanoni <rogerzanoni@gmail.com>
 Roland Takacs <rtakacs.u-szeged@partner.samsung.com>
 Romain Pokrzywka <romain.pokrzywka@gmail.com>
 Rosen Dash <nqk836@motorola.com>
diff --git a/DEPS b/DEPS
index 6ad5773..9031961 100644
--- a/DEPS
+++ b/DEPS
@@ -195,11 +195,11 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling Skia
   # and whatever else without interference from each other.
-  'skia_revision': 'e61500059aa7471a65631da81aae70bd1111e5be',
+  'skia_revision': '765c9d3a9ca48acb8abacc6932a1ad9ec8895237',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling V8
   # and whatever else without interference from each other.
-  'v8_revision': '8c06327064717567a0723117ea9e45ad0e0e98e5',
+  'v8_revision': '7de00dff882453ea4111f2d700e683c5b3517911',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling swarming_client
   # and whatever else without interference from each other.
@@ -207,11 +207,11 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling ANGLE
   # and whatever else without interference from each other.
-  'angle_revision': 'ef897a9c3ec2c0b43a2192efcad31accc55b5bbe',
+  'angle_revision': '0ff24ae00769a812ea8e062f783939b475210551',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling SwiftShader
   # and whatever else without interference from each other.
-  'swiftshader_revision': '6d93a63356e12fc9945ba0cd40a2125cc8802416',
+  'swiftshader_revision': 'afe6ca45b6da79f52d02b76bce03fc72cc322920',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling PDFium
   # and whatever else without interference from each other.
@@ -266,7 +266,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling devtools-frontend
   # and whatever else without interference from each other.
-  'devtools_frontend_revision': '256b2c2587679c74a8fbdaeb9d0b1601c22e889f',
+  'devtools_frontend_revision': 'd93ee76664c71ffb1985078a6e0507f0ad275e0c',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling libprotobuf-mutator
   # and whatever else without interference from each other.
@@ -901,7 +901,7 @@
   },
 
   'src/third_party/depot_tools':
-    Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + '422c039e8e1b95402a10734e1c1e376084fbd15e',
+    Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + 'd0b4e1976ca16b4090e79946f97d277acd124b5e',
 
   'src/third_party/devtools-frontend/src':
     Var('chromium_git') + '/devtools/devtools-frontend' + '@' + Var('devtools_frontend_revision'),
@@ -1154,7 +1154,7 @@
   },
 
   'src/third_party/libvpx/source/libvpx':
-    Var('chromium_git') + '/webm/libvpx.git' + '@' +  '97356acb50e212fcfb7c91715718ec70953f780c',
+    Var('chromium_git') + '/webm/libvpx.git' + '@' +  '7e8ea22e4056a3da04b139fcc812a3f6937bbed7',
 
   'src/third_party/libwebm/source':
     Var('chromium_git') + '/webm/libwebm.git' + '@' + '51ca718c3adf0ddedacd7df25fe45f67dc5a9ce1',
@@ -1237,7 +1237,7 @@
     Var('chromium_git') + '/external/github.com/cisco/openh264' + '@' + '3dd5b80bc4f172dd82925bb259cb7c82348409c5',
 
   'src/third_party/openscreen/src':
-    Var('chromium_git') + '/openscreen' + '@' + 'dee4a03873a1ee6e09a5c4c43faa653470eba795',
+    Var('chromium_git') + '/openscreen' + '@' + '952113a3bdf55baa055d74c216260edb3dce46a6',
 
   'src/third_party/openxr/src': {
     'url': Var('chromium_git') + '/external/github.com/KhronosGroup/OpenXR-SDK' + '@' + '9e97b73e7dd2bfc07745489d728f6a36665c648f',
@@ -1486,7 +1486,7 @@
   },
 
   'src/third_party/webrtc':
-    Var('webrtc_git') + '/src.git' + '@' + '04482985b2041a91f4282ce4a3e7bb3716a621f1',
+    Var('webrtc_git') + '/src.git' + '@' + 'eacbd972ab7e85e9d61851ced57aba1eb194de3d',
 
   'src/third_party/libgifcodec':
      Var('skia_git') + '/libgifcodec' + '@'+  Var('libgifcodec_revision'),
@@ -1558,7 +1558,7 @@
     Var('chromium_git') + '/v8/v8.git' + '@' +  Var('v8_revision'),
 
   'src-internal': {
-    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@745402dd650a2ba8dc319f14a3db4351ae5269dc',
+    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@09e5f06f05dd4b22f053caf5f557b778634650d6',
     'condition': 'checkout_src_internal',
   },
 
diff --git a/android_webview/browser/aw_content_browser_client.cc b/android_webview/browser/aw_content_browser_client.cc
index 99a6a1b0..ded8050c 100644
--- a/android_webview/browser/aw_content_browser_client.cc
+++ b/android_webview/browser/aw_content_browser_client.cc
@@ -861,7 +861,6 @@
 void AwContentBrowserClient::RegisterNonNetworkSubresourceURLLoaderFactories(
     int render_process_id,
     int render_frame_id,
-    NonNetworkURLLoaderFactoryDeprecatedMap* uniquely_owned_factories,
     NonNetworkURLLoaderFactoryMap* factories) {
   WebContents* web_contents = content::WebContents::FromRenderFrameHost(
       content::RenderFrameHost::FromID(render_process_id, render_frame_id));
diff --git a/android_webview/browser/aw_content_browser_client.h b/android_webview/browser/aw_content_browser_client.h
index f638fcc..70bb7dc 100644
--- a/android_webview/browser/aw_content_browser_client.h
+++ b/android_webview/browser/aw_content_browser_client.h
@@ -185,7 +185,6 @@
   void RegisterNonNetworkSubresourceURLLoaderFactories(
       int render_process_id,
       int render_frame_id,
-      NonNetworkURLLoaderFactoryDeprecatedMap* uniquely_owned_factories,
       NonNetworkURLLoaderFactoryMap* factories) override;
   bool ShouldIsolateErrorPage(bool in_main_frame) override;
   bool ShouldEnableStrictSiteIsolation() override;
diff --git a/android_webview/browser/aw_feature_list_creator.cc b/android_webview/browser/aw_feature_list_creator.cc
index d5408e99..8de84c6 100644
--- a/android_webview/browser/aw_feature_list_creator.cc
+++ b/android_webview/browser/aw_feature_list_creator.cc
@@ -190,7 +190,8 @@
   client_ = std::make_unique<AwVariationsServiceClient>();
   auto seed_store = std::make_unique<variations::VariationsSeedStore>(
       local_state_.get(), /*initial_seed=*/std::move(seed),
-      /*signature_verification_enabled=*/g_signature_verification_enabled);
+      /*signature_verification_enabled=*/g_signature_verification_enabled,
+      /*use_first_run_prefs=*/false);
 
   if (!seed_date.is_null())
     seed_store->RecordLastFetchTime(seed_date);
diff --git a/android_webview/browser/safe_browsing/aw_safe_browsing_blocking_page.cc b/android_webview/browser/safe_browsing/aw_safe_browsing_blocking_page.cc
index b0778285..b3feda4 100644
--- a/android_webview/browser/safe_browsing/aw_safe_browsing_blocking_page.cc
+++ b/android_webview/browser/safe_browsing/aw_safe_browsing_blocking_page.cc
@@ -16,10 +16,12 @@
 #include "base/metrics/histogram_macros.h"
 #include "components/prefs/pref_service.h"
 #include "components/safe_browsing/content/browser/threat_details.h"
+#include "components/safe_browsing/core/common/safe_browsing_prefs.h"
 #include "components/safe_browsing/core/common/safebrowsing_constants.h"
 #include "components/safe_browsing/core/features.h"
 #include "components/safe_browsing/core/triggers/trigger_manager.h"
 #include "components/security_interstitials/content/security_interstitial_controller_client.h"
+#include "components/security_interstitials/content/settings_page_helper.h"
 #include "components/security_interstitials/content/unsafe_resource_util.h"
 #include "components/security_interstitials/core/base_safe_browsing_error_ui.h"
 #include "components/security_interstitials/core/safe_browsing_quiet_error_ui.h"
@@ -95,6 +97,8 @@
   AwBrowserContext* browser_context =
       AwBrowserContext::FromWebContents(web_contents);
   PrefService* pref_service = browser_context->GetPrefService();
+  // TODO(crbug.com/1134678): Set is_enhanced_protection_message_enabled once
+  // enhanced protection is supported on aw.
   BaseSafeBrowsingErrorUI::SBErrorDisplayOptions display_options =
       BaseSafeBrowsingErrorUI::SBErrorDisplayOptions(
           IsMainPageLoadBlocked(unsafe_resources),
@@ -104,8 +108,10 @@
           safe_browsing::IsExtendedReportingPolicyManaged(*pref_service),
           safe_browsing::IsEnhancedProtectionEnabled(*pref_service),
           pref_service->GetBoolean(::prefs::kSafeBrowsingProceedAnywayDisabled),
-          false,                    // should_open_links_in_new_tab
-          false,                    // always_show_back_to_safety
+          false,  // should_open_links_in_new_tab
+          false,  // always_show_back_to_safety
+          false,  // is_enhanced_protection_message_enabled
+          safe_browsing::IsSafeBrowsingPolicyManaged(*pref_service),
           "cpn_safe_browsing_wv");  // help_center_article_link
 
   ErrorUiType errorType =
@@ -119,10 +125,12 @@
   GURL url =
       (main_frame_url.is_empty() && entry) ? entry->GetURL() : main_frame_url;
 
+  // TODO(crbug.com/1134678): Set settings_page_helper once enhanced protection
+  // is supported on aw.
   return new AwSafeBrowsingBlockingPage(
       ui_manager, web_contents, url, unsafe_resources,
       CreateControllerClient(web_contents, unsafe_resources, ui_manager,
-                             pref_service),
+                             pref_service, /*settings_page_helper*/ nullptr),
       display_options, errorType, std::move(resource_request));
 }
 
diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/AwSettingsTest.java b/android_webview/javatests/src/org/chromium/android_webview/test/AwSettingsTest.java
index 6679fd6..5e1f315 100644
--- a/android_webview/javatests/src/org/chromium/android_webview/test/AwSettingsTest.java
+++ b/android_webview/javatests/src/org/chromium/android_webview/test/AwSettingsTest.java
@@ -3465,35 +3465,6 @@
         Assert.assertEquals(expectedTitle, actualTitle);
     }
 
-    @Test
-    @SmallTest
-    @Feature({"AndroidWebView", "Preferences"})
-    public void testWebComponentsV0Reenabled() throws Throwable {
-        // TODO(1021631): This test should be removed once Android Webview
-        // disables Web Components v0 by default.
-        final TestAwContentsClient client = new TestAwContentsClient();
-        final AwTestContainerView view =
-                mActivityTestRule.createAwTestContainerViewOnMainSync(client);
-        final AwContents awContents = view.getAwContents();
-        CallbackHelper onPageFinishedHelper = client.getOnPageFinishedHelper();
-        AwActivityTestRule.enableJavaScriptOnUiThread(awContents);
-        final String expectedTitle = "enabled"; // https://crbug.com/1021631
-        final String page = "<!doctype html>"
-                + "<script>"
-                + "const htmlImportsEnabled = 'import' in document.createElement('link');"
-                + "const customElementsV0Enabled = 'registerElement' in document;"
-                + "const shadowDomV0Enabled = 'createShadowRoot' in document.createElement('div');"
-                + "if (htmlImportsEnabled && customElementsV0Enabled && shadowDomV0Enabled) {"
-                + "  document.title = 'enabled';"
-                + "} else {"
-                + "  document.title = 'disabled';"
-                + "}"
-                + "</script>";
-        mActivityTestRule.loadDataSync(awContents, onPageFinishedHelper, page, "text/html", false);
-        String actualTitle = mActivityTestRule.getTitleOnUiThread(awContents);
-        Assert.assertEquals(expectedTitle, actualTitle);
-    }
-
     private static class SelectionRangeTestDependencyFactory extends TestDependencyFactory {
         private boolean mDoNotUpdate;
         public SelectionRangeTestDependencyFactory(boolean doNotUpdate) {
diff --git a/ash/BUILD.gn b/ash/BUILD.gn
index 8bebcd5..3fbb229 100644
--- a/ash/BUILD.gn
+++ b/ash/BUILD.gn
@@ -697,8 +697,8 @@
     "quick_answers/ui/quick_answers_pre_target_handler.h",
     "quick_answers/ui/quick_answers_view.cc",
     "quick_answers/ui/quick_answers_view.h",
-    "quick_answers/ui/user_consent_view.cc",
-    "quick_answers/ui/user_consent_view.h",
+    "quick_answers/ui/user_notice_view.cc",
+    "quick_answers/ui/user_notice_view.h",
     "root_window_controller.cc",
     "root_window_settings.cc",
     "root_window_settings.h",
diff --git a/ash/ambient/ambient_constants.h b/ash/ambient/ambient_constants.h
index 426a538..0b82785 100644
--- a/ash/ambient/ambient_constants.h
+++ b/ash/ambient/ambient_constants.h
@@ -24,6 +24,10 @@
 constexpr base::TimeDelta kPhotoRefreshInterval =
     base::TimeDelta::FromSeconds(60);
 
+// The default interval to fetch backup cache photos.
+constexpr base::TimeDelta kBackupPhotoRefreshDelay =
+    base::TimeDelta::FromMinutes(5);
+
 // The default interval to refresh weather.
 constexpr base::TimeDelta kWeatherRefreshInterval =
     base::TimeDelta::FromMinutes(5);
@@ -47,6 +51,10 @@
 // Directory name of ambient mode.
 constexpr char kAmbientModeDirectoryName[] = "ambient-mode";
 
+constexpr char kAmbientModeCacheDirectoryName[] = "cache";
+
+constexpr char kAmbientModeBackupCacheDirectoryName[] = "backup";
+
 // The buffer time to use the access token.
 constexpr base::TimeDelta kTokenUsageTimeBuffer =
     base::TimeDelta::FromMinutes(10);
diff --git a/ash/ambient/ambient_controller.cc b/ash/ambient/ambient_controller.cc
index 40d4d5e..02c4e0e 100644
--- a/ash/ambient/ambient_controller.cc
+++ b/ash/ambient/ambient_controller.cc
@@ -318,6 +318,11 @@
   }
 }
 
+void AmbientController::OnFirstSessionStarted() {
+  if (IsAmbientModeEnabled())
+    ambient_photo_controller_.ScheduleFetchBackupImages();
+}
+
 void AmbientController::OnPowerStatusChanged() {
   if (ambient_ui_model_.ui_visibility() != AmbientUiVisibility::kShown) {
     // No action needed if ambient screen is not shown.
diff --git a/ash/ambient/ambient_controller.h b/ash/ambient/ambient_controller.h
index 47ccb1b..1cf45fb 100644
--- a/ash/ambient/ambient_controller.h
+++ b/ash/ambient/ambient_controller.h
@@ -59,6 +59,7 @@
 
   // SessionObserver:
   void OnLockStateChanged(bool locked) override;
+  void OnFirstSessionStarted() override;
 
   // PowerStatus::Observer:
   void OnPowerStatusChanged() override;
diff --git a/ash/ambient/ambient_photo_controller.cc b/ash/ambient/ambient_photo_controller.cc
index ddeb87a..5d74c67 100644
--- a/ash/ambient/ambient_photo_controller.cc
+++ b/ash/ambient/ambient_photo_controller.cc
@@ -4,8 +4,10 @@
 
 #include "ash/ambient/ambient_photo_controller.h"
 
+#include <array>
 #include <string>
 #include <utility>
+#include <vector>
 
 #include "ash/ambient/ambient_constants.h"
 #include "ash/ambient/ambient_controller.h"
@@ -81,17 +83,6 @@
                                    base::BindOnce(std::move(callback)));
 }
 
-// Get the root path for ambient mode.
-base::FilePath GetRootPath() {
-  base::FilePath home_dir;
-  CHECK(base::PathService::Get(base::DIR_HOME, &home_dir));
-  return home_dir.Append(FILE_PATH_LITERAL(kAmbientModeDirectoryName));
-}
-
-void DeletePathRecursively(const base::FilePath& path) {
-  base::DeletePathRecursively(path);
-}
-
 void ToImageSkia(DownloadCallback callback, const SkBitmap& image) {
   if (image.isNull()) {
     std::move(callback).Run(gfx::ImageSkia());
@@ -109,9 +100,34 @@
           base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN};
 }
 
+// Get the root path for ambient mode.
+base::FilePath GetRootPath() {
+  base::FilePath home_dir;
+  CHECK(base::PathService::Get(base::DIR_HOME, &home_dir));
+  return home_dir.Append(FILE_PATH_LITERAL(kAmbientModeDirectoryName));
+}
+
+base::FilePath GetCachePath() {
+  return GetRootPath().Append(
+      FILE_PATH_LITERAL(kAmbientModeCacheDirectoryName));
+}
+
+base::FilePath GetBackupCachePath() {
+  return GetRootPath().Append(
+      FILE_PATH_LITERAL(kAmbientModeBackupCacheDirectoryName));
+}
+
+base::FilePath GetBackupFilePath(size_t index) {
+  return GetBackupCachePath().Append(base::NumberToString(index) +
+                                     kPhotoFileExt);
+}
+
+bool CreateDirIfNotExists(const base::FilePath& path) {
+  return base::DirectoryExists(path) || base::CreateDirectory(path);
+}
+
 void WriteFile(const base::FilePath& path, const std::string& data) {
-  if (!base::PathExists(GetRootPath()) &&
-      !base::CreateDirectory(GetRootPath())) {
+  if (!CreateDirIfNotExists(GetCachePath())) {
     LOG(ERROR) << "Cannot create ambient mode directory.";
     return;
   }
@@ -143,6 +159,13 @@
     LOG(ERROR) << "Cannot replace the temporary file.";
 }
 
+const std::array<const char*, 2>& GetBackupPhotoUrls() {
+  return Shell::Get()
+      ->ambient_controller()
+      ->ambient_backend_controller()
+      ->GetBackupPhotoUrls();
+}
+
 }  // namespace
 
 class AmbientURLLoaderImpl : public AmbientURLLoader {
@@ -154,13 +177,7 @@
   void Download(
       const std::string& url,
       network::SimpleURLLoader::BodyAsStringCallback callback) override {
-    auto resource_request = std::make_unique<network::ResourceRequest>();
-    resource_request->url = GURL(url);
-    resource_request->method = "GET";
-    resource_request->credentials_mode = network::mojom::CredentialsMode::kOmit;
-
-    auto simple_loader = network::SimpleURLLoader::Create(
-        std::move(resource_request), NO_TRAFFIC_ANNOTATION_YET);
+    auto simple_loader = CreateSimpleURLLoader(url);
     auto* loader_ptr = simple_loader.get();
     auto loader_factory = AmbientClient::Get()->GetURLLoaderFactory();
     loader_ptr->DownloadToString(
@@ -171,7 +188,35 @@
         kMaxImageSizeInBytes);
   }
 
+  void DownloadToFile(
+      const std::string& url,
+      network::SimpleURLLoader::DownloadToFileCompleteCallback callback,
+      const base::FilePath& file_path) override {
+    auto simple_loader = CreateSimpleURLLoader(url);
+    auto loader_factory = AmbientClient::Get()->GetURLLoaderFactory();
+    auto* loader_ptr = simple_loader.get();
+    // Download to temp file first to guarantee entire image is written without
+    // errors before attempting to read it.
+    loader_ptr->DownloadToTempFile(
+        loader_factory.get(),
+        base::BindOnce(&AmbientURLLoaderImpl::OnUrlDownloadedToFile,
+                       weak_factory_.GetWeakPtr(), std::move(callback),
+                       std::move(simple_loader), std::move(loader_factory),
+                       file_path));
+  }
+
  private:
+  std::unique_ptr<network::SimpleURLLoader> CreateSimpleURLLoader(
+      const std::string& url) {
+    auto resource_request = std::make_unique<network::ResourceRequest>();
+    resource_request->url = GURL(url);
+    resource_request->method = "GET";
+    resource_request->credentials_mode = network::mojom::CredentialsMode::kOmit;
+
+    return network::SimpleURLLoader::Create(std::move(resource_request),
+                                            NO_TRAFFIC_ANNOTATION_YET);
+  }
+
   // Called when the download completes.
   void OnUrlDownloaded(
       network::SimpleURLLoader::BodyAsStringCallback callback,
@@ -183,18 +228,40 @@
       return;
     }
 
-    int response_code = -1;
-    if (simple_loader->ResponseInfo() &&
-        simple_loader->ResponseInfo()->headers) {
-      response_code = simple_loader->ResponseInfo()->headers->response_code();
-    }
-
-    LOG(ERROR) << "Downloading Backdrop proto failed with error code: "
-               << response_code << " with network error"
+    LOG(ERROR) << "Downloading to string failed with error code: "
+               << GetResponseCode(simple_loader.get()) << " with network error"
                << simple_loader->NetError();
     std::move(callback).Run(std::make_unique<std::string>());
   }
 
+  void OnUrlDownloadedToFile(
+      network::SimpleURLLoader::DownloadToFileCompleteCallback callback,
+      std::unique_ptr<network::SimpleURLLoader> simple_loader,
+      scoped_refptr<network::SharedURLLoaderFactory> loader_factory,
+      const base::FilePath& desired_path,
+      base::FilePath temp_path) {
+    if (simple_loader->NetError() != net::OK || temp_path.empty()) {
+      LOG(ERROR) << "Downloading to file failed with error code: "
+                 << GetResponseCode(simple_loader.get())
+                 << " with network error" << simple_loader->NetError();
+      std::move(callback).Run(base::FilePath());
+    }
+    if (!base::ReplaceFile(temp_path, desired_path, /*error=*/nullptr)) {
+      LOG(ERROR) << "Unable to move downloaded file to ambient directory";
+      std::move(callback).Run(base::FilePath());
+    }
+    std::move(callback).Run(std::move(desired_path));
+  }
+
+  int GetResponseCode(network::SimpleURLLoader* simple_loader) {
+    if (simple_loader->ResponseInfo() &&
+        simple_loader->ResponseInfo()->headers) {
+      return simple_loader->ResponseInfo()->headers->response_code();
+    } else {
+      return -1;
+    }
+  }
+
   base::WeakPtrFactory<AmbientURLLoaderImpl> weak_factory_{this};
 };
 
@@ -234,6 +301,12 @@
       FROM_HERE, kWeatherRefreshInterval,
       base::BindRepeating(&AmbientPhotoController::FetchWeather,
                           weak_factory_.GetWeakPtr()));
+  if (backup_photo_refresh_timer_.IsRunning()) {
+    // Would use |timer_.FireNow()| but this does not execute if screen is
+    // locked. Manually call the expected callback instead.
+    backup_photo_refresh_timer_.Stop();
+    PrepareFetchBackupImages();
+  }
 }
 
 void AmbientPhotoController::StopScreenUpdate() {
@@ -242,12 +315,25 @@
   topic_index_ = 0;
   image_refresh_started_ = false;
   retries_to_read_from_cache_ = kMaxNumberOfCachedImages;
+  backup_retries_to_read_from_cache_ = GetBackupPhotoUrls().size();
   fetch_topic_retry_backoff_.Reset();
   resume_fetch_image_backoff_.Reset();
   ambient_backend_model_.Clear();
   weak_factory_.InvalidateWeakPtrs();
 }
 
+void AmbientPhotoController::ScheduleFetchBackupImages() {
+  if (backup_photo_refresh_timer_.IsRunning())
+    return;
+
+  backup_photo_refresh_timer_.Start(
+      FROM_HERE,
+      std::max(kBackupPhotoRefreshDelay,
+               resume_fetch_image_backoff_.GetTimeUntilRelease()),
+      base::BindOnce(&AmbientPhotoController::PrepareFetchBackupImages,
+                     weak_factory_.GetWeakPtr()));
+}
+
 void AmbientPhotoController::OnTopicsChanged() {
   if (ambient_backend_model_.topics().size() < kMaxNumberOfCachedImages)
     ScheduleFetchTopics(/*backoff=*/false);
@@ -279,19 +365,23 @@
 
 void AmbientPhotoController::ClearCache() {
   task_runner_->PostTask(FROM_HERE,
-                         base::BindOnce(&DeletePathRecursively, GetRootPath()));
+                         base::BindOnce(
+                             [](const base::FilePath& file_path) {
+                               base::DeletePathRecursively(file_path);
+                             },
+                             GetCachePath()));
 }
 
 void AmbientPhotoController::ScheduleFetchTopics(bool backoff) {
   // If retry, using the backoff delay, otherwise the default delay.
-  const base::TimeDelta kDelay =
+  const base::TimeDelta delay =
       backoff ? fetch_topic_retry_backoff_.GetTimeUntilRelease()
               : kTopicFetchInterval;
   base::SequencedTaskRunnerHandle::Get()->PostDelayedTask(
       FROM_HERE,
       base::BindOnce(&AmbientPhotoController::FetchTopics,
                      weak_factory_.GetWeakPtr()),
-      kDelay);
+      delay);
 }
 
 void AmbientPhotoController::ScheduleRefreshImage() {
@@ -307,6 +397,37 @@
                      weak_factory_.GetWeakPtr()));
 }
 
+void AmbientPhotoController::PrepareFetchBackupImages() {
+  task_runner_->PostTaskAndReply(
+      FROM_HERE,
+      base::BindOnce([]() { CreateDirIfNotExists(GetBackupCachePath()); }),
+      base::BindOnce(&AmbientPhotoController::FetchBackupImages,
+                     weak_factory_.GetWeakPtr()));
+}
+
+void AmbientPhotoController::FetchBackupImages() {
+  const auto& backup_photo_urls = GetBackupPhotoUrls();
+  backup_retries_to_read_from_cache_ = backup_photo_urls.size();
+  for (size_t i = 0; i < backup_photo_urls.size(); i++) {
+    url_loader_->DownloadToFile(
+        backup_photo_urls.at(i),
+        base::BindOnce(&AmbientPhotoController::OnBackupImageFetched,
+                       weak_factory_.GetWeakPtr()),
+        GetBackupFilePath(i));
+  }
+}
+
+void AmbientPhotoController::OnBackupImageFetched(base::FilePath file_path) {
+  if (file_path.empty()) {
+    // TODO(b/169807068) Change to retry individual failed images.
+    resume_fetch_image_backoff_.InformOfRequest(/*succeeded=*/false);
+    LOG(WARNING) << "Downloading backup image failed.";
+    ScheduleFetchBackupImages();
+    return;
+  }
+  resume_fetch_image_backoff_.InformOfRequest(/*succeeded=*/true);
+}
+
 const AmbientModeTopic* AmbientPhotoController::GetNextTopic() {
   const auto& topics = ambient_backend_model_.topics();
   // If no more topics, will read from cache.
@@ -385,22 +506,54 @@
 }
 
 void AmbientPhotoController::TryReadPhotoRawData() {
+  auto on_done =
+      base::BindRepeating(&AmbientPhotoController::OnAllPhotoRawDataAvailable,
+                          weak_factory_.GetWeakPtr(),
+                          /*from_downloading=*/false);
+
   // Stop reading from cache after the max number of retries.
   if (retries_to_read_from_cache_ == 0) {
-    LOG(WARNING) << "Failed to read image from cache";
-    if (topic_index_ == ambient_backend_model_.topics().size()) {
-      image_refresh_started_ = false;
+    if (backup_retries_to_read_from_cache_ == 0) {
+      LOG(WARNING) << "Failed to read from cache";
+      if (topic_index_ == ambient_backend_model_.topics().size()) {
+        image_refresh_started_ = false;
+        return;
+      }
+
+      // Try to resume normal workflow with backoff.
+      const base::TimeDelta delay =
+          resume_fetch_image_backoff_.GetTimeUntilRelease();
+      base::SequencedTaskRunnerHandle::Get()->PostDelayedTask(
+          FROM_HERE,
+          base::BindOnce(&AmbientPhotoController::ScheduleRefreshImage,
+                         weak_factory_.GetWeakPtr()),
+          delay);
       return;
     }
 
-    // Try to resume normal workflow with backoff.
-    const base::TimeDelta kDelay =
-        resume_fetch_image_backoff_.GetTimeUntilRelease();
-    base::SequencedTaskRunnerHandle::Get()->PostDelayedTask(
+    --backup_retries_to_read_from_cache_;
+    // Try to read a backup image.
+    auto photo_data = std::make_unique<std::string>();
+    auto* photo_data_ptr = photo_data.get();
+    task_runner_->PostTaskAndReply(
         FROM_HERE,
-        base::BindOnce(&AmbientPhotoController::ScheduleRefreshImage,
-                       weak_factory_.GetWeakPtr()),
-        kDelay);
+        base::BindOnce(
+            [](size_t index, std::string* data) {
+              if (!base::ReadFileToString(GetBackupFilePath(index), data)) {
+                LOG(ERROR) << "Unable to read from backup cache.";
+                data->clear();
+              }
+            },
+            backup_cache_index_for_display_, photo_data_ptr),
+        base::BindOnce(&AmbientPhotoController::OnPhotoRawDataAvailable,
+                       weak_factory_.GetWeakPtr(), /*from_downloading=*/false,
+                       /*is_related_image=*/false, std::move(on_done),
+                       /*details=*/std::make_unique<std::string>(),
+                       std::move(photo_data)));
+
+    backup_cache_index_for_display_++;
+    if (backup_cache_index_for_display_ == GetBackupPhotoUrls().size())
+      backup_cache_index_for_display_ = 0;
     return;
   }
 
@@ -412,22 +565,18 @@
 
   auto photo_data = std::make_unique<std::string>();
   auto photo_details = std::make_unique<std::string>();
-  auto on_done =
-      base::BindRepeating(&AmbientPhotoController::OnAllPhotoRawDataAvailable,
-                          weak_factory_.GetWeakPtr(),
-                          /*from_downloading=*/false);
   task_runner_->PostTaskAndReply(
       FROM_HERE,
       base::BindOnce(
           [](const std::string& file_name, std::string* photo_data,
              std::string* photo_details) {
             if (!base::ReadFileToString(
-                    GetRootPath().Append(file_name + kPhotoFileExt),
+                    GetCachePath().Append(file_name + kPhotoFileExt),
                     photo_data)) {
               photo_data->clear();
             }
             if (!base::ReadFileToString(
-                    GetRootPath().Append(file_name + kPhotoDetailsFileExt),
+                    GetCachePath().Append(file_name + kPhotoDetailsFileExt),
                     photo_details)) {
               photo_details->clear();
             }
@@ -435,7 +584,7 @@
           file_name, photo_data.get(), photo_details.get()),
       base::BindOnce(&AmbientPhotoController::OnPhotoRawDataAvailable,
                      weak_factory_.GetWeakPtr(), /*from_downloading=*/false,
-                     /*is_related_image=*/false, on_done,
+                     /*is_related_image=*/false, std::move(on_done),
                      std::move(photo_details), std::move(photo_data)));
 }
 
@@ -486,8 +635,8 @@
           [](const std::string& file_name, bool need_to_save,
              const std::string& data, const std::string& details) {
             if (need_to_save) {
-              WriteFile(GetRootPath().Append(file_name + kPhotoFileExt), data);
-              WriteFile(GetRootPath().Append(file_name + kPhotoDetailsFileExt),
+              WriteFile(GetCachePath().Append(file_name + kPhotoFileExt), data);
+              WriteFile(GetCachePath().Append(file_name + kPhotoDetailsFileExt),
                         details);
             }
           },
@@ -539,6 +688,8 @@
   }
 
   retries_to_read_from_cache_ = kMaxNumberOfCachedImages;
+  backup_retries_to_read_from_cache_ = GetBackupPhotoUrls().size();
+
   if (from_downloading)
     resume_fetch_image_backoff_.InformOfRequest(/*succeeded=*/true);
 
@@ -604,4 +755,8 @@
   FetchPhotoRawData();
 }
 
+void AmbientPhotoController::FetchBackupImagesForTesting() {
+  PrepareFetchBackupImages();
+}
+
 }  // namespace ash
diff --git a/ash/ambient/ambient_photo_controller.h b/ash/ambient/ambient_photo_controller.h
index d2894dc0..d8ef32a2 100644
--- a/ash/ambient/ambient_photo_controller.h
+++ b/ash/ambient/ambient_photo_controller.h
@@ -44,6 +44,11 @@
   virtual void Download(
       const std::string& url,
       network::SimpleURLLoader::BodyAsStringCallback callback) = 0;
+
+  virtual void DownloadToFile(
+      const std::string& url,
+      network::SimpleURLLoader::DownloadToFileCompleteCallback callback,
+      const base::FilePath& file_path) = 0;
 };
 
 // A wrapper class of |data_decoder| to decode the photo raw data. In the test,
@@ -87,6 +92,8 @@
   void StartScreenUpdate();
   void StopScreenUpdate();
 
+  void ScheduleFetchBackupImages();
+
   AmbientBackendModel* ambient_backend_model() {
     return &ambient_backend_model_;
   }
@@ -95,6 +102,10 @@
     return photo_refresh_timer_;
   }
 
+  const base::OneShotTimer& backup_photo_refresh_timer_for_testing() const {
+    return backup_photo_refresh_timer_;
+  }
+
   // AmbientBackendModelObserver:
   void OnTopicsChanged() override;
 
@@ -112,6 +123,14 @@
 
   void ScheduleRefreshImage();
 
+  // Create the backup cache directory and start downloading images.
+  void PrepareFetchBackupImages();
+
+  // Download backup cache images.
+  void FetchBackupImages();
+
+  void OnBackupImageFetched(base::FilePath file_path);
+
   void GetScreenUpdateInfo();
 
   // Return a topic to download the image.
@@ -178,11 +197,16 @@
 
   void FetchImageForTesting();
 
+  void FetchBackupImagesForTesting();
+
   AmbientBackendModel ambient_backend_model_;
 
   // The timer to refresh photos.
   base::OneShotTimer photo_refresh_timer_;
 
+  // The timer to refresh backup cache photos.
+  base::OneShotTimer backup_photo_refresh_timer_;
+
   // The timer to refresh weather information.
   base::RepeatingTimer weather_refresh_timer_;
 
@@ -194,6 +218,10 @@
   // to read from the next cached file by increasing this index by 1.
   int cache_index_for_display_ = 0;
 
+  // Current index of backup cached image to display when no other cached images
+  // are available.
+  size_t backup_cache_index_for_display_ = 0;
+
   // Current index of cached image to save for the latest downloaded photo.
   // The write command could fail. This index will increase 1 no matter writing
   // successfully or not. But theoretically we could not to change this index if
@@ -207,6 +235,8 @@
   // read cached images.
   int retries_to_read_from_cache_ = kMaxNumberOfCachedImages;
 
+  int backup_retries_to_read_from_cache_ = 0;
+
   // Backoff for fetch topics retries.
   net::BackoffEntry fetch_topic_retry_backoff_;
 
diff --git a/ash/ambient/ambient_photo_controller_unittest.cc b/ash/ambient/ambient_photo_controller_unittest.cc
index 70aa5f5..c56d81c 100644
--- a/ash/ambient/ambient_photo_controller_unittest.cc
+++ b/ash/ambient/ambient_photo_controller_unittest.cc
@@ -31,7 +31,48 @@
 
 namespace ash {
 
-using AmbientPhotoControllerTest = AmbientAshTestBase;
+class AmbientPhotoControllerTest : public AmbientAshTestBase {
+ public:
+  // AmbientAshTestBase:
+  void SetUp() override {
+    AmbientAshTestBase::SetUp();
+    CleanupAmbientDir();
+  }
+  void TearDown() override {
+    AmbientAshTestBase::TearDown();
+    CleanupAmbientDir();
+  }
+
+  void CleanupAmbientDir() { base::DeletePathRecursively(GetRootDir()); }
+
+  std::vector<base::FilePath> GetFilePathsInDir(const base::FilePath& dir) {
+    std::vector<base::FilePath> result;
+    base::FileEnumerator files(
+        dir, /*recursive=*/false,
+        base::FileEnumerator::FILES | base::FileEnumerator::DIRECTORIES);
+    for (base::FilePath current = files.Next(); !current.empty();
+         current = files.Next()) {
+      result.emplace_back(current);
+    }
+    return result;
+  }
+
+  base::FilePath GetRootDir() {
+    base::FilePath home_dir;
+    base::PathService::Get(base::DIR_HOME, &home_dir);
+    return home_dir.Append(FILE_PATH_LITERAL(kAmbientModeDirectoryName));
+  }
+
+  base::FilePath GetCacheDir() {
+    return GetRootDir().Append(
+        FILE_PATH_LITERAL(kAmbientModeCacheDirectoryName));
+  }
+
+  base::FilePath GetBackupCacheDir() {
+    return GetRootDir().Append(
+        FILE_PATH_LITERAL(kAmbientModeBackupCacheDirectoryName));
+  }
+};
 
 // Test that topics are downloaded when starting screen update.
 TEST_F(AmbientPhotoControllerTest, ShouldStartToDownloadTopics) {
@@ -101,53 +142,29 @@
 
 // Test that image is saved.
 TEST_F(AmbientPhotoControllerTest, ShouldSaveImagesOnDisk) {
-  base::FilePath home_dir;
-  base::PathService::Get(base::DIR_HOME, &home_dir);
-
-  base::FilePath ambient_image_path =
-      home_dir.Append(FILE_PATH_LITERAL(kAmbientModeDirectoryName));
-
-  // Clean up.
-  base::DeletePathRecursively(ambient_image_path);
+  base::FilePath ambient_image_path = GetCacheDir();
 
   // Start to refresh images. It will download a test image and write it in
   // |ambient_image_path| in a delayed task.
   photo_controller()->StartScreenUpdate();
   FastForwardToNextImage();
 
+  // Count files and directories in ambient_image_path. There should only be
+  // four files that were just created to save image files for this ambient mode
+  // session.
   EXPECT_TRUE(base::PathExists(ambient_image_path));
-
-  {
-    // Count files and directories in root_path. There should only be one file
-    // that was just created to save image files for this ambient mode session.
-    base::FileEnumerator files(
-        ambient_image_path, /*recursive=*/false,
-        base::FileEnumerator::FILES | base::FileEnumerator::DIRECTORIES);
-    int count = 0;
-    for (base::FilePath current = files.Next(); !current.empty();
-         current = files.Next()) {
-      EXPECT_FALSE(files.GetInfo().IsDirectory());
-      count++;
-    }
-
-    // Two image files and two attribution files.
-    EXPECT_EQ(count, 4);
+  auto file_paths = GetFilePathsInDir(ambient_image_path);
+  // Two image files and two attribution files.
+  EXPECT_EQ(file_paths.size(), 4u);
+  for (auto& path : file_paths) {
+    // No sub directories.
+    EXPECT_FALSE(base::DirectoryExists(path));
   }
-
-  // Clean up.
-  base::DeletePathRecursively(ambient_image_path);
 }
 
 // Test that image is save and will be deleted when stopping ambient mode.
 TEST_F(AmbientPhotoControllerTest, ShouldNotDeleteImagesOnDisk) {
-  base::FilePath home_dir;
-  base::PathService::Get(base::DIR_HOME, &home_dir);
-
-  base::FilePath ambient_image_path =
-      home_dir.Append(FILE_PATH_LITERAL(kAmbientModeDirectoryName));
-
-  // Clean up.
-  base::DeletePathRecursively(ambient_image_path);
+  base::FilePath ambient_image_path = GetCacheDir();
 
   // Start to refresh images. It will download a test image and write it in
   // |ambient_image_path| in a delayed task.
@@ -169,37 +186,22 @@
   image = photo_controller()->ambient_backend_model()->GetNextImage();
   EXPECT_TRUE(image.IsNull());
 
-  {
-    // Count files and directories in root_path. There should only be one file
-    // that was just created to save image files for this ambient mode session.
-    base::FileEnumerator files(
-        ambient_image_path, /*recursive=*/false,
-        base::FileEnumerator::FILES | base::FileEnumerator::DIRECTORIES);
-    int count = 0;
-    for (base::FilePath current = files.Next(); !current.empty();
-         current = files.Next()) {
-      EXPECT_FALSE(files.GetInfo().IsDirectory());
-      count++;
-    }
-
-    // Two image files and two attribution files.
-    EXPECT_EQ(count, 4);
+  // Count files and directories in ambient_image_path. There should only be
+  // four files that were just created to save image files for the prior ambient
+  // mode session.
+  EXPECT_TRUE(base::PathExists(ambient_image_path));
+  auto file_paths = GetFilePathsInDir(ambient_image_path);
+  // Two image files and two attribution files.
+  EXPECT_EQ(file_paths.size(), 4u);
+  for (auto& path : file_paths) {
+    // No sub directories.
+    EXPECT_FALSE(base::DirectoryExists(path));
   }
-
-  // Clean up.
-  base::DeletePathRecursively(ambient_image_path);
 }
 
 // Test that image is read from disk when no more topics.
 TEST_F(AmbientPhotoControllerTest, ShouldReadCacheWhenNoMoreTopics) {
-  base::FilePath home_dir;
-  base::PathService::Get(base::DIR_HOME, &home_dir);
-
-  base::FilePath ambient_image_path =
-      home_dir.Append(FILE_PATH_LITERAL(kAmbientModeDirectoryName));
-
-  // Clean up.
-  base::DeletePathRecursively(ambient_image_path);
+  base::FilePath ambient_image_path = GetCacheDir();
 
   FetchImage();
   FastForwardToNextImage();
@@ -226,14 +228,7 @@
 // Test that will try 100 times to read image from disk when no more topics.
 TEST_F(AmbientPhotoControllerTest,
        ShouldTry100TimesToReadCacheWhenNoMoreTopics) {
-  base::FilePath home_dir;
-  base::PathService::Get(base::DIR_HOME, &home_dir);
-
-  base::FilePath ambient_image_path =
-      home_dir.Append(FILE_PATH_LITERAL(kAmbientModeDirectoryName));
-
-  // Clean up.
-  base::DeletePathRecursively(ambient_image_path);
+  base::FilePath ambient_image_path = GetCacheDir();
 
   FetchImage();
   FastForwardToNextImage();
@@ -253,21 +248,11 @@
   FastForwardToNextImage();
   image = photo_controller()->ambient_backend_model()->GetNextImage();
   EXPECT_FALSE(image.IsNull());
-
-  // Clean up.
-  base::DeletePathRecursively(ambient_image_path);
 }
 
 // Test that image is read from disk when image downloading failed.
 TEST_F(AmbientPhotoControllerTest, ShouldReadCacheWhenImageDownloadingFailed) {
-  base::FilePath home_dir;
-  base::PathService::Get(base::DIR_HOME, &home_dir);
-
-  base::FilePath ambient_image_path =
-      home_dir.Append(FILE_PATH_LITERAL(kAmbientModeDirectoryName));
-
-  // Clean up.
-  base::DeletePathRecursively(ambient_image_path);
+  base::FilePath ambient_image_path = GetCacheDir();
 
   SetUrlLoaderData(std::make_unique<std::string>());
   FetchTopics();
@@ -290,23 +275,13 @@
   task_environment()->FastForwardBy(0.2 * kTopicFetchInterval);
   image = photo_controller()->ambient_backend_model()->GetNextImage();
   EXPECT_FALSE(image.IsNull());
-
-  // Clean up.
-  base::DeletePathRecursively(ambient_image_path);
 }
 
 // Test that image is read from disk when image decoding failed.
 TEST_F(AmbientPhotoControllerTest, ShouldReadCacheWhenImageDecodingFailed) {
-  base::FilePath home_dir;
-  base::PathService::Get(base::DIR_HOME, &home_dir);
+  base::FilePath ambient_image_path = GetCacheDir();
 
-  base::FilePath ambient_image_path =
-      home_dir.Append(FILE_PATH_LITERAL(kAmbientModeDirectoryName));
-
-  // Clean up.
-  base::DeletePathRecursively(ambient_image_path);
-
-  SeteImageDecoderImage(gfx::ImageSkia());
+  SetImageDecoderImage(gfx::ImageSkia());
   FetchTopics();
   // Forward a little bit time. FetchTopics() will succeed.
   // Downloading succeed and save the data to disk.
@@ -314,21 +289,11 @@
   task_environment()->FastForwardBy(0.2 * kTopicFetchInterval);
   auto image = photo_controller()->ambient_backend_model()->GetNextImage();
   EXPECT_FALSE(image.IsNull());
-
-  // Clean up.
-  base::DeletePathRecursively(ambient_image_path);
 }
 
 // Test that image will refresh when have more topics.
 TEST_F(AmbientPhotoControllerTest, ShouldResumWhenHaveMoreTopics) {
-  base::FilePath home_dir;
-  base::PathService::Get(base::DIR_HOME, &home_dir);
-
-  base::FilePath ambient_image_path =
-      home_dir.Append(FILE_PATH_LITERAL(kAmbientModeDirectoryName));
-
-  // Clean up.
-  base::DeletePathRecursively(ambient_image_path);
+  base::FilePath ambient_image_path = GetCacheDir();
 
   FetchImage();
   FastForwardToNextImage();
@@ -341,9 +306,95 @@
   task_environment()->FastForwardBy(0.2 * kTopicFetchInterval);
   image = photo_controller()->ambient_backend_model()->GetNextImage();
   EXPECT_FALSE(image.IsNull());
+}
 
-  // Clean up.
-  base::DeletePathRecursively(ambient_image_path);
+TEST_F(AmbientPhotoControllerTest, ShouldDownloadBackupImagesWhenScheduled) {
+  base::FilePath backup_image_path = GetBackupCacheDir();
+
+  std::string expected_data = "backup data";
+  SetUrlLoaderData(std::make_unique<std::string>(expected_data));
+
+  photo_controller()->ScheduleFetchBackupImages();
+
+  EXPECT_TRUE(
+      photo_controller()->backup_photo_refresh_timer_for_testing().IsRunning());
+
+  // TImer is running but download has not started yet.
+  EXPECT_FALSE(base::DirectoryExists(GetBackupCacheDir()));
+  task_environment()->FastForwardBy(kBackupPhotoRefreshDelay);
+
+  // Timer should have stopped.
+  EXPECT_FALSE(
+      photo_controller()->backup_photo_refresh_timer_for_testing().IsRunning());
+
+  // Download has triggered and backup cache directory is created.
+  EXPECT_TRUE(base::DirectoryExists(backup_image_path));
+
+  // Should be two files in backup cache directory.
+  auto paths = GetFilePathsInDir(backup_image_path);
+  std::sort(paths.begin(), paths.end());
+  EXPECT_EQ(paths.size(), 2u);
+  EXPECT_EQ(paths[0].BaseName().value(), "0.img");
+  EXPECT_EQ(paths[1].BaseName().value(), "1.img");
+  for (const auto& path : paths) {
+    std::string data;
+    base::ReadFileToString(path, &data);
+    EXPECT_EQ(data, expected_data);
+  }
+}
+
+TEST_F(AmbientPhotoControllerTest, ShouldResetTimerWhenBackupImagesFail) {
+  photo_controller()->ScheduleFetchBackupImages();
+
+  EXPECT_TRUE(
+      photo_controller()->backup_photo_refresh_timer_for_testing().IsRunning());
+
+  // Simulate an error in DownloadToFile.
+  SetUrlLoaderData(nullptr);
+  task_environment()->FastForwardBy(kBackupPhotoRefreshDelay);
+
+  // Directory should have been created, but with no files in it.
+  EXPECT_TRUE(base::DirectoryExists(GetBackupCacheDir()));
+
+  auto paths = GetFilePathsInDir(GetBackupCacheDir());
+  EXPECT_EQ(paths.size(), 0u);
+
+  // Timer should have restarted.
+  EXPECT_TRUE(
+      photo_controller()->backup_photo_refresh_timer_for_testing().IsRunning());
+}
+
+TEST_F(AmbientPhotoControllerTest,
+       ShouldStartDownloadBackupImagesOnAmbientModeStart) {
+  photo_controller()->ScheduleFetchBackupImages();
+
+  EXPECT_TRUE(
+      photo_controller()->backup_photo_refresh_timer_for_testing().IsRunning());
+
+  SetUrlLoaderData(std::make_unique<std::string>("image data"));
+
+  photo_controller()->StartScreenUpdate();
+
+  // Download should have started immediately.
+  EXPECT_FALSE(
+      photo_controller()->backup_photo_refresh_timer_for_testing().IsRunning());
+
+  task_environment()->RunUntilIdle();
+
+  // Download has triggered and backup cache directory is created.
+  EXPECT_TRUE(base::DirectoryExists(GetBackupCacheDir()));
+
+  // Should be two files in backup cache directory.
+  auto paths = GetFilePathsInDir(GetBackupCacheDir());
+  std::sort(paths.begin(), paths.end());
+  EXPECT_EQ(paths.size(), 2u);
+  EXPECT_EQ(paths[0].BaseName().value(), "0.img");
+  EXPECT_EQ(paths[1].BaseName().value(), "1.img");
+  for (const auto& path : paths) {
+    std::string data;
+    base::ReadFileToString(path, &data);
+    EXPECT_EQ(data, "image data");
+  }
 }
 
 TEST_F(AmbientPhotoControllerTest, ShouldStartToRefreshWeather) {
diff --git a/ash/ambient/backdrop/ambient_backend_controller_impl.cc b/ash/ambient/backdrop/ambient_backend_controller_impl.cc
index 3d578f9..2f6a9f8 100644
--- a/ash/ambient/backdrop/ambient_backend_controller_impl.cc
+++ b/ash/ambient/backdrop/ambient_backend_controller_impl.cc
@@ -4,6 +4,7 @@
 
 #include "ash/ambient/backdrop/ambient_backend_controller_impl.h"
 
+#include <array>
 #include <string>
 #include <utility>
 #include <vector>
@@ -24,6 +25,7 @@
 #include "base/logging.h"
 #include "base/optional.h"
 #include "base/time/time.h"
+#include "chromeos/assistant/internal/ambient/backdrop_client_config.h"
 #include "chromeos/assistant/internal/proto/google3/backdrop/backdrop.pb.h"
 #include "chromeos/constants/chromeos_features.h"
 #include "components/prefs/pref_service.h"
@@ -459,6 +461,11 @@
                                    std::move(backdrop_url_loader)));
 }
 
+const std::array<const char*, 2>&
+AmbientBackendControllerImpl::GetBackupPhotoUrls() const {
+  return chromeos::ambient::kBackupPhotoUrls;
+}
+
 void AmbientBackendControllerImpl::FetchScreenUpdateInfoInternal(
     int num_topics,
     OnScreenUpdateInfoFetchedCallback callback,
diff --git a/ash/ambient/backdrop/ambient_backend_controller_impl.h b/ash/ambient/backdrop/ambient_backend_controller_impl.h
index be25bd60..8fd9d3b3 100644
--- a/ash/ambient/backdrop/ambient_backend_controller_impl.h
+++ b/ash/ambient/backdrop/ambient_backend_controller_impl.h
@@ -5,6 +5,7 @@
 #ifndef ASH_AMBIENT_BACKDROP_AMBIENT_BACKEND_CONTROLLER_IMPL_H_
 #define ASH_AMBIENT_BACKDROP_AMBIENT_BACKEND_CONTROLLER_IMPL_H_
 
+#include <array>
 #include <memory>
 #include <string>
 #include <utility>
@@ -48,6 +49,7 @@
       OnSettingsAndAlbumsFetchedCallback callback) override;
   void SetPhotoRefreshInterval(base::TimeDelta interval) override;
   void FetchWeather(FetchWeatherCallback callback) override;
+  const std::array<const char*, 2>& GetBackupPhotoUrls() const override;
 
  private:
   using BackdropClientConfig = chromeos::ambient::BackdropClientConfig;
diff --git a/ash/ambient/test/ambient_ash_test_base.cc b/ash/ambient/test/ambient_ash_test_base.cc
index 90b08f4..9b86a31 100644
--- a/ash/ambient/test/ambient_ash_test_base.cc
+++ b/ash/ambient/test/ambient_ash_test_base.cc
@@ -21,9 +21,11 @@
 #include "ash/session/session_controller_impl.h"
 #include "ash/shell.h"
 #include "base/callback.h"
+#include "base/files/file_util.h"
 #include "base/memory/ptr_util.h"
 #include "base/run_loop.h"
 #include "base/sequenced_task_runner.h"
+#include "base/threading/scoped_blocking_call.h"
 #include "base/threading/sequenced_task_runner_handle.h"
 #include "base/time/time.h"
 #include "chromeos/constants/chromeos_features.h"
@@ -48,18 +50,42 @@
   void Download(
       const std::string& url,
       network::SimpleURLLoader::BodyAsStringCallback callback) override {
-    std::string data = data_ ? *data_ : "test";
     // Pretend to respond asynchronously.
     base::SequencedTaskRunnerHandle::Get()->PostDelayedTask(
         FROM_HERE,
         base::BindOnce(std::move(callback),
-                       std::make_unique<std::string>(data)),
+                       std::make_unique<std::string>(data_ ? *data_ : "test")),
         base::TimeDelta::FromMilliseconds(1));
   }
+  void DownloadToFile(
+      const std::string& url,
+      network::SimpleURLLoader::DownloadToFileCompleteCallback callback,
+      const base::FilePath& file_path) override {
+    if (!data_) {
+      base::SequencedTaskRunnerHandle::Get()->PostTask(
+          FROM_HERE, base::BindOnce(std::move(callback), base::FilePath()));
+      return;
+    }
+
+    if (!WriteFile(file_path, *data_)) {
+      LOG(WARNING) << "error writing file to file_path: " << file_path;
+
+      base::SequencedTaskRunnerHandle::Get()->PostTask(
+          FROM_HERE, base::BindOnce(std::move(callback), base::FilePath()));
+      return;
+    }
+
+    base::SequencedTaskRunnerHandle::Get()->PostTask(
+        FROM_HERE, base::BindOnce(std::move(callback), file_path));
+  }
 
   void SetData(std::unique_ptr<std::string> data) { data_ = std::move(data); }
 
  private:
+  bool WriteFile(const base::FilePath& file_path, const std::string& data) {
+    base::ScopedBlockingCall blocking(FROM_HERE, base::BlockingType::MAY_BLOCK);
+    return base::WriteFile(file_path, data);
+  }
   // If not null, will return this data.
   std::unique_ptr<std::string> data_;
 };
@@ -352,6 +378,10 @@
   photo_controller()->FetchImageForTesting();
 }
 
+void AmbientAshTestBase::FetchBackupImages() {
+  photo_controller()->FetchBackupImagesForTesting();
+}
+
 void AmbientAshTestBase::SetUrlLoaderData(std::unique_ptr<std::string> data) {
   auto* url_loader_ = static_cast<TestAmbientURLLoaderImpl*>(
       photo_controller()->get_url_loader_for_testing());
@@ -359,7 +389,7 @@
   url_loader_->SetData(std::move(data));
 }
 
-void AmbientAshTestBase::SeteImageDecoderImage(const gfx::ImageSkia& image) {
+void AmbientAshTestBase::SetImageDecoderImage(const gfx::ImageSkia& image) {
   auto* image_decoder = static_cast<TestAmbientImageDecoderImpl*>(
       photo_controller()->get_image_decoder_for_testing());
 
diff --git a/ash/ambient/test/ambient_ash_test_base.h b/ash/ambient/test/ambient_ash_test_base.h
index a863d78..35a8e7b 100644
--- a/ash/ambient/test/ambient_ash_test_base.h
+++ b/ash/ambient/test/ambient_ash_test_base.h
@@ -141,9 +141,11 @@
 
   void FetchImage();
 
+  void FetchBackupImages();
+
   void SetUrlLoaderData(std::unique_ptr<std::string> data);
 
-  void SeteImageDecoderImage(const gfx::ImageSkia& image);
+  void SetImageDecoderImage(const gfx::ImageSkia& image);
 
  private:
   base::test::ScopedFeatureList scoped_feature_list_;
diff --git a/ash/app_list/views/app_list_view_unittest.cc b/ash/app_list/views/app_list_view_unittest.cc
index 21c1cde5..bc7638b 100644
--- a/ash/app_list/views/app_list_view_unittest.cc
+++ b/ash/app_list/views/app_list_view_unittest.cc
@@ -2498,19 +2498,6 @@
   EXPECT_FALSE(assistant_page_view()->GetVisible());
 }
 
-// Tests that no answer card view when kEnableAssistantSearch is enabled.
-TEST_F(AppListViewTest, NoAnswerCardWhenEmbeddedAssistantUIEnabled) {
-  base::test::ScopedFeatureList scoped_feature_list;
-  scoped_feature_list.InitWithFeatures(
-      {app_list_features::kEnableAssistantSearch}, {});
-  ASSERT_TRUE(app_list_features::IsAssistantSearchEnabled());
-
-  Initialize(false /*is_tablet_mode*/);
-  Show();
-
-  EXPECT_FALSE(contents_view()->search_result_answer_card_view_for_test());
-}
-
 // Tests that pressing escape in embedded Assistant UI returns to fullscreen
 // if the Assistant UI was launched from fullscreen app list.
 TEST_F(AppListViewTest, EscapeKeyInEmbeddedAssistantUIReturnsToAppList) {
diff --git a/ash/ash_strings.grd b/ash/ash_strings.grd
index 78eff98..437db6c 100644
--- a/ash/ash_strings.grd
+++ b/ash/ash_strings.grd
@@ -2828,19 +2828,19 @@
       <message name="IDS_ASH_QUICK_ANSWERS_UNIT_CONVERSION_INTENT" desc="Display text of unit conversion intent. This is used in the title of Quick Answers user consent dialog.">
         conversion
       </message>
-      <message name="IDS_ASH_QUICK_ANSWERS_USER_CONSENT_VIEW_TITLE_TEXT" desc="Title text of the dialog that opens up to seek user-consent for the Quick Answers feature.">
+      <message name="IDS_ASH_QUICK_ANSWERS_USER_NOTICE_VIEW_TITLE_TEXT" desc="Title text of the dialog that opens up to seek user-consent for the Quick Answers feature.">
         Get info related to your selection
       </message>
-      <message name="IDS_ASH_QUICK_ANSWERS_USER_CONSENT_VIEW_TITLE_TEXT_WITH_INTENT" desc="Title text of the dialog that opens up to seek user-consent for the Quick Answers feature when supported intent is generated.">
+      <message name="IDS_ASH_QUICK_ANSWERS_USER_NOTICE_VIEW_TITLE_TEXT_WITH_INTENT" desc="Title text of the dialog that opens up to seek user-consent for the Quick Answers feature when supported intent is generated.">
         Get the <ph name="intent">$1<ex>definition</ex></ph> for "<ph name="query">$2<ex>unfathomable</ex></ph>"
       </message>
-      <message name="IDS_ASH_QUICK_ANSWERS_USER_CONSENT_VIEW_DESC_TEXT" desc="Description in the dialog that opens up to seek user-consent for the Quick Answers feature.">
+      <message name="IDS_ASH_QUICK_ANSWERS_USER_NOTICE_VIEW_DESC_TEXT" desc="Description in the dialog that opens up to seek user-consent for the Quick Answers feature.">
         With a right-click or a long press, Assistant shows info such as the definition or unit conversion for your selection.
       </message>
-      <message name="IDS_ASH_QUICK_ANSWERS_USER_CONSENT_VIEW_MANAGE_SETTINGS_BUTTON" desc="Display text on the Manage-Settings button in the dialog that opens up to seek user-consent for the Quick Answers feature.">
+      <message name="IDS_ASH_QUICK_ANSWERS_USER_NOTICE_VIEW_MANAGE_SETTINGS_BUTTON" desc="Display text on the Manage-Settings button in the dialog that opens up to seek user-consent for the Quick Answers feature.">
         Manage Settings
       </message>
-      <message name="IDS_ASH_QUICK_ANSWERS_USER_CONSENT_VIEW_GRANT_CONSENT_BUTTON" desc="Display text on the Grant-Consent button in the dialog that opens up to seek user-consent for the Quick Answers feature.">
+      <message name="IDS_ASH_QUICK_ANSWERS_USER_NOTICE_VIEW_ACCEPT_BUTTON" desc="Display text on the accept button in the dialog that opens up to seek user-consent for the Quick Answers feature.">
         Got it
       </message>
 
diff --git a/ash/ash_strings_grd/IDS_ASH_QUICK_ANSWERS_USER_CONSENT_VIEW_GRANT_CONSENT_BUTTON.png.sha1 b/ash/ash_strings_grd/IDS_ASH_QUICK_ANSWERS_USER_NOTICE_VIEW_ACCEPT_BUTTON.png.sha1
similarity index 100%
rename from ash/ash_strings_grd/IDS_ASH_QUICK_ANSWERS_USER_CONSENT_VIEW_GRANT_CONSENT_BUTTON.png.sha1
rename to ash/ash_strings_grd/IDS_ASH_QUICK_ANSWERS_USER_NOTICE_VIEW_ACCEPT_BUTTON.png.sha1
diff --git a/ash/ash_strings_grd/IDS_ASH_QUICK_ANSWERS_USER_CONSENT_VIEW_DESC_TEXT.png.sha1 b/ash/ash_strings_grd/IDS_ASH_QUICK_ANSWERS_USER_NOTICE_VIEW_DESC_TEXT.png.sha1
similarity index 100%
rename from ash/ash_strings_grd/IDS_ASH_QUICK_ANSWERS_USER_CONSENT_VIEW_DESC_TEXT.png.sha1
rename to ash/ash_strings_grd/IDS_ASH_QUICK_ANSWERS_USER_NOTICE_VIEW_DESC_TEXT.png.sha1
diff --git a/ash/ash_strings_grd/IDS_ASH_QUICK_ANSWERS_USER_CONSENT_VIEW_MANAGE_SETTINGS_BUTTON.png.sha1 b/ash/ash_strings_grd/IDS_ASH_QUICK_ANSWERS_USER_NOTICE_VIEW_MANAGE_SETTINGS_BUTTON.png.sha1
similarity index 100%
rename from ash/ash_strings_grd/IDS_ASH_QUICK_ANSWERS_USER_CONSENT_VIEW_MANAGE_SETTINGS_BUTTON.png.sha1
rename to ash/ash_strings_grd/IDS_ASH_QUICK_ANSWERS_USER_NOTICE_VIEW_MANAGE_SETTINGS_BUTTON.png.sha1
diff --git a/ash/ash_strings_grd/IDS_ASH_QUICK_ANSWERS_USER_CONSENT_VIEW_TITLE_TEXT.png.sha1 b/ash/ash_strings_grd/IDS_ASH_QUICK_ANSWERS_USER_NOTICE_VIEW_TITLE_TEXT.png.sha1
similarity index 100%
rename from ash/ash_strings_grd/IDS_ASH_QUICK_ANSWERS_USER_CONSENT_VIEW_TITLE_TEXT.png.sha1
rename to ash/ash_strings_grd/IDS_ASH_QUICK_ANSWERS_USER_NOTICE_VIEW_TITLE_TEXT.png.sha1
diff --git a/ash/ash_strings_grd/IDS_ASH_QUICK_ANSWERS_USER_CONSENT_VIEW_TITLE_TEXT_WITH_INTENT.png.sha1 b/ash/ash_strings_grd/IDS_ASH_QUICK_ANSWERS_USER_NOTICE_VIEW_TITLE_TEXT_WITH_INTENT.png.sha1
similarity index 100%
rename from ash/ash_strings_grd/IDS_ASH_QUICK_ANSWERS_USER_CONSENT_VIEW_TITLE_TEXT_WITH_INTENT.png.sha1
rename to ash/ash_strings_grd/IDS_ASH_QUICK_ANSWERS_USER_NOTICE_VIEW_TITLE_TEXT_WITH_INTENT.png.sha1
diff --git a/ash/login/ui/login_big_user_view.cc b/ash/login/ui/login_big_user_view.cc
index 451d44ad1..c58060f 100644
--- a/ash/login/ui/login_big_user_view.cc
+++ b/ash/login/ui/login_big_user_view.cc
@@ -6,7 +6,8 @@
 
 #include "ash/public/cpp/login_constants.h"
 #include "ash/shell.h"
-#include "ash/style/ash_color_provider.h"
+#include "ash/style/default_color_constants.h"
+#include "ash/style/default_colors.h"
 #include "ash/wallpaper/wallpaper_controller_impl.h"
 #include "components/account_id/account_id.h"
 #include "ui/views/background.h"
@@ -119,7 +120,8 @@
     layer()->SetFillsBoundsOpaquely(false);
     SetBackground(views::CreateBackgroundFromPainter(
         views::Painter::CreateSolidRoundRectPainter(
-            SkColorSetA(AshColorProvider::Get()->GetLoginBackgroundBaseColor(),
+            SkColorSetA(DeprecatedGetLoginBackgroundBaseColor(
+                            kLoginBackgroundBaseColor),
                         login_constants::kNonBlurredWallpaperBackgroundAlpha),
             login_constants::kNonBlurredWallpaperBackgroundRadiusDp)));
   }
diff --git a/ash/login/ui/scrollable_users_list_view.cc b/ash/login/ui/scrollable_users_list_view.cc
index 6af0061..c8b2db7 100644
--- a/ash/login/ui/scrollable_users_list_view.cc
+++ b/ash/login/ui/scrollable_users_list_view.cc
@@ -14,6 +14,8 @@
 #include "ash/public/cpp/login_constants.h"
 #include "ash/shell.h"
 #include "ash/style/ash_color_provider.h"
+#include "ash/style/default_color_constants.h"
+#include "ash/style/default_colors.h"
 #include "ash/wallpaper/wallpaper_controller_impl.h"
 #include "base/bind.h"
 #include "base/numerics/ranges.h"
@@ -252,8 +254,9 @@
               color_utils::ColorProfile(color_utils::LumaRange::DARK,
                                         color_utils::SaturationRange::MUTED));
       SkColor tint_color = color_utils::GetResultingPaintColor(
-          SkColorSetA(AshColorProvider::Get()->GetLoginBackgroundBaseColor(),
-                      login_constants::kTranslucentColorDarkenAlpha),
+          SkColorSetA(
+              DeprecatedGetLoginBackgroundBaseColor(kLoginBackgroundBaseColor),
+              login_constants::kTranslucentColorDarkenAlpha),
           SkColorSetA(dark_muted_color, SK_AlphaOPAQUE));
       tint_color =
           SkColorSetA(tint_color, login_constants::kScrollTranslucentAlpha);
@@ -424,9 +427,9 @@
     cc::PaintFlags flags;
     flags.setAntiAlias(true);
     flags.setStyle(cc::PaintFlags::kFill_Style);
-    flags.setColor(
-        SkColorSetA(AshColorProvider::Get()->GetLoginBackgroundBaseColor(),
-                    login_constants::kNonBlurredWallpaperBackgroundAlpha));
+    flags.setColor(SkColorSetA(
+        DeprecatedGetLoginBackgroundBaseColor(kLoginBackgroundBaseColor),
+        login_constants::kNonBlurredWallpaperBackgroundAlpha));
     canvas->DrawRoundRect(
         render_bounds, login_constants::kNonBlurredWallpaperBackgroundRadiusDp,
         flags);
diff --git a/ash/public/cpp/ambient/ambient_backend_controller.h b/ash/public/cpp/ambient/ambient_backend_controller.h
index b7b7132..77f5931 100644
--- a/ash/public/cpp/ambient/ambient_backend_controller.h
+++ b/ash/public/cpp/ambient/ambient_backend_controller.h
@@ -5,6 +5,7 @@
 #ifndef ASH_PUBLIC_CPP_AMBIENT_AMBIENT_BACKEND_CONTROLLER_H_
 #define ASH_PUBLIC_CPP_AMBIENT_AMBIENT_BACKEND_CONTROLLER_H_
 
+#include <array>
 #include <string>
 #include <vector>
 
@@ -156,6 +157,10 @@
 
   // Fetch the weather information.
   virtual void FetchWeather(FetchWeatherCallback) = 0;
+
+  // Get stock photo urls to cache in advance in case Ambient mode is started
+  // without internet access.
+  virtual const std::array<const char*, 2>& GetBackupPhotoUrls() const = 0;
 };
 
 }  // namespace ash
diff --git a/ash/public/cpp/ambient/fake_ambient_backend_controller_impl.cc b/ash/public/cpp/ambient/fake_ambient_backend_controller_impl.cc
index 8a9a1eb..f54c394 100644
--- a/ash/public/cpp/ambient/fake_ambient_backend_controller_impl.cc
+++ b/ash/public/cpp/ambient/fake_ambient_backend_controller_impl.cc
@@ -4,6 +4,7 @@
 
 #include "ash/public/cpp/ambient/fake_ambient_backend_controller_impl.h"
 
+#include <array>
 #include <utility>
 
 #include "ash/public/cpp/ambient/ambient_backend_controller.h"
@@ -26,6 +27,9 @@
 
 constexpr char kFakeDetails[] = "fake-photo-attribution";
 
+constexpr std::array<const char*, 2> kFakeBackupPhotoUrls = {kFakeUrl,
+                                                             kFakeUrl};
+
 AmbientSettings CreateFakeSettings() {
   AmbientSettings settings;
   settings.topic_source = kTopicSource;
@@ -154,6 +158,11 @@
   std::move(callback).Run(weather_info_);
 }
 
+const std::array<const char*, 2>&
+FakeAmbientBackendControllerImpl::GetBackupPhotoUrls() const {
+  return kFakeBackupPhotoUrls;
+}
+
 void FakeAmbientBackendControllerImpl::ReplyFetchSettingsAndAlbums(
     bool success) {
   if (!pending_fetch_settings_albums_callback_)
diff --git a/ash/public/cpp/ambient/fake_ambient_backend_controller_impl.h b/ash/public/cpp/ambient/fake_ambient_backend_controller_impl.h
index c217a9f..39ffabf9 100644
--- a/ash/public/cpp/ambient/fake_ambient_backend_controller_impl.h
+++ b/ash/public/cpp/ambient/fake_ambient_backend_controller_impl.h
@@ -5,6 +5,8 @@
 #ifndef ASH_PUBLIC_CPP_AMBIENT_FAKE_AMBIENT_BACKEND_CONTROLLER_IMPL_H_
 #define ASH_PUBLIC_CPP_AMBIENT_FAKE_AMBIENT_BACKEND_CONTROLLER_IMPL_H_
 
+#include <array>
+
 #include "ash/public/cpp/ambient/ambient_backend_controller.h"
 #include "ash/public/cpp/ash_public_export.h"
 #include "base/callback.h"
@@ -40,6 +42,7 @@
       OnSettingsAndAlbumsFetchedCallback callback) override;
   void SetPhotoRefreshInterval(base::TimeDelta interval) override;
   void FetchWeather(FetchWeatherCallback callback) override;
+  const std::array<const char*, 2>& GetBackupPhotoUrls() const override;
 
   // Simulate to reply the request of FetchSettingsAndAlbums().
   // If |success| is true, will return fake data.
diff --git a/ash/public/cpp/app_list/app_list_features.cc b/ash/public/cpp/app_list/app_list_features.cc
index acf154b..d7c18c3a 100644
--- a/ash/public/cpp/app_list/app_list_features.cc
+++ b/ash/public/cpp/app_list/app_list_features.cc
@@ -38,7 +38,7 @@
 // change it until fully launched. It is used to redirect Launcher search to
 // Assistant search.
 const base::Feature kEnableAssistantSearch{"EnableEmbeddedAssistantUI",
-                                           base::FEATURE_DISABLED_BY_DEFAULT};
+                                           base::FEATURE_ENABLED_BY_DEFAULT};
 
 const base::Feature kEnableAppGridGhost{"EnableAppGridGhost",
                                         base::FEATURE_DISABLED_BY_DEFAULT};
@@ -60,10 +60,7 @@
     "EnableOmniboxRichEntities", base::FEATURE_DISABLED_BY_DEFAULT};
 
 bool IsAnswerCardEnabled() {
-  // Not using local static variable to allow tests to change this value.
-  // Do not show answer card if Assistant search is enabled.
-  return base::FeatureList::IsEnabled(kEnableAnswerCard) &&
-         !IsAssistantSearchEnabled();
+  return base::FeatureList::IsEnabled(kEnableAnswerCard);
 }
 
 bool IsAppDataSearchEnabled() {
diff --git a/ash/quick_answers/quick_answers_controller_impl.cc b/ash/quick_answers/quick_answers_controller_impl.cc
index cfaefe6..a7d1cd2 100644
--- a/ash/quick_answers/quick_answers_controller_impl.cc
+++ b/ash/quick_answers/quick_answers_controller_impl.cc
@@ -9,7 +9,7 @@
 #include "ash/session/session_controller_impl.h"
 #include "ash/shell.h"
 #include "ash/strings/grit/ash_strings.h"
-#include "chromeos/components/quick_answers/quick_answers_consents.h"
+#include "chromeos/components/quick_answers/quick_answers_notice.h"
 #include "chromeos/constants/chromeos_features.h"
 #include "ui/base/l10n/l10n_util.h"
 #include "url/gurl.h"
@@ -27,7 +27,7 @@
 constexpr char kDogfoodUrl[] =
     "https://goto.google.com/quick-answers-dogfood-bugs";
 
-// TODO:(yanxiao) move the string to grd source file.
+// TODO(yanxiao): move the string to grd source file.
 constexpr char kNoResult[] = "See result in Assistant";
 
 base::string16 IntentTypeToString(IntentType intent_type) {
@@ -64,8 +64,8 @@
 void QuickAnswersControllerImpl::SetClient(
     std::unique_ptr<QuickAnswersClient> client) {
   quick_answers_client_ = std::move(client);
-  consent_controller_ =
-      std::make_unique<chromeos::quick_answers::QuickAnswersConsent>(
+  notice_controller_ =
+      std::make_unique<chromeos::quick_answers::QuickAnswersNotice>(
           Shell::Get()->session_controller()->GetPrimaryUserPrefService());
 }
 
@@ -100,8 +100,8 @@
 
 void QuickAnswersControllerImpl::HandleQuickAnswerRequest(
     const chromeos::quick_answers::QuickAnswersRequest& request) {
-  if (ShouldShowUserConsent()) {
-    ShowUserConsent(
+  if (ShouldShowUserNotice()) {
+    ShowUserNotice(
         IntentTypeToString(request.preprocessed_output.intent_info.intent_type),
         base::UTF8ToUTF16(request.preprocessed_output.intent_info.intent_text));
   } else {
@@ -118,7 +118,7 @@
 
 void QuickAnswersControllerImpl::DismissQuickAnswers(bool is_active) {
   visibility_ = QuickAnswersVisibility::kClosed;
-  MaybeDismissQuickAnswersConsent();
+  MaybeDismissQuickAnswersNotice();
   bool closed = quick_answers_ui_controller_->CloseQuickAnswersView();
   quick_answers_client_->OnQuickAnswersDismissed(
       quick_answer_ ? quick_answer_->result_type : ResultType::kNoResult,
@@ -218,19 +218,20 @@
   visibility_ = QuickAnswersVisibility::kPending;
 }
 
-void QuickAnswersControllerImpl::OnUserConsentGranted() {
-  quick_answers_ui_controller_->CloseUserConsentView();
-  consent_controller_->AcceptConsent(
-      chromeos::quick_answers::ConsentInteractionType::kAccept);
+void QuickAnswersControllerImpl::OnUserNoticeAccepted() {
+  quick_answers_ui_controller_->CloseUserNoticeView();
+  notice_controller_->AcceptNotice(
+      chromeos::quick_answers::NoticeInteractionType::kAccept);
 
-  // Display Quick-Answer for the cached query when user consents.
+  // Display Quick-Answer for the cached query when user dismisses the
+  // notice.
   MaybeShowQuickAnswers(anchor_bounds_, title_, context_);
 }
 
-void QuickAnswersControllerImpl::OnConsentSettingsRequestedByUser() {
-  quick_answers_ui_controller_->CloseUserConsentView();
-  consent_controller_->AcceptConsent(
-      chromeos::quick_answers::ConsentInteractionType::kManageSettings);
+void QuickAnswersControllerImpl::OnNoticeSettingsRequestedByUser() {
+  quick_answers_ui_controller_->CloseUserNoticeView();
+  notice_controller_->AcceptNotice(
+      chromeos::quick_answers::NoticeInteractionType::kManageSettings);
   NewWindowDelegate::GetInstance()->NewTabWithUrl(
       GURL(kAssistantRelatedInfoUrl), /*from_user_interaction=*/true);
 }
@@ -240,24 +241,24 @@
       GURL(kDogfoodUrl), /*from_user_interaction=*/true);
 }
 
-void QuickAnswersControllerImpl::MaybeDismissQuickAnswersConsent() {
-  if (quick_answers_ui_controller_->is_showing_user_consent_view())
-    consent_controller_->DismissConsent();
-  quick_answers_ui_controller_->CloseUserConsentView();
+void QuickAnswersControllerImpl::MaybeDismissQuickAnswersNotice() {
+  if (quick_answers_ui_controller_->is_showing_user_notice_view())
+    notice_controller_->DismissNotice();
+  quick_answers_ui_controller_->CloseUserNoticeView();
 }
 
-bool QuickAnswersControllerImpl::ShouldShowUserConsent() const {
-  return consent_controller_->ShouldShowConsent();
+bool QuickAnswersControllerImpl::ShouldShowUserNotice() const {
+  return notice_controller_->ShouldShowNotice();
 }
 
-void QuickAnswersControllerImpl::ShowUserConsent(
+void QuickAnswersControllerImpl::ShowUserNotice(
     const base::string16& intent_type,
     const base::string16& intent_text) {
-  // Show user-consent notice informing user about the feature if required.
-  if (!quick_answers_ui_controller_->is_showing_user_consent_view()) {
-    quick_answers_ui_controller_->CreateUserConsentView(
+  // Show notice informing user about the feature if required.
+  if (!quick_answers_ui_controller_->is_showing_user_notice_view()) {
+    quick_answers_ui_controller_->CreateUserNoticeView(
         anchor_bounds_, intent_type, intent_text);
-    consent_controller_->StartConsent();
+    notice_controller_->StartNotice();
   }
 }
 
diff --git a/ash/quick_answers/quick_answers_controller_impl.h b/ash/quick_answers/quick_answers_controller_impl.h
index 0dd97770..81f8c058 100644
--- a/ash/quick_answers/quick_answers_controller_impl.h
+++ b/ash/quick_answers/quick_answers_controller_impl.h
@@ -16,7 +16,7 @@
 
 namespace chromeos {
 namespace quick_answers {
-class QuickAnswersConsent;
+class QuickAnswersNotice;
 }  // namespace quick_answers
 }  // namespace chromeos
 
@@ -81,13 +81,13 @@
   // User clicks on the quick answer result.
   void OnQuickAnswerClick();
 
-  // Called by the UI Controller when user grants consent for the Quick Answers
-  // feature.
-  void OnUserConsentGranted();
+  // Called by the UI Controller when user accepts the notice for the
+  // Quick Answers feature.
+  void OnUserNoticeAccepted();
 
-  // Called by the UI Controller when user requests detailed settings regarding
-  // consent for the Quick Answers feature.
-  void OnConsentSettingsRequestedByUser();
+  // Called by the UI Controller when user requests detailed settings from the
+  // notice screen for the Quick Answers feature.
+  void OnNoticeSettingsRequestedByUser();
 
   // Open Quick-Answers dogfood URL.
   void OpenQuickAnswersDogfoodLink();
@@ -98,9 +98,8 @@
 
   QuickAnswersVisibility visibility() const { return visibility_; }
 
-  chromeos::quick_answers::QuickAnswersConsent*
-  GetConsentControllerForTesting() {
-    return consent_controller_.get();
+  chromeos::quick_answers::QuickAnswersNotice* GetNoticeControllerForTesting() {
+    return notice_controller_.get();
   }
 
   void SetVisibilityForTesting(QuickAnswersVisibility visibility) {
@@ -108,15 +107,16 @@
   }
 
  private:
-  void MaybeDismissQuickAnswersConsent();
+  void MaybeDismissQuickAnswersNotice();
 
   void HandleQuickAnswerRequest(
       const chromeos::quick_answers::QuickAnswersRequest& request);
 
-  bool ShouldShowUserConsent() const;
-  // Show the user consent view. Does nothing if the view is already visible.
-  void ShowUserConsent(const base::string16& intent_type,
-                       const base::string16& intent_text);
+  bool ShouldShowUserNotice() const;
+  // Show the user notice view. Does nothing if the view is already
+  // visible.
+  void ShowUserNotice(const base::string16& intent_type,
+                      const base::string16& intent_text);
 
   chromeos::quick_answers::QuickAnswersRequest BuildRequest();
 
@@ -134,8 +134,8 @@
 
   std::unique_ptr<chromeos::quick_answers::QuickAnswersClient>
       quick_answers_client_;
-  std::unique_ptr<chromeos::quick_answers::QuickAnswersConsent>
-      consent_controller_;
+  std::unique_ptr<chromeos::quick_answers::QuickAnswersNotice>
+      notice_controller_;
 
   // Whether the feature is enabled and all eligibility criteria are met (
   // locale, consents, etc).
diff --git a/ash/quick_answers/quick_answers_controller_unittest.cc b/ash/quick_answers/quick_answers_controller_unittest.cc
index 68929cf..2bc5c2a 100644
--- a/ash/quick_answers/quick_answers_controller_unittest.cc
+++ b/ash/quick_answers/quick_answers_controller_unittest.cc
@@ -6,11 +6,11 @@
 
 #include "ash/quick_answers/quick_answers_ui_controller.h"
 #include "ash/quick_answers/ui/quick_answers_view.h"
-#include "ash/quick_answers/ui/user_consent_view.h"
+#include "ash/quick_answers/ui/user_notice_view.h"
 #include "ash/test/ash_test_base.h"
 #include "base/test/scoped_feature_list.h"
 #include "chromeos/components/quick_answers/quick_answers_client.h"
-#include "chromeos/components/quick_answers/quick_answers_consents.h"
+#include "chromeos/components/quick_answers/quick_answers_notice.h"
 #include "chromeos/constants/chromeos_features.h"
 #include "services/network/test/test_url_loader_factory.h"
 
@@ -61,7 +61,7 @@
         QuickAnswersController::Get());
   }
 
-  // Show the quick answer or notification view (depending on the notification
+  // Show the quick answer or notice view (depending on the notice
   // consent status).
   void ShowView(bool set_visibility = true) {
     // To show the quick answers view, its visibility must be set to 'pending'
@@ -72,18 +72,18 @@
                                         kDefaultTitle, {});
   }
 
-  void ShowNotificationView() {
-    // We can only show the notification view if the consent has not been
+  void ShowNoticeView() {
+    // We can only show the notice view if the consent has not been
     // granted, so we add a sanity check here.
-    EXPECT_TRUE(consent_controller()->ShouldShowConsent())
-        << "Can not show notification view as the user consent has already "
+    EXPECT_TRUE(notice_controller()->ShouldShowNotice())
+        << "Can not show notice view as the user consent has already "
            "been given.";
     ShowView();
   }
 
   void ShowQuickAnswersView() {
     // Grant the user consent so the quick answers view is shown.
-    AcceptConsent();
+    AcceptNotice();
     ShowView();
   }
 
@@ -91,14 +91,14 @@
     return ui_controller()->quick_answers_view_for_testing();
   }
 
-  const views::View* GetNotificationView() {
-    return ui_controller()->notification_view_for_testing();
+  const views::View* GetNoticeView() {
+    return ui_controller()->notice_view_for_testing();
   }
 
-  void AcceptConsent() {
-    consent_controller()->StartConsent();
-    consent_controller()->AcceptConsent(
-        chromeos::quick_answers::ConsentInteractionType::kAccept);
+  void AcceptNotice() {
+    notice_controller()->StartNotice();
+    notice_controller()->AcceptNotice(
+        chromeos::quick_answers::NoticeInteractionType::kAccept);
   }
 
   void DismissQuickAnswers() {
@@ -109,8 +109,8 @@
     return controller()->quick_answers_ui_controller();
   }
 
-  chromeos::quick_answers::QuickAnswersConsent* consent_controller() {
-    return controller()->GetConsentControllerForTesting();
+  chromeos::quick_answers::QuickAnswersNotice* notice_controller() {
+    return controller()->GetNoticeControllerForTesting();
   }
 
  private:
@@ -123,7 +123,7 @@
   ShowView();
 
   // The feature is not eligible, nothing should be shown.
-  EXPECT_FALSE(ui_controller()->is_showing_user_consent_view());
+  EXPECT_FALSE(ui_controller()->is_showing_user_notice_view());
   EXPECT_FALSE(ui_controller()->is_showing_quick_answers_view());
 }
 
@@ -132,62 +132,62 @@
   ShowView(/*set_visibility=*/false);
 
   // The UI is closed and session is inactive, nothing should be shown.
-  EXPECT_FALSE(ui_controller()->is_showing_user_consent_view());
+  EXPECT_FALSE(ui_controller()->is_showing_user_notice_view());
   EXPECT_FALSE(ui_controller()->is_showing_quick_answers_view());
   EXPECT_EQ(controller()->visibility(), QuickAnswersVisibility::kClosed);
 }
 
 TEST_F(QuickAnswersControllerTest,
-       ShouldShowPendingQueryAfterUserAcceptsConsent) {
+       ShouldShowPendingQueryAfterUserAcceptsNotice) {
   ShowView();
   // Without user consent, only the user consent view should show.
-  EXPECT_TRUE(ui_controller()->is_showing_user_consent_view());
+  EXPECT_TRUE(ui_controller()->is_showing_user_notice_view());
   EXPECT_FALSE(ui_controller()->is_showing_quick_answers_view());
 
-  controller()->OnUserConsentGranted();
+  controller()->OnUserNoticeAccepted();
 
   // With user consent granted, the consent view should dismiss and the cached
   // quick answer query should show.
-  EXPECT_FALSE(ui_controller()->is_showing_user_consent_view());
+  EXPECT_FALSE(ui_controller()->is_showing_user_notice_view());
   EXPECT_TRUE(ui_controller()->is_showing_quick_answers_view());
   EXPECT_EQ(controller()->visibility(), QuickAnswersVisibility::kVisible);
 }
 
-TEST_F(QuickAnswersControllerTest, UserConsentAlreadyAccepted) {
-  AcceptConsent();
+TEST_F(QuickAnswersControllerTest, UserNoticeAlreadyAccepted) {
+  AcceptNotice();
   ShowView();
 
   // With user consent already accepted, only the quick answers view should
   // show.
-  EXPECT_FALSE(ui_controller()->is_showing_user_consent_view());
+  EXPECT_FALSE(ui_controller()->is_showing_user_notice_view());
   EXPECT_TRUE(ui_controller()->is_showing_quick_answers_view());
   EXPECT_EQ(controller()->visibility(), QuickAnswersVisibility::kVisible);
 }
 
 TEST_F(QuickAnswersControllerTest,
-       ShouldShowQuickAnswersIfUserIgnoresConsentViewThreeTimes) {
+       ShouldShowQuickAnswersIfUserIgnoresNoticeViewThreeTimes) {
   // Show and dismiss user consent window the first 3 times
   for (int i = 0; i < 3; i++) {
     ShowView();
-    EXPECT_TRUE(ui_controller()->is_showing_user_consent_view())
-        << "Consent view not shown the " << (i + 1) << " time";
+    EXPECT_TRUE(ui_controller()->is_showing_user_notice_view())
+        << "Notice view not shown the " << (i + 1) << " time";
     EXPECT_FALSE(ui_controller()->is_showing_quick_answers_view());
     DismissQuickAnswers();
   }
 
   // The 4th time we should simply show the quick answer.
   ShowView();
-  EXPECT_FALSE(ui_controller()->is_showing_user_consent_view());
+  EXPECT_FALSE(ui_controller()->is_showing_user_notice_view());
   EXPECT_TRUE(ui_controller()->is_showing_quick_answers_view());
 }
 
-TEST_F(QuickAnswersControllerTest, DismissUserConsentView) {
-  ShowNotificationView();
-  EXPECT_TRUE(ui_controller()->is_showing_user_consent_view());
+TEST_F(QuickAnswersControllerTest, DismissUserNoticeView) {
+  ShowNoticeView();
+  EXPECT_TRUE(ui_controller()->is_showing_user_notice_view());
 
   DismissQuickAnswers();
 
-  EXPECT_FALSE(ui_controller()->is_showing_user_consent_view());
+  EXPECT_FALSE(ui_controller()->is_showing_user_notice_view());
   EXPECT_EQ(controller()->visibility(), QuickAnswersVisibility::kClosed);
 }
 
@@ -213,15 +213,15 @@
 }
 
 TEST_F(QuickAnswersControllerTest,
-       ShouldUpdateNotificationViewBoundsWhenMenuBoundsChange) {
-  ShowNotificationView();
+       ShouldUpdateNoticeViewBoundsWhenMenuBoundsChange) {
+  ShowNoticeView();
 
   controller()->UpdateQuickAnswersAnchorBounds(BoundsWithXPosition(123));
 
   // We only check the 'x' position as that is guaranteed to be identical
   // between the view and the menu.
-  const views::View* notification_view = GetNotificationView();
-  EXPECT_EQ(123, notification_view->GetBoundsInScreen().x());
+  const views::View* notice_view = GetNoticeView();
+  EXPECT_EQ(123, notice_view->GetBoundsInScreen().x());
 }
 
 }  // namespace ash
diff --git a/ash/quick_answers/quick_answers_ui_controller.cc b/ash/quick_answers/quick_answers_ui_controller.cc
index 32708b3..8dc6d90 100644
--- a/ash/quick_answers/quick_answers_ui_controller.cc
+++ b/ash/quick_answers/quick_answers_ui_controller.cc
@@ -7,7 +7,7 @@
 #include "ash/public/cpp/assistant/controller/assistant_interaction_controller.h"
 #include "ash/quick_answers/quick_answers_controller_impl.h"
 #include "ash/quick_answers/ui/quick_answers_view.h"
-#include "ash/quick_answers/ui/user_consent_view.h"
+#include "ash/quick_answers/ui/user_notice_view.h"
 #include "ash/shell.h"
 #include "ash/strings/grit/ash_strings.h"
 #include "base/bind.h"
@@ -29,7 +29,7 @@
 
 QuickAnswersUiController::~QuickAnswersUiController() {
   quick_answers_view_ = nullptr;
-  user_consent_view_ = nullptr;
+  user_notice_view_ = nullptr;
 }
 
 void QuickAnswersUiController::CreateQuickAnswersView(
@@ -44,7 +44,7 @@
     CloseQuickAnswersView();
   }
 
-  DCHECK(!user_consent_view_);
+  DCHECK(!user_notice_view_);
   SetActiveQuery(query);
   quick_answers_view_ = new QuickAnswersView(bounds, title, this);
   quick_answers_view_->GetWidget()->ShowInactive();
@@ -100,33 +100,31 @@
   if (quick_answers_view_)
     quick_answers_view_->UpdateAnchorViewBounds(anchor_bounds);
 
-  if (user_consent_view_)
-    user_consent_view_->UpdateAnchorViewBounds(anchor_bounds);
+  if (user_notice_view_)
+    user_notice_view_->UpdateAnchorViewBounds(anchor_bounds);
 }
 
-void QuickAnswersUiController::CreateUserConsentView(
+void QuickAnswersUiController::CreateUserNoticeView(
     const gfx::Rect& anchor_bounds,
     const base::string16& intent_type,
     const base::string16& intent_text) {
   DCHECK(!quick_answers_view_);
-  DCHECK(!user_consent_view_);
-  user_consent_view_ = new quick_answers::UserConsentView(
+  DCHECK(!user_notice_view_);
+  user_notice_view_ = new quick_answers::UserNoticeView(
       anchor_bounds, intent_type, intent_text, this);
-  user_consent_view_->GetWidget()->ShowInactive();
+  user_notice_view_->GetWidget()->ShowInactive();
 }
 
-bool QuickAnswersUiController::CloseUserConsentView() {
-  if (user_consent_view_) {
-    user_consent_view_->GetWidget()->Close();
-    user_consent_view_ = nullptr;
-    return true;
+void QuickAnswersUiController::CloseUserNoticeView() {
+  if (user_notice_view_) {
+    user_notice_view_->GetWidget()->Close();
+    user_notice_view_ = nullptr;
   }
-  return false;
 }
 
-void QuickAnswersUiController::OnConsentGrantedButtonPressed() {
-  DCHECK(user_consent_view_);
-  controller_->OnUserConsentGranted();
+void QuickAnswersUiController::OnAcceptButtonPressed() {
+  DCHECK(user_notice_view_);
+  controller_->OnUserNoticeAccepted();
 
   // The Quick-Answer displayed should gain focus if it is created when this
   // button is pressed.
@@ -135,7 +133,7 @@
 }
 
 void QuickAnswersUiController::OnManageSettingsButtonPressed() {
-  controller_->OnConsentSettingsRequestedByUser();
+  controller_->OnNoticeSettingsRequestedByUser();
 }
 
 void QuickAnswersUiController::OnDogfoodButtonPressed() {
diff --git a/ash/quick_answers/quick_answers_ui_controller.h b/ash/quick_answers/quick_answers_ui_controller.h
index 9c9ceac..723c961 100644
--- a/ash/quick_answers/quick_answers_ui_controller.h
+++ b/ash/quick_answers/quick_answers_ui_controller.h
@@ -22,7 +22,7 @@
 class QuickAnswersControllerImpl;
 
 namespace quick_answers {
-class UserConsentView;
+class UserNoticeView;
 }  // namespace quick_answers
 
 // A controller to show/hide and handle interactions for quick
@@ -59,27 +59,24 @@
 
   void UpdateQuickAnswersBounds(const gfx::Rect& anchor_bounds);
 
-  // Creates a view for user-consent for Quick Answers vertically aligned to the
-  // anchor.
-  void CreateUserConsentView(const gfx::Rect& anchor_bounds,
-                             const base::string16& intent_type,
-                             const base::string16& intent_text);
+  // Creates a view for notifying the user about the Quick Answers feature
+  // vertically aligned to the anchor.
+  void CreateUserNoticeView(const gfx::Rect& anchor_bounds,
+                            const base::string16& intent_type,
+                            const base::string16& intent_text);
 
-  // Returns true if there was a UserConsentView to close.
-  bool CloseUserConsentView();
+  void CloseUserNoticeView();
 
-  // Invoked when user clicks the consent button to grant consent for using
-  // Quick Answers.
-  void OnConsentGrantedButtonPressed();
+  // Invoked when user clicks the 'got it' button to dismiss the notice.
+  void OnAcceptButtonPressed();
 
-  // Invoked when user clicks the settings button related to consent for Quick
-  // Answers.
+  // Invoked when user clicks the settings button on the notice view.
   void OnManageSettingsButtonPressed();
 
-  // Used by the controller to check if the user-consent view is currently
+  // Used by the controller to check if the user notice view is currently
   // showing instead of QuickAnswers.
-  bool is_showing_user_consent_view() const {
-    return user_consent_view_ != nullptr;
+  bool is_showing_user_notice_view() const {
+    return user_notice_view_ != nullptr;
   }
 
   // Used by the controller to check if the QuickAnswers view is currently
@@ -94,8 +91,8 @@
   const QuickAnswersView* quick_answers_view_for_testing() const {
     return quick_answers_view_;
   }
-  const quick_answers::UserConsentView* notification_view_for_testing() const {
-    return user_consent_view_;
+  const quick_answers::UserNoticeView* notice_view_for_testing() const {
+    return user_notice_view_;
   }
 
  private:
@@ -103,7 +100,7 @@
 
   // Owned by view hierarchy.
   QuickAnswersView* quick_answers_view_ = nullptr;
-  quick_answers::UserConsentView* user_consent_view_ = nullptr;
+  quick_answers::UserNoticeView* user_notice_view_ = nullptr;
   std::string query_;
 };
 
diff --git a/ash/quick_answers/quick_answers_ui_controller_unittest.cc b/ash/quick_answers/quick_answers_ui_controller_unittest.cc
index 1c6e3ad..5752a0d 100644
--- a/ash/quick_answers/quick_answers_ui_controller_unittest.cc
+++ b/ash/quick_answers/quick_answers_ui_controller_unittest.cc
@@ -56,11 +56,11 @@
   EXPECT_TRUE(ui_controller()->is_showing_quick_answers_view());
 }
 
-TEST_F(QuickAnswersUiControllerTest, TearDownWhileConsentViewShowing) {
-  EXPECT_FALSE(ui_controller()->is_showing_user_consent_view());
-  ui_controller()->CreateUserConsentView(kDefaultAnchorBoundsInScreen,
-                                         base::string16(), base::string16());
-  EXPECT_TRUE(ui_controller()->is_showing_user_consent_view());
+TEST_F(QuickAnswersUiControllerTest, TearDownWhileNoticeViewShowing) {
+  EXPECT_FALSE(ui_controller()->is_showing_user_notice_view());
+  ui_controller()->CreateUserNoticeView(kDefaultAnchorBoundsInScreen,
+                                        base::string16(), base::string16());
+  EXPECT_TRUE(ui_controller()->is_showing_user_notice_view());
 }
 
 }  // namespace ash
diff --git a/ash/quick_answers/ui/quick_answers_pre_target_handler.cc b/ash/quick_answers/ui/quick_answers_pre_target_handler.cc
index 39f0dda..b26e5a5 100644
--- a/ash/quick_answers/ui/quick_answers_pre_target_handler.cc
+++ b/ash/quick_answers/ui/quick_answers_pre_target_handler.cc
@@ -5,7 +5,7 @@
 #include "ash/quick_answers/ui/quick_answers_pre_target_handler.h"
 
 #include "ash/quick_answers/ui/quick_answers_view.h"
-#include "ash/quick_answers/ui/user_consent_view.h"
+#include "ash/quick_answers/ui/user_notice_view.h"
 #include "base/containers/adapters.h"
 #include "ui/aura/env.h"
 #include "ui/views/controls/menu/menu_controller.h"
@@ -24,7 +24,7 @@
 }
 
 QuickAnswersPreTargetHandler::QuickAnswersPreTargetHandler(
-    quick_answers::UserConsentView* view)
+    quick_answers::UserNoticeView* view)
     : view_(view) {
   Init();
 }
diff --git a/ash/quick_answers/ui/quick_answers_pre_target_handler.h b/ash/quick_answers/ui/quick_answers_pre_target_handler.h
index d48f75a..09b54fe 100644
--- a/ash/quick_answers/ui/quick_answers_pre_target_handler.h
+++ b/ash/quick_answers/ui/quick_answers_pre_target_handler.h
@@ -21,7 +21,7 @@
 class QuickAnswersView;
 
 namespace quick_answers {
-class UserConsentView;
+class UserNoticeView;
 }  // namespace quick_answers
 
 // This class handles mouse events, and update background color or
@@ -30,7 +30,7 @@
 class QuickAnswersPreTargetHandler : public ui::EventHandler {
  public:
   explicit QuickAnswersPreTargetHandler(QuickAnswersView* view);
-  explicit QuickAnswersPreTargetHandler(quick_answers::UserConsentView* view);
+  explicit QuickAnswersPreTargetHandler(quick_answers::UserNoticeView* view);
 
   // Disallow copy and assign.
   QuickAnswersPreTargetHandler(const QuickAnswersPreTargetHandler&) = delete;
diff --git a/ash/quick_answers/ui/user_consent_view.cc b/ash/quick_answers/ui/user_notice_view.cc
similarity index 80%
rename from ash/quick_answers/ui/user_consent_view.cc
rename to ash/quick_answers/ui/user_notice_view.cc
index ed059ee..38e36e8 100644
--- a/ash/quick_answers/ui/user_consent_view.cc
+++ b/ash/quick_answers/ui/user_notice_view.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "ash/quick_answers/ui/user_consent_view.h"
+#include "ash/quick_answers/ui/user_notice_view.h"
 
 #include "ash/accessibility/accessibility_controller_impl.h"
 #include "ash/quick_answers/quick_answers_ui_controller.h"
@@ -65,9 +65,9 @@
 constexpr char kA11ySettingsButtonDescText[] =
     "Click to open Google Assistant settings.";
 
-// Grant-Consent button.
-constexpr SkColor kConsentButtonTextColor = gfx::kGoogleGrey200;
-constexpr char kA11yConsentButtonDescText[] =
+// Accept button.
+constexpr SkColor kAcceptButtonTextColor = gfx::kGoogleGrey200;
+constexpr char kA11yAcceptButtonDescText[] =
     "Let Assistant show info such as definition or unit conversion for your "
     "selection.";
 
@@ -125,25 +125,26 @@
 
 }  // namespace
 
-// UserConsentView -------------------------------------------------------------
+// UserNoticeView
+// -------------------------------------------------------------
 
-UserConsentView::UserConsentView(const gfx::Rect& anchor_view_bounds,
-                                 const base::string16& intent_type,
-                                 const base::string16& intent_text,
-                                 QuickAnswersUiController* ui_controller)
+UserNoticeView::UserNoticeView(const gfx::Rect& anchor_view_bounds,
+                               const base::string16& intent_type,
+                               const base::string16& intent_text,
+                               QuickAnswersUiController* ui_controller)
     : anchor_view_bounds_(anchor_view_bounds),
       event_handler_(std::make_unique<QuickAnswersPreTargetHandler>(this)),
       ui_controller_(ui_controller),
       focus_search_(std::make_unique<QuickAnswersFocusSearch>(
           this,
-          base::BindRepeating(&UserConsentView::GetFocusableViews,
+          base::BindRepeating(&UserNoticeView::GetFocusableViews,
                               base::Unretained(this)))) {
   if (intent_type.empty() || intent_text.empty()) {
     title_ = l10n_util::GetStringUTF16(
-        IDS_ASH_QUICK_ANSWERS_USER_CONSENT_VIEW_TITLE_TEXT);
+        IDS_ASH_QUICK_ANSWERS_USER_NOTICE_VIEW_TITLE_TEXT);
   } else {
     title_ = l10n_util::GetStringFUTF16(
-        IDS_ASH_QUICK_ANSWERS_USER_CONSENT_VIEW_TITLE_TEXT_WITH_INTENT,
+        IDS_ASH_QUICK_ANSWERS_USER_NOTICE_VIEW_TITLE_TEXT_WITH_INTENT,
         intent_type, intent_text);
   }
 
@@ -163,19 +164,19 @@
   GetViewAccessibility().AnnounceText(base::UTF8ToUTF16(kA11yInfoAlertText));
 }
 
-UserConsentView::~UserConsentView() = default;
+UserNoticeView::~UserNoticeView() = default;
 
-const char* UserConsentView::GetClassName() const {
-  return "UserConsentView";
+const char* UserNoticeView::GetClassName() const {
+  return "UserNoticeView";
 }
 
-gfx::Size UserConsentView::CalculatePreferredSize() const {
+gfx::Size UserNoticeView::CalculatePreferredSize() const {
   // View should match width of the anchor.
   auto width = anchor_view_bounds_.width();
   return gfx::Size(width, GetHeightForWidth(width));
 }
 
-void UserConsentView::OnFocus() {
+void UserNoticeView::OnFocus() {
   // Unless screen-reader mode is enabled, transfer the focus to an actionable
   // button, otherwise retain to read out its contents.
   if (!ash::Shell::Get()
@@ -185,22 +186,21 @@
     settings_button_->RequestFocus();
 }
 
-views::FocusTraversable* UserConsentView::GetPaneFocusTraversable() {
+views::FocusTraversable* UserNoticeView::GetPaneFocusTraversable() {
   return focus_search_.get();
 }
 
-void UserConsentView::GetAccessibleNodeData(ui::AXNodeData* node_data) {
+void UserNoticeView::GetAccessibleNodeData(ui::AXNodeData* node_data) {
   node_data->role = ax::mojom::Role::kDialog;
   node_data->SetName(title_);
-  auto desc =
-      base::StringPrintf(kA11yInfoDescTemplate,
-                         l10n_util::GetStringUTF8(
-                             IDS_ASH_QUICK_ANSWERS_USER_CONSENT_VIEW_DESC_TEXT)
-                             .c_str());
+  auto desc = base::StringPrintf(
+      kA11yInfoDescTemplate,
+      l10n_util::GetStringUTF8(IDS_ASH_QUICK_ANSWERS_USER_NOTICE_VIEW_DESC_TEXT)
+          .c_str());
   node_data->SetDescription(desc);
 }
 
-std::vector<views::View*> UserConsentView::GetFocusableViews() {
+std::vector<views::View*> UserNoticeView::GetFocusableViews() {
   std::vector<views::View*> focusable_views;
   // The view itself is not included in focus loop, unless screen-reader is on.
   if (ash::Shell::Get()
@@ -210,19 +210,19 @@
     focusable_views.push_back(this);
   }
   focusable_views.push_back(settings_button_);
-  focusable_views.push_back(consent_button_);
+  focusable_views.push_back(accept_button_);
   if (dogfood_button_)
     focusable_views.push_back(dogfood_button_);
   return focusable_views;
 }
 
-void UserConsentView::ButtonPressed(views::Button* sender,
-                                    const ui::Event& event) {
-  if (sender == consent_button_) {
-    // When user-consent is acknowledged, QuickAnswersView will be displayed
-    // instead of dismissing the menu.
+void UserNoticeView::ButtonPressed(views::Button* sender,
+                                   const ui::Event& event) {
+  if (sender == accept_button_) {
+    // When user notice is acknowledged, QuickAnswersView will be
+    // displayed instead of dismissing the menu.
     event_handler_->set_dismiss_anchor_menu_on_view_closed(false);
-    ui_controller_->OnConsentGrantedButtonPressed();
+    ui_controller_->OnAcceptButtonPressed();
     return;
   }
   if (sender == settings_button_) {
@@ -235,13 +235,13 @@
   }
 }
 
-void UserConsentView::UpdateAnchorViewBounds(
+void UserNoticeView::UpdateAnchorViewBounds(
     const gfx::Rect& anchor_view_bounds) {
   anchor_view_bounds_ = anchor_view_bounds;
   UpdateWidgetBounds();
 }
 
-void UserConsentView::InitLayout() {
+void UserNoticeView::InitLayout() {
   SetLayoutManager(std::make_unique<views::FillLayout>());
   SetBackground(views::CreateSolidBackground(kMainViewBgColor));
 
@@ -269,7 +269,7 @@
     AddDogfoodButton();
 }
 
-void UserConsentView::InitContent() {
+void UserNoticeView::InitContent() {
   // Layout.
   content_ = main_view_->AddChildView(std::make_unique<views::View>());
   content_->SetLayoutManager(std::make_unique<views::BoxLayout>(
@@ -283,13 +283,14 @@
   // Description.
   auto* desc = content_->AddChildView(
       CreateLabel(l10n_util::GetStringUTF16(
-                      IDS_ASH_QUICK_ANSWERS_USER_CONSENT_VIEW_DESC_TEXT),
+                      IDS_ASH_QUICK_ANSWERS_USER_NOTICE_VIEW_DESC_TEXT),
                   kDescTextColor, kDescFontSizeDelta));
   desc->SetMultiLine(true);
   // BoxLayout does not necessarily size the height of multi-line labels
   // properly (crbug/682266). The label is thus explicitly sized to the width
-  // (and height) it would need to be for the UserConsentView to be the same
-  // width as the anchor, so its preferred size will be calculated correctly.
+  // (and height) it would need to be for the UserNoticeView to be the
+  // same width as the anchor, so its preferred size will be calculated
+  // correctly.
   int desc_desired_width = anchor_view_bounds_.width() -
                            kMainViewInsets.width() - kContentInsets.width() -
                            kAssistantIconSizeDip;
@@ -299,7 +300,7 @@
   InitButtonBar();
 }
 
-void UserConsentView::InitButtonBar() {
+void UserNoticeView::InitButtonBar() {
   // Layout.
   auto* button_bar = content_->AddChildView(std::make_unique<views::View>());
   auto* layout =
@@ -312,25 +313,24 @@
   auto settings_button = std::make_unique<CustomizedLabelButton>(
       this,
       l10n_util::GetStringUTF16(
-          IDS_ASH_QUICK_ANSWERS_USER_CONSENT_VIEW_MANAGE_SETTINGS_BUTTON),
+          IDS_ASH_QUICK_ANSWERS_USER_NOTICE_VIEW_MANAGE_SETTINGS_BUTTON),
       kSettingsButtonTextColor);
   settings_button->GetViewAccessibility().OverrideDescription(
       kA11ySettingsButtonDescText);
   settings_button_ = button_bar->AddChildView(std::move(settings_button));
 
-  // Grant-Consent button.
-  auto consent_button = std::make_unique<CustomizedLabelButton>(
+  auto accept_button = std::make_unique<CustomizedLabelButton>(
       this,
       l10n_util::GetStringUTF16(
-          IDS_ASH_QUICK_ANSWERS_USER_CONSENT_VIEW_GRANT_CONSENT_BUTTON),
-      kConsentButtonTextColor);
-  consent_button->SetProminent(true);
-  consent_button->GetViewAccessibility().OverrideDescription(
-      kA11yConsentButtonDescText);
-  consent_button_ = button_bar->AddChildView(std::move(consent_button));
+          IDS_ASH_QUICK_ANSWERS_USER_NOTICE_VIEW_ACCEPT_BUTTON),
+      kAcceptButtonTextColor);
+  accept_button->SetProminent(true);
+  accept_button->GetViewAccessibility().OverrideDescription(
+      kA11yAcceptButtonDescText);
+  accept_button_ = button_bar->AddChildView(std::move(accept_button));
 }
 
-void UserConsentView::InitWidget() {
+void UserNoticeView::InitWidget() {
   views::Widget::InitParams params;
   params.activatable = views::Widget::InitParams::Activatable::ACTIVATABLE_NO;
   params.shadow_elevation = 2;
@@ -353,7 +353,7 @@
   UpdateWidgetBounds();
 }
 
-void UserConsentView::AddDogfoodButton() {
+void UserNoticeView::AddDogfoodButton() {
   auto* dogfood_view = AddChildView(std::make_unique<views::View>());
   auto* layout =
       dogfood_view->SetLayoutManager(std::make_unique<views::BoxLayout>(
@@ -371,7 +371,7 @@
   dogfood_button_ = dogfood_view->AddChildView(std::move(dogfood_button));
 }
 
-void UserConsentView::UpdateWidgetBounds() {
+void UserNoticeView::UpdateWidgetBounds() {
   const gfx::Size size = GetPreferredSize();
   int x = anchor_view_bounds_.x();
   int y = anchor_view_bounds_.y() - size.height() - kMarginDip;
diff --git a/ash/quick_answers/ui/user_consent_view.h b/ash/quick_answers/ui/user_notice_view.h
similarity index 73%
rename from ash/quick_answers/ui/user_consent_view.h
rename to ash/quick_answers/ui/user_notice_view.h
index 6717a47..af4af018 100644
--- a/ash/quick_answers/ui/user_consent_view.h
+++ b/ash/quick_answers/ui/user_notice_view.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef ASH_QUICK_ANSWERS_UI_USER_CONSENT_VIEW_H_
-#define ASH_QUICK_ANSWERS_UI_USER_CONSENT_VIEW_H_
+#ifndef ASH_QUICK_ANSWERS_UI_USER_NOTICE_VIEW_H_
+#define ASH_QUICK_ANSWERS_UI_USER_NOTICE_VIEW_H_
 
 #include <memory>
 
@@ -24,22 +24,22 @@
 namespace quick_answers {
 
 // TODO(siabhijeet): Investigate BubbleDialogDelegateView as a common view for
-// UserConsentView and QuickAnswersView.
-// |intent_type| and |intent_text| are used to generate the consent title
+// UserNoticeView and QuickAnswersView.
+// |intent_type| and |intent_text| are used to generate the notice title
 // including predicted intent information. Fallback to title without intent
 // information if any of these two strings are empty.
-class UserConsentView : public views::View, public views::ButtonListener {
+class UserNoticeView : public views::View, public views::ButtonListener {
  public:
-  UserConsentView(const gfx::Rect& anchor_view_bounds,
-                  const base::string16& intent_type,
-                  const base::string16& intent_text,
-                  QuickAnswersUiController* ui_controller);
+  UserNoticeView(const gfx::Rect& anchor_view_bounds,
+                 const base::string16& intent_type,
+                 const base::string16& intent_text,
+                 QuickAnswersUiController* ui_controller);
 
   // Disallow copy and assign.
-  UserConsentView(const UserConsentView&) = delete;
-  UserConsentView& operator=(const UserConsentView&) = delete;
+  UserNoticeView(const UserNoticeView&) = delete;
+  UserNoticeView& operator=(const UserNoticeView&) = delete;
 
-  ~UserConsentView() override;
+  ~UserNoticeView() override;
 
   // views::View:
   const char* GetClassName() const override;
@@ -79,10 +79,10 @@
   views::View* content_ = nullptr;
   views::ImageButton* dogfood_button_ = nullptr;
   views::LabelButton* settings_button_ = nullptr;
-  views::LabelButton* consent_button_ = nullptr;
+  views::LabelButton* accept_button_ = nullptr;
 };
 
 }  // namespace quick_answers
 }  // namespace ash
 
-#endif  // ASH_QUICK_ANSWERS_UI_USER_CONSENT_VIEW_H_
+#endif  // ASH_QUICK_ANSWERS_UI_USER_NOTICE_VIEW_H_
diff --git a/ash/shelf/login_shelf_view.cc b/ash/shelf/login_shelf_view.cc
index 968c09e51..50a0f32a 100644
--- a/ash/shelf/login_shelf_view.cc
+++ b/ash/shelf/login_shelf_view.cc
@@ -26,6 +26,8 @@
 #include "ash/shell.h"
 #include "ash/strings/grit/ash_strings.h"
 #include "ash/style/ash_color_provider.h"
+#include "ash/style/default_color_constants.h"
+#include "ash/style/default_colors.h"
 #include "ash/system/status_area_widget.h"
 #include "ash/system/status_area_widget_delegate.h"
 #include "ash/system/tray/system_tray_notifier.h"
@@ -75,13 +77,15 @@
 const char* kLoginShelfButtonClassName = "LoginShelfButton";
 
 SkColor GetButtonTextColor() {
-  return AshColorProvider::Get()->GetContentLayerColor(
-      AshColorProvider::ContentLayerType::kButtonLabelColor);
+  return DeprecatedGetContentLayerColor(
+      AshColorProvider::ContentLayerType::kButtonLabelColor,
+      kLoginShelfButtonLabelColor);
 }
 
 SkColor GetButtonIconColor() {
-  return AshColorProvider::Get()->GetContentLayerColor(
-      AshColorProvider::ContentLayerType::kButtonIconColor);
+  return DeprecatedGetContentLayerColor(
+      AshColorProvider::ContentLayerType::kButtonIconColor,
+      kLoginShelfButtonIconColor);
 }
 
 SkColor GetButtonBackgroundColor() {
@@ -89,8 +93,7 @@
       session_manager::SessionState::OOBE) {
     return SkColorSetA(SK_ColorBLACK, 16);  // 6% opacity
   }
-  return AshColorProvider::Get()->GetControlsLayerColor(
-      AshColorProvider::ControlsLayerType::kControlBackgroundColorInactive);
+  return DeprecatedGetLoginBackgroundBaseColor(kLoginBackgroundBaseColor);
 }
 
 LoginMetricsRecorder::ShelfButtonClickTarget GetUserClickTarget(int button_id) {
diff --git a/ash/shelf/shelf_background_animator.cc b/ash/shelf/shelf_background_animator.cc
index d67b100..d35af356 100644
--- a/ash/shelf/shelf_background_animator.cc
+++ b/ash/shelf/shelf_background_animator.cc
@@ -15,7 +15,8 @@
 #include "ash/shelf/shelf.h"
 #include "ash/shelf/shelf_background_animator_observer.h"
 #include "ash/shell.h"
-#include "ash/style/ash_color_provider.h"
+#include "ash/style/default_color_constants.h"
+#include "ash/style/default_colors.h"
 #include "ash/wallpaper/wallpaper_controller_impl.h"
 #include "ash/wm/tablet_mode/tablet_mode_controller.h"
 #include "chromeos/constants/chromeos_switches.h"
@@ -242,9 +243,9 @@
       shelf_target_color = SK_ColorTRANSPARENT;
       break;
     case ShelfBackgroundType::kLoginNonBlurredWallpaper:
-      shelf_target_color =
-          SkColorSetA(AshColorProvider::Get()->GetLoginBackgroundBaseColor(),
-                      login_constants::kNonBlurredWallpaperBackgroundAlpha);
+      shelf_target_color = SkColorSetA(
+          DeprecatedGetLoginBackgroundBaseColor(kLoginBackgroundBaseColor),
+          login_constants::kNonBlurredWallpaperBackgroundAlpha);
       break;
   }
   return shelf_target_color;
diff --git a/ash/strings/ash_strings_bs.xtb b/ash/strings/ash_strings_bs.xtb
index 4f668b30..955ddab 100644
--- a/ash/strings/ash_strings_bs.xtb
+++ b/ash/strings/ash_strings_bs.xtb
@@ -27,7 +27,7 @@
 <translation id="121097972571826261">Riječ unaprijed</translation>
 <translation id="1225748608451425081">Vaš Chromebook je zaključan zbog poznatog problema. Moći ćete se ponovo prijaviti nakon: <ph name="TIME_LEFT" />.</translation>
 <translation id="1229194443904279055">Zaustavi odabir</translation>
-<translation id="1239161794459865856">Značajka <ph name="FEATURE_NAME" /> je povezana.</translation>
+<translation id="1239161794459865856">Funkcija <ph name="FEATURE_NAME" /> je povezana.</translation>
 <translation id="1247372569136754018">Mikrofon (interno)</translation>
 <translation id="1252999807265626933">Izvor punjenja: <ph name="POWER_SOURCE" /></translation>
 <translation id="1255033239764210633">Kakvo je vrijeme?</translation>
@@ -75,7 +75,7 @@
 <translation id="1654477262762802994">Započni glasovni upit</translation>
 <translation id="1667964833127753507">Način rada neutralne boje ne koristi boje izdvojene iz pozadinske slike nego ih zamjenjuje skupom neutralnih boja svijetlih ili tamnih nijansi.</translation>
 <translation id="1677472565718498478">Još <ph name="TIME" /></translation>
-<translation id="1677507110654891115">Značajka <ph name="FEATURE_NAME" /> nije povezana.</translation>
+<translation id="1677507110654891115">Funkcija <ph name="FEATURE_NAME" /> nije povezana.</translation>
 <translation id="1698080062160024910">Tajmer od <ph name="TOTAL_TIME" /> · <ph name="LABEL" /></translation>
 <translation id="1698760176351776263">IPv6 adresa: <ph name="ADDRESS" /></translation>
 <translation id="1708345662127501511">Radna površina: <ph name="DESK_NAME" /></translation>
@@ -326,7 +326,7 @@
 <translation id="4181841719683918333">Jezici</translation>
 <translation id="4195877955194704651">Automatski klikovi na dugme</translation>
 <translation id="4197790712631116042">Isključeno</translation>
-<translation id="4201033867194214117">Značajka <ph name="FEATURE_NAME" /> nije dostupna.</translation>
+<translation id="4201033867194214117">Funkcija <ph name="FEATURE_NAME" /> nije dostupna.</translation>
 <translation id="4212246570487010370">Nastavite pregledati</translation>
 <translation id="4212472694152630271">Prebaci na PIN</translation>
 <translation id="4215497585250573029">Postavke za VPN</translation>
@@ -338,7 +338,7 @@
 <translation id="4285498937028063278">Otkači</translation>
 <translation id="4294319844246081198">Dobro jutro <ph name="GIVEN_NAME" />,</translation>
 <translation id="4296136865091727875">Brisanje svih obavijesti (<ph name="COUNT" />)</translation>
-<translation id="4302592941791324970">Nedostupno</translation>
+<translation id="4302592941791324970">Nije dostupno</translation>
 <translation id="4303223480529385476">Proširi područje statusa</translation>
 <translation id="4321179778687042513">ctrl</translation>
 <translation id="4321776623976362024">Pritisnuli ste prečicu na tastaturi za visoki kontrast. Želite li ga uključiti?</translation>
@@ -432,7 +432,7 @@
 <translation id="5302048478445481009">Jezik</translation>
 <translation id="5313326810920013265">Bluetooth postavke</translation>
 <translation id="5314219114274263156">Snimak ekrana je napravljen</translation>
-<translation id="5329548388331921293">Povezivanje...</translation>
+<translation id="5329548388331921293">Povezivanje…</translation>
 <translation id="5331975486040154427">USB-C uređaj (lijevi priključak na zadnjem dijelu)</translation>
 <translation id="5352250171825660495">Tamna tema je uključena</translation>
 <translation id="5379115545237091094">Previše pokušaja</translation>
@@ -446,7 +446,7 @@
 <translation id="5465662442746197494">Trebate pomoć?</translation>
 <translation id="5496819745535887422">Vaš administrator vraća uređaj na prethodnu verziju sustava. Svi će se podaci izbrisati kada se uređaj ponovo pokrene.</translation>
 <translation id="5519195206574732858">LTE</translation>
-<translation id="5523434445161341166">Značajka <ph name="FEATURE_NAME" /> se povezuje.</translation>
+<translation id="5523434445161341166">Povezivanje funkcije <ph name="FEATURE_NAME" />.</translation>
 <translation id="553675580533261935">Izlazak iz sesije</translation>
 <translation id="5537725057119320332">Emitiraj</translation>
 <translation id="5548285847212963613">Ekstenzija "<ph name="EXTENSION_NAME" />" može pomoći prilikom povezivanja na ovu mrežu.</translation>
diff --git a/ash/strings/ash_strings_de.xtb b/ash/strings/ash_strings_de.xtb
index 2d67f32..dfdb05c 100644
--- a/ash/strings/ash_strings_de.xtb
+++ b/ash/strings/ash_strings_de.xtb
@@ -300,6 +300,7 @@
 <translation id="3943857333388298514">Einfügen</translation>
 <translation id="394485226368336402">Audioeinstellungen</translation>
 <translation id="3962859241508114581">Vorheriger Titel</translation>
+<translation id="3969043077941541451">Aus</translation>
 <translation id="397105322502079400">Wird berechnet...</translation>
 <translation id="3977512764614765090">Der Akkustand ist <ph name="PERCENTAGE" /> %. Der Akku wird aufgeladen.</translation>
 <translation id="3995138139523574647">USB-C-Gerät (Port hinten rechts)</translation>
@@ -310,6 +311,7 @@
 <translation id="4032485810211612751"><ph name="HOURS" />:<ph name="MINUTES" />:<ph name="SECONDS" /></translation>
 <translation id="4042660782729322247">Sie geben Ihren Bildschirm frei</translation>
 <translation id="4065525899979931964">{NUM_APPS,plural, =1{Aus für 1 App}other{Aus für # Apps}}</translation>
+<translation id="4066027111132117168">An, <ph name="REMAINING_TIME" /></translation>
 <translation id="4072264167173457037">Durchschnittliches Signal</translation>
 <translation id="4112140312785995938">Zurück springen</translation>
 <translation id="4114315158543974537">Phone Hub aktivieren</translation>
@@ -564,6 +566,7 @@
 <translation id="6803622936009808957">Der Bildschirm konnte nicht gespiegelt werden, da die Auflösung nicht unterstützt wird. Stattdessen wurde der Modus für den erweiterten Desktop gestartet.</translation>
 <translation id="6818242057446442178">Zurück um ein Wort</translation>
 <translation id="6820676911989879663">Zeit für eine Pause.</translation>
+<translation id="6857725247182211756"><ph name="SECONDS" /> Sek.</translation>
 <translation id="6857811139397017780"><ph name="NETWORKSERVICE" /> aktivieren</translation>
 <translation id="685782768769951078">{NUM_DIGITS,plural, =1{Noch eine Ziffer}other{Noch # Ziffern}}</translation>
 <translation id="6878400149835617132">Tastenkombination deaktiviert</translation>
@@ -632,6 +635,7 @@
 <translation id="7600875258240007829">Alle Benachrichtigungen ansehen</translation>
 <translation id="7618774594543487847">Neutral</translation>
 <translation id="7624117708979618027"><ph name="TEMPERATURE_F" /> °F</translation>
+<translation id="7633755430369750696">Nearby Share-Einstellungen anzeigen.</translation>
 <translation id="7642647758716480637">Einstellungen für <ph name="NETWORK_NAME" /> öffnen (<ph name="CONNECTION_STATUS" />)</translation>
 <translation id="7645176681409127223"><ph name="USER_NAME" /> (Eigentümer)</translation>
 <translation id="7647488630410863958">Gerät entsperren, um Benachrichtigungen zu sehen</translation>
@@ -647,6 +651,7 @@
 <translation id="7780159184141939021">Bildschirm drehen</translation>
 <translation id="7796353162336583443">Tippen Sie auf die Eingabestift-Schaltfläche in der Ablage, um Notizen oder Screenshots zu erstellen, Google Assistant zu aktivieren oder den Laserpointer oder die Lupe zu verwenden.</translation>
 <translation id="7798302898096527229">Drücken Sie die Such-Taste oder Umschalttaste, um die Aktivierung aufzuheben.</translation>
+<translation id="781126011916719498">Greifen Sie schnell auf Ihre wichtigen Dateien zu. Pinnen Sie eine Datei entweder mit einem Rechtsklick an oder berühren und halten Sie sie.</translation>
 <translation id="7814236020522506259"><ph name="HOUR" /> und <ph name="MINUTE" /></translation>
 <translation id="7829386189513694949">Starkes Signal</translation>
 <translation id="7837740436429729974">Die Zeit ist um</translation>
@@ -790,6 +795,7 @@
 <translation id="9089416786594320554">Eingabemethoden</translation>
 <translation id="9091626656156419976">Bildschirm <ph name="DISPLAY_NAME" /> wurde entfernt</translation>
 <translation id="9151726767154816831">Zum Aktualisieren Neustart und Powerwash durchführen</translation>
+<translation id="9166331175924255663">Ein-/Aus-Schaltfläche für hohe Sichtbarkeit bei Nearby Share.</translation>
 <translation id="9168436347345867845">Später</translation>
 <translation id="9179259655489829027">Dank dieser Funktion können Sie schnell auf alle angemeldeten Nutzerkonten zugreifen, ohne ein Passwort eingeben zu müssen. Verwenden Sie diese Funktion nur bei Konten, denen Sie vertrauen.</translation>
 <translation id="9183456764293710005">Vollbildlupe</translation>
diff --git a/ash/strings/ash_strings_es-419.xtb b/ash/strings/ash_strings_es-419.xtb
index 16f10a2..b73ee706e 100644
--- a/ash/strings/ash_strings_es-419.xtb
+++ b/ash/strings/ash_strings_es-419.xtb
@@ -27,6 +27,7 @@
 <translation id="121097972571826261">Avanzar palabra por palabra</translation>
 <translation id="1225748608451425081">Tu Chromebook está bloqueada debido a un problema conocido. Tiempo restante para volver a acceder: <ph name="TIME_LEFT" />.</translation>
 <translation id="1229194443904279055">Dejar de seleccionar</translation>
+<translation id="1239161794459865856">Se conectó <ph name="FEATURE_NAME" />.</translation>
 <translation id="1247372569136754018">Micrófono (interno)</translation>
 <translation id="1252999807265626933">Cargando desde <ph name="POWER_SOURCE" /></translation>
 <translation id="1255033239764210633">¿Cómo está el clima?</translation>
@@ -74,6 +75,7 @@
 <translation id="1654477262762802994">Iniciar una búsqueda por voz</translation>
 <translation id="1667964833127753507">El modo de color neutral no usa los colores extraídos del fondo de pantalla; los reemplaza por un conjunto de tonos neutros oscuros o claros.</translation>
 <translation id="1677472565718498478">Tiempo restante <ph name="TIME" /></translation>
+<translation id="1677507110654891115">No se conectó <ph name="FEATURE_NAME" />.</translation>
 <translation id="1698080062160024910">Temporizador: <ph name="TOTAL_TIME" /> · <ph name="LABEL" /></translation>
 <translation id="1698760176351776263">Dirección IPv6: <ph name="ADDRESS" /></translation>
 <translation id="1708345662127501511">Escritorio: <ph name="DESK_NAME" /></translation>
@@ -145,6 +147,7 @@
 <translation id="2369165858548251131">"Hola" en chino</translation>
 <translation id="2390318262976603432">Configuración regional</translation>
 <translation id="2391579633712104609">180°</translation>
+<translation id="2405664212338326887">No conectado</translation>
 <translation id="2408955596600435184">Ingresa tu PIN</translation>
 <translation id="2412593942846481727">Actualización disponible</translation>
 <translation id="2413728805700750528"><ph name="DISPLAY_NAME" /> es una sesión administrada por <ph name="DOMAIN" /></translation>
@@ -243,6 +246,7 @@
 <translation id="3364721542077212959">Herramientas de la pluma stylus</translation>
 <translation id="3368922792935385530">Conectado</translation>
 <translation id="3371140690572404006">Dispositivo USB-C (puerto lateral derecho delantero)</translation>
+<translation id="3375634426936648815">Conectado</translation>
 <translation id="3386978599540877378">la lupa de pantalla completa</translation>
 <translation id="3400357268283240774">Configuración adicional</translation>
 <translation id="3410336247007142655">Mostrar la configuración del Tema oscuro</translation>
@@ -301,6 +305,7 @@
 <translation id="3943857333388298514">Pegar</translation>
 <translation id="394485226368336402">Configuración de audio</translation>
 <translation id="3962859241508114581">Pista anterior</translation>
+<translation id="3969043077941541451">No</translation>
 <translation id="397105322502079400">Calculando...</translation>
 <translation id="3977512764614765090">Nivel de la batería: <ph name="PERCENTAGE" />% y cargando</translation>
 <translation id="3995138139523574647">Dispositivo USB-C (puerto lateral derecho trasero)</translation>
@@ -311,6 +316,7 @@
 <translation id="4032485810211612751"><ph name="HOURS" />:<ph name="MINUTES" />:<ph name="SECONDS" /></translation>
 <translation id="4042660782729322247">Estás compartiendo tu pantalla</translation>
 <translation id="4065525899979931964">{NUM_APPS,plural, =1{No para 1 app}other{No para # apps}}</translation>
+<translation id="4066027111132117168">Sí (<ph name="REMAINING_TIME" />)</translation>
 <translation id="4072264167173457037">Señal media</translation>
 <translation id="4112140312785995938">Buscar más atrás</translation>
 <translation id="4114315158543974537">Activa Phone Hub</translation>
@@ -321,6 +327,7 @@
 <translation id="4181841719683918333">Idiomas</translation>
 <translation id="4195877955194704651">Botón de clic automáticos</translation>
 <translation id="4197790712631116042">No</translation>
+<translation id="4201033867194214117"><ph name="FEATURE_NAME" /> no está disponible.</translation>
 <translation id="4212246570487010370">Seguir explorando</translation>
 <translation id="4212472694152630271">Cambiar a PIN</translation>
 <translation id="4215497585250573029">Configuración de la VPN</translation>
@@ -332,6 +339,7 @@
 <translation id="4285498937028063278">No fijar</translation>
 <translation id="4294319844246081198">Buenos días, <ph name="GIVEN_NAME" />:</translation>
 <translation id="4296136865091727875">Borrar las <ph name="COUNT" /> notificaciones</translation>
+<translation id="4302592941791324970">No disponible</translation>
 <translation id="4303223480529385476">Expandir el área de estado</translation>
 <translation id="4321179778687042513">ctrl</translation>
 <translation id="4321776623976362024">Presionaste la combinación de teclas para activar el modo de contraste alto. ¿Quieres activarlo?</translation>
@@ -425,6 +433,7 @@
 <translation id="5302048478445481009">Idioma</translation>
 <translation id="5313326810920013265">Configuración de Bluetooth</translation>
 <translation id="5314219114274263156">Se registró una grabación de pantalla</translation>
+<translation id="5329548388331921293">Conectando…</translation>
 <translation id="5331975486040154427">Dispositivo USB-C (puerto lateral izquierdo trasero)</translation>
 <translation id="5352250171825660495">El Tema oscuro está activado</translation>
 <translation id="5379115545237091094">Realizaste demasiados intentos</translation>
@@ -438,6 +447,7 @@
 <translation id="5465662442746197494">¿Necesitas ayuda?</translation>
 <translation id="5496819745535887422">El administrador está restableciendo tu dispositivo. Cuando se reinicie, se borrarán todos los datos.</translation>
 <translation id="5519195206574732858">LTE</translation>
+<translation id="5523434445161341166">Se está conectando <ph name="FEATURE_NAME" />.</translation>
 <translation id="553675580533261935">Salir de la sesión</translation>
 <translation id="5537725057119320332">Transmitir</translation>
 <translation id="5548285847212963613">La extensión "<ph name="EXTENSION_NAME" />" puede ayudarte a conectarte a la red.</translation>
@@ -565,6 +575,7 @@
 <translation id="6803622936009808957">No se pudieron reflejar las pantallas porque no se encontraron resoluciones compatibles. En su lugar, se activó el escritorio extendido.</translation>
 <translation id="6818242057446442178">Volver palabra por palabra</translation>
 <translation id="6820676911989879663">Toma un descanso</translation>
+<translation id="6857725247182211756"><ph name="SECONDS" /> s</translation>
 <translation id="6857811139397017780">Activar <ph name="NETWORKSERVICE" /></translation>
 <translation id="685782768769951078">{NUM_DIGITS,plural, =1{Queda un dígito}other{Quedan # dígitos}}</translation>
 <translation id="6878400149835617132">Se desactivó la combinación de teclas</translation>
@@ -633,6 +644,7 @@
 <translation id="7600875258240007829">Ver todas las notificaciones</translation>
 <translation id="7618774594543487847">Neutro</translation>
 <translation id="7624117708979618027"><ph name="TEMPERATURE_F" /> °F</translation>
+<translation id="7633755430369750696">Mostrar la configuración de Compartir con Nearby</translation>
 <translation id="7642647758716480637">Abrir la configuración para <ph name="NETWORK_NAME" />, <ph name="CONNECTION_STATUS" /></translation>
 <translation id="7645176681409127223"><ph name="USER_NAME" /> (propietario/a)</translation>
 <translation id="7647488630410863958">Desbloquea el dispositivo para ver tus notificaciones</translation>
@@ -648,6 +660,7 @@
 <translation id="7780159184141939021">Girar pantalla</translation>
 <translation id="7796353162336583443">Presiona el botón de la pluma stylus en la biblioteca para tomar notas o capturas de pantalla, usar el Asistente de Google y activar las funciones de puntero láser o lupa.</translation>
 <translation id="7798302898096527229">Presiona mayúscula o la tecla de búsqueda para cancelarlo.</translation>
+<translation id="781126011916719498">Accede a tus archivos importantes de forma rápida. Haz clic con el botón derecho sobre un archivo o manténlo presionado para fijarlo.</translation>
 <translation id="7814236020522506259"><ph name="HOUR" /> y <ph name="MINUTE" /></translation>
 <translation id="7829386189513694949">Señal fuerte</translation>
 <translation id="7837740436429729974">Tiempo agotado</translation>
@@ -791,6 +804,7 @@
 <translation id="9089416786594320554">Métodos de entrada</translation>
 <translation id="9091626656156419976">Se quitó la pantalla <ph name="DISPLAY_NAME" /></translation>
 <translation id="9151726767154816831">Reiniciar y aplicar Powerwash para actualizar</translation>
+<translation id="9166331175924255663">Activa o desactiva la alta visibilidad para Compartir con Nearby.</translation>
 <translation id="9168436347345867845">Hacerlo más tarde</translation>
 <translation id="9179259655489829027">Esta función te permite alternar de forma rápida entre los usuarios que hayan accedido a su cuenta, sin necesidad de escribir la contraseña. Usa esta función solo con cuentas de confianza.</translation>
 <translation id="9183456764293710005">Lupa de pantalla completa</translation>
diff --git a/ash/strings/ash_strings_es.xtb b/ash/strings/ash_strings_es.xtb
index 67591f4..7cca07b 100644
--- a/ash/strings/ash_strings_es.xtb
+++ b/ash/strings/ash_strings_es.xtb
@@ -27,6 +27,7 @@
 <translation id="121097972571826261">Avanzar por palabra</translation>
 <translation id="1225748608451425081">Se ha bloqueado tu Chromebook debido a un problema conocido. Podrás volver a iniciar sesión dentro de <ph name="TIME_LEFT" />.</translation>
 <translation id="1229194443904279055">Dejar de seleccionar</translation>
+<translation id="1239161794459865856"><ph name="FEATURE_NAME" /> se ha conectado.</translation>
 <translation id="1247372569136754018">Micrófono (interno)</translation>
 <translation id="1252999807265626933">Cargando a través de <ph name="POWER_SOURCE" /></translation>
 <translation id="1255033239764210633">¿Qué tiempo hace?</translation>
@@ -74,6 +75,7 @@
 <translation id="1654477262762802994">Iniciar una consulta por voz</translation>
 <translation id="1667964833127753507">El modo de color neutro no usa los colores extraídos de un fondo de pantalla, sino que los sustituye por un conjunto de colores claros u oscuros con un tono neutro.</translation>
 <translation id="1677472565718498478">Queda: <ph name="TIME" /></translation>
+<translation id="1677507110654891115"><ph name="FEATURE_NAME" /> no se ha conectado.</translation>
 <translation id="1698080062160024910">Temporizador de <ph name="TOTAL_TIME" /> · <ph name="LABEL" /></translation>
 <translation id="1698760176351776263">Dirección IPv6: <ph name="ADDRESS" /></translation>
 <translation id="1708345662127501511">Escritorio: <ph name="DESK_NAME" /></translation>
@@ -145,6 +147,7 @@
 <translation id="2369165858548251131">"Hola" en chino</translation>
 <translation id="2390318262976603432">Configuración regional</translation>
 <translation id="2391579633712104609">180°</translation>
+<translation id="2405664212338326887">No conectado</translation>
 <translation id="2408955596600435184">Introduce tu PIN</translation>
 <translation id="2412593942846481727">Actualización disponible</translation>
 <translation id="2413728805700750528"><ph name="DISPLAY_NAME" /> es una sesión administrada por <ph name="DOMAIN" /></translation>
@@ -243,6 +246,7 @@
 <translation id="3364721542077212959">Herramientas del lápiz óptico</translation>
 <translation id="3368922792935385530">Conectado</translation>
 <translation id="3371140690572404006">Dispositivo USB tipo C (puerto frontal derecho)</translation>
+<translation id="3375634426936648815">Conectado</translation>
 <translation id="3386978599540877378">la lupa de pantalla completa</translation>
 <translation id="3400357268283240774">Configuración adicional</translation>
 <translation id="3410336247007142655">Mostrar ajustes de Tema oscuro</translation>
@@ -323,6 +327,7 @@
 <translation id="4181841719683918333">Idiomas</translation>
 <translation id="4195877955194704651">Botón de clics automáticos</translation>
 <translation id="4197790712631116042">Desactivado</translation>
+<translation id="4201033867194214117"><ph name="FEATURE_NAME" /> no está disponible.</translation>
 <translation id="4212246570487010370">Continuar navegando</translation>
 <translation id="4212472694152630271">Cambiar a PIN</translation>
 <translation id="4215497585250573029">Ajustes de VPN</translation>
@@ -334,6 +339,7 @@
 <translation id="4285498937028063278">No fijar</translation>
 <translation id="4294319844246081198">Buenos días, <ph name="GIVEN_NAME" /></translation>
 <translation id="4296136865091727875">Borrar las <ph name="COUNT" /> notificaciones</translation>
+<translation id="4302592941791324970">No disponible</translation>
 <translation id="4303223480529385476">Ampliar área de estado</translation>
 <translation id="4321179778687042513">ctrl</translation>
 <translation id="4321776623976362024">Has pulsado la combinación de teclas que activa el contraste alto. ¿Quieres activarlo?</translation>
@@ -427,6 +433,7 @@
 <translation id="5302048478445481009">Idioma</translation>
 <translation id="5313326810920013265">Configuración de Bluetooth</translation>
 <translation id="5314219114274263156">Grabación de pantalla realizada</translation>
+<translation id="5329548388331921293">Conectando…</translation>
 <translation id="5331975486040154427">Dispositivo USB tipo C (puerto trasero izquierdo)</translation>
 <translation id="5352250171825660495">Tema oscuro está activado</translation>
 <translation id="5379115545237091094">Demasiados intentos</translation>
@@ -440,6 +447,7 @@
 <translation id="5465662442746197494">¿Necesitas ayuda?</translation>
 <translation id="5496819745535887422">El administrador va a instalar una versión anterior en tu dispositivo. Se eliminarán todos los datos cuando se reinicie.</translation>
 <translation id="5519195206574732858">LTE</translation>
+<translation id="5523434445161341166"><ph name="FEATURE_NAME" /> se está conectando.</translation>
 <translation id="553675580533261935">Saliendo de la sesión</translation>
 <translation id="5537725057119320332">Enviar</translation>
 <translation id="5548285847212963613">La extensión "<ph name="EXTENSION_NAME" />" puede permitir conectarse a esta red.</translation>
diff --git a/ash/strings/ash_strings_fr.xtb b/ash/strings/ash_strings_fr.xtb
index c6ec6b0..6dba22c 100644
--- a/ash/strings/ash_strings_fr.xtb
+++ b/ash/strings/ash_strings_fr.xtb
@@ -300,6 +300,7 @@
 <translation id="3943857333388298514">Coller</translation>
 <translation id="394485226368336402">Paramètres audio</translation>
 <translation id="3962859241508114581">Titre précédent</translation>
+<translation id="3969043077941541451">Désactivé</translation>
 <translation id="397105322502079400">Calcul en cours…</translation>
 <translation id="3977512764614765090">La batterie est en charge, avec un niveau de <ph name="PERCENTAGE" /> % pour l'instant.</translation>
 <translation id="3995138139523574647">Appareil USB de type C (port situé sur la droite de l'appareil, à l'arrière)</translation>
@@ -310,6 +311,7 @@
 <translation id="4032485810211612751"><ph name="HOURS" />:<ph name="MINUTES" />:<ph name="SECONDS" /></translation>
 <translation id="4042660782729322247">Vous partagez votre écran</translation>
 <translation id="4065525899979931964">{NUM_APPS,plural, =1{Notif. désactivées pour une appli}one{Notif. désactivées pour # appli}other{Notif. désactivées pour # applis}}</translation>
+<translation id="4066027111132117168">Activé, <ph name="REMAINING_TIME" /></translation>
 <translation id="4072264167173457037">Signal de moyenne intensité</translation>
 <translation id="4112140312785995938">Retour rapide</translation>
 <translation id="4114315158543974537">Activer Phone Hub</translation>
@@ -564,6 +566,7 @@
 <translation id="6803622936009808957">Impossible de dupliquer les écrans, car aucune résolution compatible n'a été détectée. Le bureau étendu a été activé à la place.</translation>
 <translation id="6818242057446442178">Reculer par mot</translation>
 <translation id="6820676911989879663">Faites une pause !</translation>
+<translation id="6857725247182211756"><ph name="SECONDS" /> s</translation>
 <translation id="6857811139397017780">Activer <ph name="NETWORKSERVICE" /></translation>
 <translation id="685782768769951078">{NUM_DIGITS,plural, =1{1 chiffre manquant}one{# chiffre manquant}other{# chiffres manquants}}</translation>
 <translation id="6878400149835617132">Raccourci désactivé</translation>
@@ -632,6 +635,7 @@
 <translation id="7600875258240007829">Afficher toutes les notifications</translation>
 <translation id="7618774594543487847">Neutre</translation>
 <translation id="7624117708979618027"><ph name="TEMPERATURE_F" /> °F</translation>
+<translation id="7633755430369750696">Afficher les paramètres de partage à proximité.</translation>
 <translation id="7642647758716480637">Ouvrir les paramètres du réseau <ph name="NETWORK_NAME" /> <ph name="CONNECTION_STATUS" /></translation>
 <translation id="7645176681409127223"><ph name="USER_NAME" /> (propriétaire)</translation>
 <translation id="7647488630410863958">Déverrouiller l'appareil pour consulter vos notifications</translation>
@@ -647,6 +651,7 @@
 <translation id="7780159184141939021">Rotation d'écran</translation>
 <translation id="7796353162336583443">Appuyez sur le bouton du stylet situé sur l'étagère pour prendre des notes, effectuer des captures d'écran et utiliser l'Assistant Google, le pointeur laser ou la loupe.</translation>
 <translation id="7798302898096527229">Appuyez sur Rechercher ou Maj pour annuler.</translation>
+<translation id="781126011916719498">Accédez rapidement à vos fichiers importants. Effectuez un clic droit sur le fichier souhaité ou appuyez dessus de manière prolongée pour l'épingler.</translation>
 <translation id="7814236020522506259"><ph name="HOUR" /> et <ph name="MINUTE" /></translation>
 <translation id="7829386189513694949">Signal de forte intensité</translation>
 <translation id="7837740436429729974">Temps écoulé</translation>
@@ -790,6 +795,7 @@
 <translation id="9089416786594320554">Modes de saisie</translation>
 <translation id="9091626656156419976">Suppression de l'écran <ph name="DISPLAY_NAME" /></translation>
 <translation id="9151726767154816831">Redémarrer, puis lancer la réinitialisation Powerwash pour mettre à jour le système</translation>
+<translation id="9166331175924255663">Activez/Désactivez le mode haute visibilité du Partage à proximité.</translation>
 <translation id="9168436347345867845">Plus tard</translation>
 <translation id="9179259655489829027">Cette fonctionnalité vous permet d'accéder rapidement à tout compte connecté sans avoir à indiquer le mot de passe. N'utilisez cette fonctionnalité que pour les comptes auxquels vous pouvez faire confiance.</translation>
 <translation id="9183456764293710005">Loupe plein écran</translation>
diff --git a/ash/strings/ash_strings_hi.xtb b/ash/strings/ash_strings_hi.xtb
index d9d4358..77e191d 100644
--- a/ash/strings/ash_strings_hi.xtb
+++ b/ash/strings/ash_strings_hi.xtb
@@ -27,6 +27,7 @@
 <translation id="121097972571826261">एक शब्द आगे जाएं</translation>
 <translation id="1225748608451425081">आपका Chromebook, एक जानी-पहचानी समस्या की वजह से लॉक है. आप इतने समय बाद साइन इन कर पाएंगे: <ph name="TIME_LEFT" />.</translation>
 <translation id="1229194443904279055">टेक्स्ट चुनना बंद करें</translation>
+<translation id="1239161794459865856"><ph name="FEATURE_NAME" /> कनेक्ट हो गया है.</translation>
 <translation id="1247372569136754018">माइक्रोफ़ोन (आंतरिक)</translation>
 <translation id="1252999807265626933"><ph name="POWER_SOURCE" /> से चार्ज हो रहा है</translation>
 <translation id="1255033239764210633">मौसम कैसा है?</translation>
@@ -74,6 +75,7 @@
 <translation id="1654477262762802994">बोलकर खोजना शुरू करें</translation>
 <translation id="1667964833127753507">न्यूट्रल कलर मोड, वॉलपेपर में काम में लिए गए रंगों का इस्तेमाल नहीं करता है. इनकी जगह न्यूट्रल टोन के हल्के या गहरे रंगों के सेट का इस्तेमाल करता है.</translation>
 <translation id="1677472565718498478"><ph name="TIME" /> बाकी</translation>
+<translation id="1677507110654891115"><ph name="FEATURE_NAME" /> कनेक्ट नहीं किया गया.</translation>
 <translation id="1698080062160024910"><ph name="TOTAL_TIME" /> टाइमर · <ph name="LABEL" /></translation>
 <translation id="1698760176351776263">IPv6 पता: <ph name="ADDRESS" /></translation>
 <translation id="1708345662127501511">डेस्क: <ph name="DESK_NAME" /></translation>
@@ -145,6 +147,7 @@
 <translation id="2369165858548251131">चाइनीज़ भाषा में "नमस्ते" कैसे बोलते हैं</translation>
 <translation id="2390318262976603432">स्थान-भाषा की सेटिंग</translation>
 <translation id="2391579633712104609">180°</translation>
+<translation id="2405664212338326887">कनेक्ट नहीं किया गया</translation>
 <translation id="2408955596600435184">अपना पिन डालें</translation>
 <translation id="2412593942846481727">अपडेट मौजूद है</translation>
 <translation id="2413728805700750528"><ph name="DISPLAY_NAME" /> ऐसा प्रबंधित सत्र है जिसका प्रबंधन <ph name="DOMAIN" /> करते हैं</translation>
@@ -243,6 +246,7 @@
 <translation id="3364721542077212959">स्टाइलस टूल</translation>
 <translation id="3368922792935385530">कनेक्ट है</translation>
 <translation id="3371140690572404006">USB-C डिवाइस (दायां सामने वाला पोर्ट)</translation>
+<translation id="3375634426936648815">कनेक्ट किया गया है</translation>
 <translation id="3386978599540877378">सामग्री को बड़ा दिखाने की फ़ुल-स्क्रीन की सुविधा</translation>
 <translation id="3400357268283240774">अतिरिक्त सेटिंग</translation>
 <translation id="3410336247007142655">गहरे रंग वाली थीम की सेटिंग दिखाएं</translation>
@@ -323,6 +327,7 @@
 <translation id="4181841719683918333">भाषाएं</translation>
 <translation id="4195877955194704651">अपने-आप क्लिक बटन</translation>
 <translation id="4197790712631116042">बंद है</translation>
+<translation id="4201033867194214117"><ph name="FEATURE_NAME" /> उपलब्ध नहीं है.</translation>
 <translation id="4212246570487010370">लगातार ब्राउज़िंग</translation>
 <translation id="4212472694152630271">पिन पर स्विच करें</translation>
 <translation id="4215497585250573029">वीपीएन की सेटिंग</translation>
@@ -334,6 +339,7 @@
 <translation id="4285498937028063278">टैब बड़ी करें</translation>
 <translation id="4294319844246081198">गुड मॉर्निंग <ph name="GIVEN_NAME" />,</translation>
 <translation id="4296136865091727875">सभी <ph name="COUNT" /> सूचनाएं हटाएं</translation>
+<translation id="4302592941791324970">उपलब्ध नहीं है</translation>
 <translation id="4303223480529385476">स्टेटस बताने वाली जगह को बड़ा करें</translation>
 <translation id="4321179778687042513">ctrl</translation>
 <translation id="4321776623976362024">आपने 'हाई कंट्रास्ट' का कीबोर्ड शॉर्टकट दबाया है. क्या आप इसे चालू करना चाहते हैं?</translation>
@@ -427,6 +433,7 @@
 <translation id="5302048478445481009">भाषा</translation>
 <translation id="5313326810920013265">ब्लूटूथ सेटिंग</translation>
 <translation id="5314219114274263156">स्क्रीन की रिकॉर्डिंग की गई</translation>
+<translation id="5329548388331921293">कनेक्ट हो रहा है...</translation>
 <translation id="5331975486040154427">USB-C डिवाइस (बायां पिछला पोर्ट)</translation>
 <translation id="5352250171825660495">गहरे रंग वाली थीम चालू है</translation>
 <translation id="5379115545237091094">कई बार कोशिश की जा चुकी है</translation>
@@ -440,6 +447,7 @@
 <translation id="5465662442746197494">सहायता चाहिए?</translation>
 <translation id="5496819745535887422">आपका एडमिन आपके डिवाइस को बहाल कर रहा है. डिवाइस रीस्टार्ट होने पर उसका सारा डेटा मिटा दिया जाएगा.</translation>
 <translation id="5519195206574732858">LTE</translation>
+<translation id="5523434445161341166"><ph name="FEATURE_NAME" /> कनेक्ट हो रहा है.</translation>
 <translation id="553675580533261935">सत्र से बाहर निकलें</translation>
 <translation id="5537725057119320332">कास्‍ट करें</translation>
 <translation id="5548285847212963613">"<ph name="EXTENSION_NAME" />" एक्‍सटेंशन इस नेटवर्क से कनेक्‍ट करने में सहायता कर सकता है.</translation>
diff --git a/ash/strings/ash_strings_hu.xtb b/ash/strings/ash_strings_hu.xtb
index e5987ad..aeb1abed 100644
--- a/ash/strings/ash_strings_hu.xtb
+++ b/ash/strings/ash_strings_hu.xtb
@@ -27,6 +27,7 @@
 <translation id="121097972571826261">Előrelépés szavanként</translation>
 <translation id="1225748608451425081">Chromebookját ismert probléma miatt zároltuk. Ennyi idő után jelentkezhet be újra: <ph name="TIME_LEFT" />.</translation>
 <translation id="1229194443904279055">Kijelölés leállítása</translation>
+<translation id="1239161794459865856">A(z) <ph name="FEATURE_NAME" /> csatlakozik.</translation>
 <translation id="1247372569136754018">Mikrofon (belső)</translation>
 <translation id="1252999807265626933">Töltési forrás: <ph name="POWER_SOURCE" /></translation>
 <translation id="1255033239764210633">Milyen idő van?</translation>
@@ -74,6 +75,7 @@
 <translation id="1654477262762802994">Hangalapú lekérdezés indítása</translation>
 <translation id="1667964833127753507">A semleges színmód nem használja a háttérkép alapján megállapított színeket, hanem semleges világos vagy sötét színárnyalatra cseréli őket.</translation>
 <translation id="1677472565718498478"><ph name="TIME" /> van hátra</translation>
+<translation id="1677507110654891115">A(z) <ph name="FEATURE_NAME" /> nem csatlakozik.</translation>
 <translation id="1698080062160024910">Időzítő a következő időtartamra: <ph name="TOTAL_TIME" />   <ph name="LABEL" /></translation>
 <translation id="1698760176351776263">IPv6-cím: <ph name="ADDRESS" /></translation>
 <translation id="1708345662127501511">Asztal: <ph name="DESK_NAME" /></translation>
@@ -145,6 +147,7 @@
 <translation id="2369165858548251131">„Helló” kínai nyelven</translation>
 <translation id="2390318262976603432">Nyelv- és országkód beállításai</translation>
 <translation id="2391579633712104609">180°</translation>
+<translation id="2405664212338326887">Nincs kapcsolat</translation>
 <translation id="2408955596600435184">PIN-kód megadása</translation>
 <translation id="2412593942846481727">Rendelkezésre áll frissítés</translation>
 <translation id="2413728805700750528"><ph name="DISPLAY_NAME" /> – <ph name="DOMAIN" /> által felügyelt munkamenet</translation>
@@ -243,6 +246,7 @@
 <translation id="3364721542077212959">Érintőceruza eszközök</translation>
 <translation id="3368922792935385530">Kapcsolódva</translation>
 <translation id="3371140690572404006">C típusú USB-vel kompatibilis eszköz (jobb első port)</translation>
+<translation id="3375634426936648815">Csatlakozva</translation>
 <translation id="3386978599540877378">teljes képernyős nagyító</translation>
 <translation id="3400357268283240774">További beállítások</translation>
 <translation id="3410336247007142655">Sötét téma beállításainak megjelenítése</translation>
@@ -323,6 +327,7 @@
 <translation id="4181841719683918333">Nyelvek</translation>
 <translation id="4195877955194704651">Automatikus kattintás az adott gombon</translation>
 <translation id="4197790712631116042">Ki</translation>
+<translation id="4201033867194214117">A(z) <ph name="FEATURE_NAME" /> nem áll rendelkezésre.</translation>
 <translation id="4212246570487010370">Böngészés folytatása</translation>
 <translation id="4212472694152630271">Váltás PIN-kódra</translation>
 <translation id="4215497585250573029">VPN-beállítások</translation>
@@ -334,6 +339,7 @@
 <translation id="4285498937028063278">Rögzítés megszüntetése</translation>
 <translation id="4294319844246081198">Jó reggelt, <ph name="GIVEN_NAME" />!</translation>
 <translation id="4296136865091727875">Az összes (<ph name="COUNT" />) értesítés törlése</translation>
+<translation id="4302592941791324970">Nem áll rendelkezésre</translation>
 <translation id="4303223480529385476">Állapotsor kibontása</translation>
 <translation id="4321179778687042513">ctrl</translation>
 <translation id="4321776623976362024">Lenyomta a nagy kontraszt billentyűparancsát. Bekapcsolja a funkciót?</translation>
@@ -427,6 +433,7 @@
 <translation id="5302048478445481009">Nyelv</translation>
 <translation id="5313326810920013265">Bluetooth-beállítások</translation>
 <translation id="5314219114274263156">Képernyőfelvétel elkészítve</translation>
+<translation id="5329548388331921293">Kapcsolódás…</translation>
 <translation id="5331975486040154427">C típusú USB-vel kompatibilis eszköz (bal hátsó port)</translation>
 <translation id="5352250171825660495">Sötét téma bekapcsolva.</translation>
 <translation id="5379115545237091094">Túl sok próbálkozás</translation>
@@ -440,6 +447,7 @@
 <translation id="5465662442746197494">Segítségre van szüksége?</translation>
 <translation id="5496819745535887422">Adminisztrátora eszközét jelenleg visszaállítja. Az eszköz újraindításakor minden adat törlődik.</translation>
 <translation id="5519195206574732858">LTE</translation>
+<translation id="5523434445161341166">A(z) <ph name="FEATURE_NAME" /> csatlakozik.</translation>
 <translation id="553675580533261935">Kilépés a munkamenetből</translation>
 <translation id="5537725057119320332">Küldés</translation>
 <translation id="5548285847212963613">A(z) „<ph name="EXTENSION_NAME" />” bővítmény segíthet a hálózathoz való csatlakozásban.</translation>
diff --git a/ash/strings/ash_strings_it.xtb b/ash/strings/ash_strings_it.xtb
index bcaa0d5..01fe727 100644
--- a/ash/strings/ash_strings_it.xtb
+++ b/ash/strings/ash_strings_it.xtb
@@ -27,6 +27,7 @@
 <translation id="121097972571826261">Avanti per parola</translation>
 <translation id="1225748608451425081">Il Chromebook è bloccato a causa di un problema noto. Potrai accedere dopo: <ph name="TIME_LEFT" />.</translation>
 <translation id="1229194443904279055">Interrompi la selezione</translation>
+<translation id="1239161794459865856">La funzionalità <ph name="FEATURE_NAME" /> è connessa.</translation>
 <translation id="1247372569136754018">Microfono (interno)</translation>
 <translation id="1252999807265626933">In carica da: <ph name="POWER_SOURCE" /></translation>
 <translation id="1255033239764210633">Che tempo fa?</translation>
@@ -74,6 +75,7 @@
 <translation id="1654477262762802994">Avvia una query vocale</translation>
 <translation id="1667964833127753507">La modalità colore Neutra non usa i colori estratti dallo sfondo, che sostituisce con un insieme di tonalità neutre chiare o scure.</translation>
 <translation id="1677472565718498478"><ph name="TIME" /> rimanenti</translation>
+<translation id="1677507110654891115">La funzionalità <ph name="FEATURE_NAME" /> non è connessa.</translation>
 <translation id="1698080062160024910">Timer: <ph name="TOTAL_TIME" /> · <ph name="LABEL" /></translation>
 <translation id="1698760176351776263">Indirizzo IPv6: <ph name="ADDRESS" /></translation>
 <translation id="1708345662127501511">Scrivania: <ph name="DESK_NAME" /></translation>
@@ -145,6 +147,7 @@
 <translation id="2369165858548251131">"Ciao" in cinese</translation>
 <translation id="2390318262976603432">Impostazioni internazionali</translation>
 <translation id="2391579633712104609">180°</translation>
+<translation id="2405664212338326887">Non connessa</translation>
 <translation id="2408955596600435184">Inserisci il codice PIN</translation>
 <translation id="2412593942846481727">Aggiornamento disponibile</translation>
 <translation id="2413728805700750528"><ph name="DISPLAY_NAME" /> è una sessione gestita da <ph name="DOMAIN" /></translation>
@@ -243,6 +246,7 @@
 <translation id="3364721542077212959">Strumenti per stilo</translation>
 <translation id="3368922792935385530">Connesso</translation>
 <translation id="3371140690572404006">Dispositivo USB-C (porta anteriore destra)</translation>
+<translation id="3375634426936648815">Connessa</translation>
 <translation id="3386978599540877378">la lente d'ingrandimento a schermo intero</translation>
 <translation id="3400357268283240774">Impostazioni aggiuntive</translation>
 <translation id="3410336247007142655">Mostra le impostazioni del tema scuro</translation>
@@ -323,6 +327,7 @@
 <translation id="4181841719683918333">Lingue</translation>
 <translation id="4195877955194704651">Pulsante Clic automatici</translation>
 <translation id="4197790712631116042">Off</translation>
+<translation id="4201033867194214117"><ph name="FEATURE_NAME" /> non è disponibile.</translation>
 <translation id="4212246570487010370">Continua la navigazione</translation>
 <translation id="4212472694152630271">Passa al PIN</translation>
 <translation id="4215497585250573029">Impostazioni VPN</translation>
@@ -334,6 +339,7 @@
 <translation id="4285498937028063278">Sblocca</translation>
 <translation id="4294319844246081198">Buongiorno <ph name="GIVEN_NAME" />,</translation>
 <translation id="4296136865091727875">Cancella tutte e <ph name="COUNT" /> le notifiche</translation>
+<translation id="4302592941791324970">Non disponibile</translation>
 <translation id="4303223480529385476">Espandi area di stato</translation>
 <translation id="4321179778687042513">ctrl</translation>
 <translation id="4321776623976362024">Hai premuto la scorciatoia da tastiera per l'alto contrasto. Vuoi attivarlo?</translation>
@@ -427,6 +433,7 @@
 <translation id="5302048478445481009">Lingua</translation>
 <translation id="5313326810920013265">Impostazioni Bluetooth</translation>
 <translation id="5314219114274263156">Registrazione dello schermo acquisita</translation>
+<translation id="5329548388331921293">Connessione…</translation>
 <translation id="5331975486040154427">Dispositivo USB-C (porta posteriore sinistra)</translation>
 <translation id="5352250171825660495">Tema scuro attivo</translation>
 <translation id="5379115545237091094">Troppi tentativi</translation>
@@ -440,6 +447,7 @@
 <translation id="5465662442746197494">Hai bisogno di assistenza?</translation>
 <translation id="5496819745535887422">L'amministratore sta eseguendo il rollback del tuo dispositivo. Tutti i dati verranno eliminati al momento del riavvio.</translation>
 <translation id="5519195206574732858">LTE</translation>
+<translation id="5523434445161341166"><ph name="FEATURE_NAME" /> sta cercando di connettersi.</translation>
 <translation id="553675580533261935">Uscita dalla sessione</translation>
 <translation id="5537725057119320332">Trasmetti</translation>
 <translation id="5548285847212963613">L'estensione "<ph name="EXTENSION_NAME" />" può essere utile per il collegamento a questa rete.</translation>
diff --git a/ash/strings/ash_strings_ml.xtb b/ash/strings/ash_strings_ml.xtb
index f437221d..2d76d22 100644
--- a/ash/strings/ash_strings_ml.xtb
+++ b/ash/strings/ash_strings_ml.xtb
@@ -27,6 +27,7 @@
 <translation id="121097972571826261">ഒരു വാക്ക് മുന്നിലേക്ക് പോവുക</translation>
 <translation id="1225748608451425081">അറിയപ്പെടുന്ന ഒരു പ്രശ്‌നം കാരണം നിങ്ങളുടെ Chromebook ലോക്ക് ചെയ്‌തിരിക്കുന്നു. ഇനിപ്പറയുന്ന സമയത്തിന് ശേഷം നിങ്ങൾക്ക് സൈൻ ഇൻ ചെയ്യാനാകും: <ph name="TIME_LEFT" />.</translation>
 <translation id="1229194443904279055">തിരഞ്ഞെടുക്കുന്നത് നിർത്തുക</translation>
+<translation id="1239161794459865856"><ph name="FEATURE_NAME" /> കണക്‌റ്റ് ചെയ്‌തു.</translation>
 <translation id="1247372569136754018">മൈക്രോഫോൺ (ഇന്റേണൽ)</translation>
 <translation id="1252999807265626933"><ph name="POWER_SOURCE" /> എന്നതിൽ നിന്നും ചാർജ് ചെയ്യുന്നു</translation>
 <translation id="1255033239764210633">കാലാവസ്ഥ എങ്ങനെയുണ്ട്?</translation>
@@ -74,6 +75,7 @@
 <translation id="1654477262762802994">ഒരു ശബ്‌ദ ചോദ്യം ആരംഭിക്കുക</translation>
 <translation id="1667964833127753507">ന്യൂട്രൽ വർണ്ണ മോഡ് വാൾപേപ്പർ എക്‌സ്‌ട്രാക്റ്റ് ചെയ്‌ത വർണ്ണങ്ങൾ ഉപയോഗിക്കുന്നില്ല, അവയ്ക്ക് പകരം ന്യൂട്രലായി ടോൺ ചെയ്‌‌ത ഇളം നിറത്തിന്റെയോ ഇരുണ്ട നിറത്തിന്റെയോ ഒരു സെറ്റ് ഉപയോഗിക്കുന്നു.</translation>
 <translation id="1677472565718498478"><ph name="TIME" /> ശേഷിക്കുന്നു</translation>
+<translation id="1677507110654891115"><ph name="FEATURE_NAME" /> കണക്‌റ്റ് ചെയ്‌തിട്ടില്ല.</translation>
 <translation id="1698080062160024910"><ph name="TOTAL_TIME" /> ടൈമർ · <ph name="LABEL" /></translation>
 <translation id="1698760176351776263">IPv6 വിലാസം: <ph name="ADDRESS" /></translation>
 <translation id="1708345662127501511">ഡെസ്‌ക്: <ph name="DESK_NAME" /></translation>
@@ -145,6 +147,7 @@
 <translation id="2369165858548251131">"ഹലോ" എന്നത് ചൈനീസിൽ</translation>
 <translation id="2390318262976603432">ഭാഷാ ക്രമീകരണം</translation>
 <translation id="2391579633712104609">180°</translation>
+<translation id="2405664212338326887">കണ‌ക്റ്റ് ചെയ്‌തിട്ടില്ല</translation>
 <translation id="2408955596600435184">നിങ്ങളുടെ പിൻ നൽകുക</translation>
 <translation id="2412593942846481727">അപ്‌ഡേറ്റ് ലഭ്യമാണ്</translation>
 <translation id="2413728805700750528"><ph name="DOMAIN" /> എന്നതിനാൽ നിയന്ത്രിക്കപ്പെടുന്ന, മാനേജ് ചെയ്യപ്പെടുന്ന സെഷനാണ് <ph name="DISPLAY_NAME" /></translation>
@@ -243,6 +246,7 @@
 <translation id="3364721542077212959">സ്റ്റൈലസ് ടൂളുകൾ</translation>
 <translation id="3368922792935385530">കണക്റ്റുചെയ്തു</translation>
 <translation id="3371140690572404006">USB-C ഉപകരണം (വലതുവശത്ത് മുന്നിലെ പോർട്ട്)</translation>
+<translation id="3375634426936648815">കണക്റ്റ് ചെയ്‌തു</translation>
 <translation id="3386978599540877378">പൂര്‍‌ണ്ണ-സ്‌ക്രീൻ മാഗ്‌നിഫയർ</translation>
 <translation id="3400357268283240774">അധിക ക്രമീകരണങ്ങൾ</translation>
 <translation id="3410336247007142655">ഡാർക്ക് തീം ക്രമീകരണം കാണിക്കുക</translation>
@@ -322,6 +326,7 @@
 <translation id="4181841719683918333">ഭാഷകൾ‌</translation>
 <translation id="4195877955194704651">സ്വയമേവയുള്ള ക്ലിക്ക് ബട്ടൺ</translation>
 <translation id="4197790712631116042">ഓഫാണ്</translation>
+<translation id="4201033867194214117"><ph name="FEATURE_NAME" /> ലഭ്യമല്ല.</translation>
 <translation id="4212246570487010370">ബ്രൗസിംഗ് തുടരുക</translation>
 <translation id="4212472694152630271">പിൻ നമ്പറിലേക്ക് മാറുക</translation>
 <translation id="4215497585250573029">VPN ക്രമീകരണം</translation>
@@ -333,6 +338,7 @@
 <translation id="4285498937028063278">പിൻചെയ്യൽ മാറ്റുക</translation>
 <translation id="4294319844246081198">ഗുഡ്മോണിംഗ് <ph name="GIVEN_NAME" />,</translation>
 <translation id="4296136865091727875">എല്ലാ <ph name="COUNT" /> അറിയിപ്പുകളും മായ്ക്കുക</translation>
+<translation id="4302592941791324970">ലഭ്യമല്ല</translation>
 <translation id="4303223480529385476">സ്റ്റാറ്റസ് ഏരിയ വികസിപ്പിക്കുക</translation>
 <translation id="4321179778687042513">ctrl</translation>
 <translation id="4321776623976362024">നിങ്ങൾ ഉയർന്ന ദൃശ്യതീവ്രതയ്‌ക്കുള്ള കീബോഡ് കുറുക്കുവഴി അമർത്തി. അത് ഓണാക്കണോ?</translation>
@@ -426,6 +432,7 @@
 <translation id="5302048478445481009">ഭാഷ</translation>
 <translation id="5313326810920013265">Bluetooth ക്രമീകരണങ്ങൾ</translation>
 <translation id="5314219114274263156">സ്ക്രീൻ റെക്കോർഡിംഗ് എടുത്തു</translation>
+<translation id="5329548388331921293">കണക്‌റ്റ് ചെയ്യുന്നു...</translation>
 <translation id="5331975486040154427">USB-C ഉപകരണം (പുറകിൽ ഇടതുവശത്തെ പോർട്ട്)</translation>
 <translation id="5352250171825660495">ഡാർക്ക് തീം ഓണാണ്</translation>
 <translation id="5379115545237091094">നിരവധി ശ്രമങ്ങൾ</translation>
@@ -439,6 +446,7 @@
 <translation id="5465662442746197494">സഹായം ആവശ്യമാണോ?</translation>
 <translation id="5496819745535887422">നിങ്ങളുടെ അഡ്‌മിൻ ഉപകരണം മുമ്പത്തെ അവസ്ഥയിലേക്ക് പുനഃസ്ഥാപിക്കുകയാണ്. ഉപകരണം പുനഃരാരംഭിക്കുമ്പോൾ എല്ലാ ഡാറ്റയും ഇല്ലാതാക്കപ്പെടും.</translation>
 <translation id="5519195206574732858">LTE</translation>
+<translation id="5523434445161341166"><ph name="FEATURE_NAME" /> കണക്റ്റ് ചെയ്യുന്നു.</translation>
 <translation id="553675580533261935">സെഷനിൽ നിന്ന് പുറത്തുകടക്കുന്നു</translation>
 <translation id="5537725057119320332">കാസ്റ്റ്</translation>
 <translation id="5548285847212963613">ഈ നെറ്റ്‌വർക്കിലേക്ക് കണക്റ്റ് ചെയ്യാൻ "<ph name="EXTENSION_NAME" />" വിപുലീകരണത്തിന് സഹായിക്കാനാകും.</translation>
diff --git a/ash/strings/ash_strings_mr.xtb b/ash/strings/ash_strings_mr.xtb
index af296a0..e4913b5 100644
--- a/ash/strings/ash_strings_mr.xtb
+++ b/ash/strings/ash_strings_mr.xtb
@@ -300,6 +300,7 @@
 <translation id="3943857333388298514">पेस्ट करा</translation>
 <translation id="394485226368336402">ऑडिओ सेटिंग्ज</translation>
 <translation id="3962859241508114581">मागील ट्रॅक</translation>
+<translation id="3969043077941541451">बंद आहे</translation>
 <translation id="397105322502079400">गणना करत आहे...</translation>
 <translation id="3977512764614765090">बॅटरी <ph name="PERCENTAGE" />% वर आहे आणि चार्ज होत आहे.</translation>
 <translation id="3995138139523574647">USB-C डिव्‍हाइस (उजव्या बाजूचे मागील पोर्ट)</translation>
@@ -310,6 +311,7 @@
 <translation id="4032485810211612751"><ph name="HOURS" />:<ph name="MINUTES" />:<ph name="SECONDS" /></translation>
 <translation id="4042660782729322247">तुम्ही तुमची स्क्रीन शेअर करत आहात</translation>
 <translation id="4065525899979931964">{NUM_APPS,plural, =1{एका ॲपसाठी बंद}other{# ॲप्ससाठी बंद}}</translation>
+<translation id="4066027111132117168">सुरू आहे, <ph name="REMAINING_TIME" /></translation>
 <translation id="4072264167173457037">मध्यम सिग्नल</translation>
 <translation id="4112140312785995938">मागे शोधा</translation>
 <translation id="4114315158543974537">फोन हब सुरू करा</translation>
@@ -564,6 +566,7 @@
 <translation id="6803622936009808957">समर्थित रिजोल्यूशन न आढळल्यामुळे प्रदर्शने मिरर करू शकली नाहीत. त्याऐवजी विस्तारित डेस्कटॉप एंटर केला.</translation>
 <translation id="6818242057446442178">एक शब्द मागे जा</translation>
 <translation id="6820676911989879663">ब्रेक घ्या!</translation>
+<translation id="6857725247182211756"><ph name="SECONDS" /> सेकंद</translation>
 <translation id="6857811139397017780">सक्रिय करा<ph name="NETWORKSERVICE" /></translation>
 <translation id="685782768769951078">{NUM_DIGITS,plural, =1{एक अंक शिल्लक आहे}other{# अंक शिल्लक आहेत}}</translation>
 <translation id="6878400149835617132">शॉर्टकट बंद केला आहे</translation>
@@ -632,6 +635,7 @@
 <translation id="7600875258240007829">सर्व सूचना पहा</translation>
 <translation id="7618774594543487847">न्यूट्रल</translation>
 <translation id="7624117708979618027"><ph name="TEMPERATURE_F" />° फॅ</translation>
+<translation id="7633755430369750696">Nearby सह शेअरिंग सेटिंग्ज दाखवा.</translation>
 <translation id="7642647758716480637"><ph name="NETWORK_NAME" />, <ph name="CONNECTION_STATUS" /> साठी सेटिंग्ज उघडा</translation>
 <translation id="7645176681409127223"><ph name="USER_NAME" /> (मालक)</translation>
 <translation id="7647488630410863958">आपल्या सूचना पाहण्यासाठी डिव्हाइस अनलॉक करा</translation>
@@ -647,6 +651,7 @@
 <translation id="7780159184141939021">स्क्रीन फिरवा</translation>
 <translation id="7796353162336583443">नोंद करून घेण्यासाठी, स्क्रीनशॉट घेण्यासाठी, Google असिस्टंट, लेझर पॉइंटर किंवा भिंग वापरण्यासाठी शेल्फवरील स्टायलस बटणावर टॅप करा.</translation>
 <translation id="7798302898096527229">रद्द करण्यासाठी Search किंवा Shift दाबा.</translation>
+<translation id="781126011916719498">तुमच्या महत्त्वाच्या फाइल झटपट अ‍ॅक्सेस करा. फाइल पिन करण्यासाठी त्यावर राइट क्लिक करा किंवा स्पर्श करा आणि धरून ठेवा.</translation>
 <translation id="7814236020522506259"><ph name="HOUR" /> आणि <ph name="MINUTE" /></translation>
 <translation id="7829386189513694949">मजबूत सिग्नल</translation>
 <translation id="7837740436429729974">वेळ संपली</translation>
@@ -790,6 +795,7 @@
 <translation id="9089416786594320554">इनपुट पद्धती</translation>
 <translation id="9091626656156419976"><ph name="DISPLAY_NAME" /> डिस्प्ले काढले</translation>
 <translation id="9151726767154816831">अपडेटासाठी रीस्टार्ट करा आणि powerwash करा</translation>
+<translation id="9166331175924255663">Nearby सह शेअरिंग चा उच्च दृश्यमानता मोड टॉगल करा.</translation>
 <translation id="9168436347345867845">ते नंतर करा</translation>
 <translation id="9179259655489829027">हे वैशिष्ट्य तुम्हाला पासवर्ड शिवाय कोणत्याही साइन-इन केलेल्या वापरकर्त्यास जलदपणे ॲक्सेस करण्याची परवानगी  देते. तुमचा विश्वास असलेल्या खात्यांसाठीच फक्त या वैशिष्ट्याचा वापर करा.</translation>
 <translation id="9183456764293710005">फुल-स्क्रीन मॅग्निफायर</translation>
diff --git a/ash/strings/ash_strings_nl.xtb b/ash/strings/ash_strings_nl.xtb
index 39cb790..02d943a 100644
--- a/ash/strings/ash_strings_nl.xtb
+++ b/ash/strings/ash_strings_nl.xtb
@@ -304,6 +304,7 @@
 <translation id="3943857333388298514">Plak</translation>
 <translation id="394485226368336402">Audio-instellingen</translation>
 <translation id="3962859241508114581">Vorig nummer</translation>
+<translation id="3969043077941541451">Uit</translation>
 <translation id="397105322502079400">Berekenen...</translation>
 <translation id="3977512764614765090">Batterij op <ph name="PERCENTAGE" />% en wordt opgeladen.</translation>
 <translation id="3995138139523574647">USB-C-apparaat (poort rechts aan de achterkant)</translation>
@@ -314,6 +315,7 @@
 <translation id="4032485810211612751"><ph name="HOURS" />:<ph name="MINUTES" />:<ph name="SECONDS" /></translation>
 <translation id="4042660782729322247">Je deelt je scherm</translation>
 <translation id="4065525899979931964">{NUM_APPS,plural, =1{Uit voor een app}other{Uit voor # apps}}</translation>
+<translation id="4066027111132117168">Aan, <ph name="REMAINING_TIME" /></translation>
 <translation id="4072264167173457037">Normaal signaal</translation>
 <translation id="4112140312785995938">Achteruit zoeken</translation>
 <translation id="4114315158543974537">Phone Hub inschakelen</translation>
@@ -572,6 +574,7 @@
 <translation id="6803622936009808957">Kan schermen niet spiegelen, omdat er geen ondersteunde resoluties zijn gevonden. Het uitgebreide bureaublad is geactiveerd.</translation>
 <translation id="6818242057446442178">Terug per woord</translation>
 <translation id="6820676911989879663">Neem een pauze</translation>
+<translation id="6857725247182211756"><ph name="SECONDS" /> s</translation>
 <translation id="6857811139397017780"><ph name="NETWORKSERVICE" /> activeren</translation>
 <translation id="685782768769951078">{NUM_DIGITS,plural, =1{Nog 1 cijfer nodig}other{Nog # cijfers nodig}}</translation>
 <translation id="6878400149835617132">Snelkoppeling uitgeschakeld</translation>
@@ -640,6 +643,7 @@
 <translation id="7600875258240007829">Alle meldingen bekijken</translation>
 <translation id="7618774594543487847">Neutraal</translation>
 <translation id="7624117708979618027"><ph name="TEMPERATURE_F" />° F</translation>
+<translation id="7633755430369750696">Instellingen voor 'Dichtbij delen' weergeven.</translation>
 <translation id="7642647758716480637">Instellingen openen voor <ph name="NETWORK_NAME" />, <ph name="CONNECTION_STATUS" /></translation>
 <translation id="7645176681409127223"><ph name="USER_NAME" /> (eigenaar)</translation>
 <translation id="7647488630410863958">Ontgrendel het apparaat om je meldingen weer te geven</translation>
@@ -655,6 +659,7 @@
 <translation id="7780159184141939021">Scherm draaien</translation>
 <translation id="7796353162336583443">Tik op de stylusknop op de plank om een notitie of screenshot te maken of de Google Assistent, de laserpen of het vergrootglas te gebruiken.</translation>
 <translation id="7798302898096527229">Druk op Zoeken of Shift om te annuleren.</translation>
+<translation id="781126011916719498">Krijg snel toegang tot je belangrijkste bestanden. Klik met de rechtermuisknop op een bestand of tik op een bestand en houd dit vast om het bestand vast te zetten.</translation>
 <translation id="7814236020522506259"><ph name="HOUR" /> en <ph name="MINUTE" /></translation>
 <translation id="7829386189513694949">Sterk signaal</translation>
 <translation id="7837740436429729974">De tijd is om</translation>
@@ -798,6 +803,7 @@
 <translation id="9089416786594320554">Invoermethoden</translation>
 <translation id="9091626656156419976">Scherm <ph name="DISPLAY_NAME" /> is verwijderd</translation>
 <translation id="9151726767154816831">Opnieuw opstarten en de functie Powerwash gebruiken om bij te werken</translation>
+<translation id="9166331175924255663">Hoge zichtbaarheid voor 'Dichtbij delen' in-/uitschakelen.</translation>
 <translation id="9168436347345867845">Later doen</translation>
 <translation id="9179259655489829027">Met deze functie kun je snel zonder wachtwoord toegang krijgen tot iedere ingelogde gebruiker. Gebruik deze functie alleen met accounts die je vertrouwt.</translation>
 <translation id="9183456764293710005">Vergrootglas voor volledig scherm</translation>
diff --git a/ash/strings/ash_strings_no.xtb b/ash/strings/ash_strings_no.xtb
index 0ef10c6..f9e03b8 100644
--- a/ash/strings/ash_strings_no.xtb
+++ b/ash/strings/ash_strings_no.xtb
@@ -27,6 +27,7 @@
 <translation id="121097972571826261">Ett ord frem</translation>
 <translation id="1225748608451425081">Chromebooken er låst på grunn av en kjent feil. Du kan logge på om <ph name="TIME_LEFT" />.</translation>
 <translation id="1229194443904279055">Slutt å merke</translation>
+<translation id="1239161794459865856"><ph name="FEATURE_NAME" /> er tilkoblet.</translation>
 <translation id="1247372569136754018">Mikrofon (intern)</translation>
 <translation id="1252999807265626933">Lader fra <ph name="POWER_SOURCE" /></translation>
 <translation id="1255033239764210633">Hvordan er været?</translation>
@@ -74,6 +75,7 @@
 <translation id="1654477262762802994">Start et talesøk</translation>
 <translation id="1667964833127753507">Den nøytrale fargemodusen bruker ikke farger som er hentet fra bakgrunnen. I stedet brukes et nøytralt utvalg av lyse eller mørke fargetoner.</translation>
 <translation id="1677472565718498478"><ph name="TIME" /> igjen</translation>
+<translation id="1677507110654891115"><ph name="FEATURE_NAME" /> er ikke tilkoblet.</translation>
 <translation id="1698080062160024910">Nedtelling på <ph name="TOTAL_TIME" /> · <ph name="LABEL" /></translation>
 <translation id="1698760176351776263">IPv6-adresse: <ph name="ADDRESS" /></translation>
 <translation id="1708345662127501511">Skrivebord: <ph name="DESK_NAME" /></translation>
@@ -145,6 +147,7 @@
 <translation id="2369165858548251131">«Hei» på kinesisk</translation>
 <translation id="2390318262976603432">Lokalitetsinnstillinger</translation>
 <translation id="2391579633712104609">180°</translation>
+<translation id="2405664212338326887">Ikke tilkoblet</translation>
 <translation id="2408955596600435184">Skriv inn PIN-koden din</translation>
 <translation id="2412593942846481727">En oppdatering er tilgjengelig</translation>
 <translation id="2413728805700750528"><ph name="DISPLAY_NAME" /> er en administrert økt administrert av <ph name="DOMAIN" /></translation>
@@ -243,6 +246,7 @@
 <translation id="3364721542077212959">Pekepennverktøy</translation>
 <translation id="3368922792935385530">Tilkoblet</translation>
 <translation id="3371140690572404006">USB-C-enhet (porten foran på høyre side)</translation>
+<translation id="3375634426936648815">Tilkoblet</translation>
 <translation id="3386978599540877378">fullskjermlupen</translation>
 <translation id="3400357268283240774">Flere innstillinger</translation>
 <translation id="3410336247007142655">Vis innstillinger for mørkt tema</translation>
@@ -322,6 +326,7 @@
 <translation id="4181841719683918333">Språk</translation>
 <translation id="4195877955194704651">Automatisk klikk-knapp</translation>
 <translation id="4197790712631116042">Av</translation>
+<translation id="4201033867194214117"><ph name="FEATURE_NAME" /> er ikke tilgjengelig.</translation>
 <translation id="4212246570487010370">Fortsett å surfe</translation>
 <translation id="4212472694152630271">Bytt til PIN-kode</translation>
 <translation id="4215497585250573029">VPN-innstillinger</translation>
@@ -333,6 +338,7 @@
 <translation id="4285498937028063278">Løsne</translation>
 <translation id="4294319844246081198">God morgen, <ph name="GIVEN_NAME" /></translation>
 <translation id="4296136865091727875">Fjern alle <ph name="COUNT" /> varsler</translation>
+<translation id="4302592941791324970">Ikke tilgjengelig</translation>
 <translation id="4303223480529385476">Vis statusområdet</translation>
 <translation id="4321179778687042513">ctrl</translation>
 <translation id="4321776623976362024">Du trykket på hurtigtasten for høy kontrast. Vil du slå det på?</translation>
@@ -426,6 +432,7 @@
 <translation id="5302048478445481009">Språk</translation>
 <translation id="5313326810920013265">Bluetooth-innstillinger</translation>
 <translation id="5314219114274263156">Skjermopptaket er utført</translation>
+<translation id="5329548388331921293">Kobler til …</translation>
 <translation id="5331975486040154427">USB-C-enhet (porten bak på venstre side)</translation>
 <translation id="5352250171825660495">Mørkt tema er på</translation>
 <translation id="5379115545237091094">For mange forsøk</translation>
@@ -439,6 +446,7 @@
 <translation id="5465662442746197494">Trenger du hjelp?</translation>
 <translation id="5496819745535887422">Administratoren din tilbakestiller enheten din til forrige versjon. Alle data blir slettet når enheten starter på nytt.</translation>
 <translation id="5519195206574732858">LTE</translation>
+<translation id="5523434445161341166"><ph name="FEATURE_NAME" /> kobler til.</translation>
 <translation id="553675580533261935">Avslutning av økten</translation>
 <translation id="5537725057119320332">Cast</translation>
 <translation id="5548285847212963613">Utvidelsen «<ph name="EXTENSION_NAME" />» kan hjelpe deg med å koble deg til dette nettverket.</translation>
diff --git a/ash/strings/ash_strings_pl.xtb b/ash/strings/ash_strings_pl.xtb
index 9101ab7..cd0520d 100644
--- a/ash/strings/ash_strings_pl.xtb
+++ b/ash/strings/ash_strings_pl.xtb
@@ -27,6 +27,7 @@
 <translation id="121097972571826261">Do przodu o jedno słowo</translation>
 <translation id="1225748608451425081">Ten Chromebook został zablokowany z powodu znanego błędu. Zalogowanie się będzie możliwe za <ph name="TIME_LEFT" />.</translation>
 <translation id="1229194443904279055">Wyjdź z trybu wybierania danych</translation>
+<translation id="1239161794459865856">Funkcja <ph name="FEATURE_NAME" /> ma połączenie.</translation>
 <translation id="1247372569136754018">Mikrofon (wewnętrzny)</translation>
 <translation id="1252999807265626933">Trwa ładowanie z: <ph name="POWER_SOURCE" /></translation>
 <translation id="1255033239764210633">Jaka jest pogoda?</translation>
@@ -74,6 +75,7 @@
 <translation id="1654477262762802994">Rozpocznij zapytanie głosowe</translation>
 <translation id="1667964833127753507">Tryb koloru neutralnego nie wyświetla kolorów wyodrębnionych z tapety. Zamiast nich używa jasnych i ciemnych odcieni stonowanych neutralnie.</translation>
 <translation id="1677472565718498478">Pozostało <ph name="TIME" /></translation>
+<translation id="1677507110654891115">Funkcja <ph name="FEATURE_NAME" /> nie ma połączenia.</translation>
 <translation id="1698080062160024910">Minutnik <ph name="TOTAL_TIME" /> · <ph name="LABEL" /></translation>
 <translation id="1698760176351776263">Adres IPv6: <ph name="ADDRESS" /></translation>
 <translation id="1708345662127501511">Biurko: <ph name="DESK_NAME" /></translation>
@@ -145,6 +147,7 @@
 <translation id="2369165858548251131">„Cześć” po chińsku</translation>
 <translation id="2390318262976603432">Ustawienia języka</translation>
 <translation id="2391579633712104609">180°</translation>
+<translation id="2405664212338326887">Brak połączenia</translation>
 <translation id="2408955596600435184">Wpisz kod PIN</translation>
 <translation id="2412593942846481727">Dostępna aktualizacja</translation>
 <translation id="2413728805700750528"><ph name="DISPLAY_NAME" /> jest sesją zarządzaną, którą zarządza <ph name="DOMAIN" /></translation>
@@ -243,6 +246,7 @@
 <translation id="3364721542077212959">Narzędzia rysika</translation>
 <translation id="3368922792935385530">Połączone</translation>
 <translation id="3371140690572404006">Urządzenie USB-C (przedni port na prawym boku)</translation>
+<translation id="3375634426936648815">Połączono</translation>
 <translation id="3386978599540877378">Lupa pełnoekranowa</translation>
 <translation id="3400357268283240774">Ustawienia dodatkowe</translation>
 <translation id="3410336247007142655">Pokaż ustawienia trybu ciemnego</translation>
@@ -322,6 +326,7 @@
 <translation id="4181841719683918333">Języki</translation>
 <translation id="4195877955194704651">Automatyczne klikanie przycisku</translation>
 <translation id="4197790712631116042">Wyłączono</translation>
+<translation id="4201033867194214117">Funkcja <ph name="FEATURE_NAME" /> jest niedostępna.</translation>
 <translation id="4212246570487010370">Przeglądaj dalej</translation>
 <translation id="4212472694152630271">Zmień na PIN</translation>
 <translation id="4215497585250573029">Ustawienia sieci VPN</translation>
@@ -333,6 +338,7 @@
 <translation id="4285498937028063278">Odepnij</translation>
 <translation id="4294319844246081198">Dzień dobry <ph name="GIVEN_NAME" />,</translation>
 <translation id="4296136865091727875">Wyczyść wszystkie powiadomienia (<ph name="COUNT" />)</translation>
+<translation id="4302592941791324970">Brak dostępu</translation>
 <translation id="4303223480529385476">Rozwiń pasek stanu</translation>
 <translation id="4321179778687042513">ctrl</translation>
 <translation id="4321776623976362024">Naciśnięto skrót klawiszowy wysokiego kontrastu. Czy chcesz go włączyć?</translation>
@@ -426,6 +432,7 @@
 <translation id="5302048478445481009">Język</translation>
 <translation id="5313326810920013265">Ustawienia Bluetooth</translation>
 <translation id="5314219114274263156">Nagrano ekran</translation>
+<translation id="5329548388331921293">Łączę…</translation>
 <translation id="5331975486040154427">Urządzenie USB-C (tylny port na lewym boku)</translation>
 <translation id="5352250171825660495">Tryb ciemny jest włączony</translation>
 <translation id="5379115545237091094">Zbyt wiele prób</translation>
@@ -439,6 +446,7 @@
 <translation id="5465662442746197494">Potrzebujesz pomocy?</translation>
 <translation id="5496819745535887422">Administrator przywraca wcześniejszą wersję oprogramowania na urządzeniu. Po ponownym uruchomieniu urządzenia wszystkie dane zostaną usunięte.</translation>
 <translation id="5519195206574732858">LTE</translation>
+<translation id="5523434445161341166">Funkcja <ph name="FEATURE_NAME" /> nawiązuje połączenie.</translation>
 <translation id="553675580533261935">Zamykanie sesji</translation>
 <translation id="5537725057119320332">Przesyłaj</translation>
 <translation id="5548285847212963613">Rozszerzenie „<ph name="EXTENSION_NAME" />” może ułatwić połączenie z tą siecią.</translation>
diff --git a/ash/strings/ash_strings_pt-BR.xtb b/ash/strings/ash_strings_pt-BR.xtb
index bbe2942..ec8baca 100644
--- a/ash/strings/ash_strings_pt-BR.xtb
+++ b/ash/strings/ash_strings_pt-BR.xtb
@@ -27,6 +27,7 @@
 <translation id="121097972571826261">Avançar por palavra</translation>
 <translation id="1225748608451425081">Seu Chromebook está bloqueado devido a um problema conhecido. Você poderá fazer login em <ph name="TIME_LEFT" />.</translation>
 <translation id="1229194443904279055">Parar de selecionar</translation>
+<translation id="1239161794459865856">O recurso <ph name="FEATURE_NAME" /> está conectado.</translation>
 <translation id="1247372569136754018">Microfone (interno)</translation>
 <translation id="1252999807265626933">Carregando a partir de <ph name="POWER_SOURCE" /></translation>
 <translation id="1255033239764210633">Como está o tempo?</translation>
@@ -74,6 +75,7 @@
 <translation id="1654477262762802994">Iniciar uma consulta por voz</translation>
 <translation id="1667964833127753507">O modo de cores neutras substitui as cores extraídas do plano de fundo por um conjunto de tons neutros claros ou escuros.</translation>
 <translation id="1677472565718498478"><ph name="TIME" /> restante(s)</translation>
+<translation id="1677507110654891115">O recurso <ph name="FEATURE_NAME" /> não está conectado.</translation>
 <translation id="1698080062160024910">Timer de <ph name="TOTAL_TIME" /> · <ph name="LABEL" /></translation>
 <translation id="1698760176351776263">Endereço IPv6: <ph name="ADDRESS" /></translation>
 <translation id="1708345662127501511">Espaço de trabalho: <ph name="DESK_NAME" /></translation>
@@ -145,6 +147,7 @@
 <translation id="2369165858548251131">"Olá" em chinês</translation>
 <translation id="2390318262976603432">Configurações de localidade</translation>
 <translation id="2391579633712104609">180°</translation>
+<translation id="2405664212338326887">Não conectado</translation>
 <translation id="2408955596600435184">Informe seu PIN</translation>
 <translation id="2412593942846481727">Atualização disponível</translation>
 <translation id="2413728805700750528"><ph name="DISPLAY_NAME" /> é uma sessão gerenciada por <ph name="DOMAIN" /></translation>
@@ -243,6 +246,7 @@
 <translation id="3364721542077212959">Ferramentas da stylus</translation>
 <translation id="3368922792935385530">Conectado</translation>
 <translation id="3371140690572404006">Dispositivo USB-C (porta frontal da direita)</translation>
+<translation id="3375634426936648815">Conectado</translation>
 <translation id="3386978599540877378">a lupa de tela cheia</translation>
 <translation id="3400357268283240774">Configurações adicionais</translation>
 <translation id="3410336247007142655">Mostrar configurações do tema escuro</translation>
@@ -300,6 +304,7 @@
 <translation id="3943857333388298514">Colar</translation>
 <translation id="394485226368336402">Configurações de áudio</translation>
 <translation id="3962859241508114581">Faixa anterior</translation>
+<translation id="3969043077941541451">Desativado</translation>
 <translation id="397105322502079400">Calculando...</translation>
 <translation id="3977512764614765090">Bateria em <ph name="PERCENTAGE" />% e carregando.</translation>
 <translation id="3995138139523574647">Dispositivo USB-C (porta traseira da direita)</translation>
@@ -310,6 +315,7 @@
 <translation id="4032485810211612751"><ph name="HOURS" />:<ph name="MINUTES" />:<ph name="SECONDS" /></translation>
 <translation id="4042660782729322247">Você está compartilhando sua tela</translation>
 <translation id="4065525899979931964">{NUM_APPS,plural, =1{Desat p/ um app}one{Desat p/ # app}other{Desat p/ # apps}}</translation>
+<translation id="4066027111132117168">Ativado, <ph name="REMAINING_TIME" /></translation>
 <translation id="4072264167173457037">Sinal médio</translation>
 <translation id="4112140312785995938">Retroceder</translation>
 <translation id="4114315158543974537">Ativar o Phone Hub</translation>
@@ -320,6 +326,7 @@
 <translation id="4181841719683918333">Idiomas</translation>
 <translation id="4195877955194704651">Botão de cliques automáticos</translation>
 <translation id="4197790712631116042">Desativado</translation>
+<translation id="4201033867194214117">O recurso <ph name="FEATURE_NAME" /> não está disponível.</translation>
 <translation id="4212246570487010370">Continuar navegando</translation>
 <translation id="4212472694152630271">Usar PIN</translation>
 <translation id="4215497585250573029">Configurações de VPN</translation>
@@ -331,6 +338,7 @@
 <translation id="4285498937028063278">Soltar</translation>
 <translation id="4294319844246081198">Bom dia, <ph name="GIVEN_NAME" />,</translation>
 <translation id="4296136865091727875">Limpar todas as <ph name="COUNT" /> notificações</translation>
+<translation id="4302592941791324970">Indisponível</translation>
 <translation id="4303223480529385476">Expandir área de status</translation>
 <translation id="4321179778687042513">ctrl</translation>
 <translation id="4321776623976362024">Você pressionou o atalho de teclado para o alto contraste. Gostaria de ativá-lo?</translation>
@@ -424,6 +432,7 @@
 <translation id="5302048478445481009">Idioma</translation>
 <translation id="5313326810920013265">Configurações de Bluetooth</translation>
 <translation id="5314219114274263156">Gravação de tela capturada</translation>
+<translation id="5329548388331921293">Conectando…</translation>
 <translation id="5331975486040154427">Dispositivo USB-C (porta traseira da esquerda)</translation>
 <translation id="5352250171825660495">O tema escuro está ativado</translation>
 <translation id="5379115545237091094">Muitas tentativas</translation>
@@ -437,6 +446,7 @@
 <translation id="5465662442746197494">Precisa de ajuda?</translation>
 <translation id="5496819745535887422">O administrador está revertendo seu dispositivo. Todos os dados serão excluídos quando o dispositivo for reiniciado.</translation>
 <translation id="5519195206574732858">LTE</translation>
+<translation id="5523434445161341166">O recurso <ph name="FEATURE_NAME" /> está se conectando.</translation>
 <translation id="553675580533261935">Saindo da sessão</translation>
 <translation id="5537725057119320332">Transmitir</translation>
 <translation id="5548285847212963613">A extensão "<ph name="EXTENSION_NAME" />" pode ajudar na conexão com esta rede.</translation>
@@ -565,6 +575,7 @@
 <translation id="6803622936009808957">Não foi possível espelhar os displays porque não foram encontradas resoluções suportadas. Em vez disso, foi ativada a área de trabalho estendida.</translation>
 <translation id="6818242057446442178">Voltar por palavra</translation>
 <translation id="6820676911989879663">Faça uma pausa</translation>
+<translation id="6857725247182211756"><ph name="SECONDS" /> segundos</translation>
 <translation id="6857811139397017780">Ativar <ph name="NETWORKSERVICE" /></translation>
 <translation id="685782768769951078">{NUM_DIGITS,plural, =1{1 dígito restante}one{# dígito restante}other{# dígitos restantes}}</translation>
 <translation id="6878400149835617132">Atalho desativado</translation>
@@ -633,6 +644,7 @@
 <translation id="7600875258240007829">Ver todas as notificações</translation>
 <translation id="7618774594543487847">Neutro</translation>
 <translation id="7624117708979618027"><ph name="TEMPERATURE_F" /> °F</translation>
+<translation id="7633755430369750696">Mostrar configurações de Compartilhar por proximidade.</translation>
 <translation id="7642647758716480637">Abrir configurações da rede <ph name="NETWORK_NAME" />, <ph name="CONNECTION_STATUS" /></translation>
 <translation id="7645176681409127223"><ph name="USER_NAME" /> (proprietário)</translation>
 <translation id="7647488630410863958">Desbloquear dispositivo para ver as notificações</translation>
@@ -648,6 +660,7 @@
 <translation id="7780159184141939021">Girar tela</translation>
 <translation id="7796353162336583443">Toque no botão da stylus na estante para criar uma nota, uma captura de tela, usar o Google Assistente, o apontador laser ou a lupa.</translation>
 <translation id="7798302898096527229">Pressione Pesquisar ou Shift para cancelar.</translation>
+<translation id="781126011916719498">Acesse rapidamente seus arquivos importantes. Para fixar um arquivo, clique nele com o botão direito do mouse ou toque nele e o mantenha pressionado.</translation>
 <translation id="7814236020522506259"><ph name="HOUR" /> e <ph name="MINUTE" /></translation>
 <translation id="7829386189513694949">Sinal forte</translation>
 <translation id="7837740436429729974">Tempo esgotado</translation>
@@ -791,6 +804,7 @@
 <translation id="9089416786594320554">Métodos de entrada</translation>
 <translation id="9091626656156419976">Tela <ph name="DISPLAY_NAME" /> removida</translation>
 <translation id="9151726767154816831">Reinicie e execute um powerwash para atualizar</translation>
+<translation id="9166331175924255663">Alterne a alta visibilidade de Compartilhar por proximidade.</translation>
 <translation id="9168436347345867845">Mais tarde</translation>
 <translation id="9179259655489829027">Este recurso permite acessar rapidamente qualquer usuário conectado sem a necessidade de uma senha. Use esse recurso somente com contas em que você confia.</translation>
 <translation id="9183456764293710005">Lupa de tela cheia</translation>
diff --git a/ash/strings/ash_strings_pt-PT.xtb b/ash/strings/ash_strings_pt-PT.xtb
index 7eb5e60..a89f98a 100644
--- a/ash/strings/ash_strings_pt-PT.xtb
+++ b/ash/strings/ash_strings_pt-PT.xtb
@@ -27,6 +27,7 @@
 <translation id="121097972571826261">Avançar por palavra</translation>
 <translation id="1225748608451425081">O seu Chromebook está bloqueado devido a um problema conhecido. Poderá iniciar sessão dentro de <ph name="TIME_LEFT" />.</translation>
 <translation id="1229194443904279055">Parar seleção</translation>
+<translation id="1239161794459865856">A funcionalidade <ph name="FEATURE_NAME" /> está ligada.</translation>
 <translation id="1247372569136754018">Microfone (interno)</translation>
 <translation id="1252999807265626933">A carregar a partir de <ph name="POWER_SOURCE" /></translation>
 <translation id="1255033239764210633">Como está o tempo?</translation>
@@ -74,6 +75,7 @@
 <translation id="1654477262762802994">Iniciar uma consulta de voz</translation>
 <translation id="1667964833127753507">O modo de cores neutras não utiliza cores extraídas da imagem de fundo: substitui-as por um conjunto de tons claros ou escuros.</translation>
 <translation id="1677472565718498478"><ph name="TIME" /> restante(s)</translation>
+<translation id="1677507110654891115">A funcionalidade <ph name="FEATURE_NAME" /> não está ligada.</translation>
 <translation id="1698080062160024910">Temporizador de <ph name="TOTAL_TIME" /> · <ph name="LABEL" /></translation>
 <translation id="1698760176351776263">Endereço IPv6: <ph name="ADDRESS" /></translation>
 <translation id="1708345662127501511">Espaço de trabalho: <ph name="DESK_NAME" /></translation>
@@ -145,6 +147,7 @@
 <translation id="2369165858548251131">"Olá" em chinês</translation>
 <translation id="2390318262976603432">Definições locais</translation>
 <translation id="2391579633712104609">180°</translation>
+<translation id="2405664212338326887">Sem ligação</translation>
 <translation id="2408955596600435184">Introduza o PIN</translation>
 <translation id="2412593942846481727">Atualização disponível</translation>
 <translation id="2413728805700750528"><ph name="DISPLAY_NAME" /> é uma sessão gerida por <ph name="DOMAIN" /></translation>
@@ -243,6 +246,7 @@
 <translation id="3364721542077212959">Ferramentas da caneta stylus</translation>
 <translation id="3368922792935385530">Ligado</translation>
 <translation id="3371140690572404006">Dispositivo USB-C (porta frontal do lado direito)</translation>
+<translation id="3375634426936648815">Ligado</translation>
 <translation id="3386978599540877378">a lupa em ecrã inteiro</translation>
 <translation id="3400357268283240774">Definições adicionais</translation>
 <translation id="3410336247007142655">Mostre as definições do tema escuro.</translation>
@@ -322,6 +326,7 @@
 <translation id="4181841719683918333">Idiomas</translation>
 <translation id="4195877955194704651">Botão de cliques automáticos</translation>
 <translation id="4197790712631116042">Desativado</translation>
+<translation id="4201033867194214117">A funcionalidade <ph name="FEATURE_NAME" /> não está disponível.</translation>
 <translation id="4212246570487010370">Continue a navegar</translation>
 <translation id="4212472694152630271">Mudar para PIN</translation>
 <translation id="4215497585250573029">Definições da VPN</translation>
@@ -333,6 +338,7 @@
 <translation id="4285498937028063278">Soltar</translation>
 <translation id="4294319844246081198">Bom dia, <ph name="GIVEN_NAME" />,</translation>
 <translation id="4296136865091727875">Limpar todas as <ph name="COUNT" /> notificações</translation>
+<translation id="4302592941791324970">Não disponível</translation>
 <translation id="4303223480529385476">Expandir área de estado</translation>
 <translation id="4321179778687042513">ctrl</translation>
 <translation id="4321776623976362024">Premiu o atalho de teclado de alto contraste. Pretende ativá-lo?</translation>
@@ -426,6 +432,7 @@
 <translation id="5302048478445481009">Idioma</translation>
 <translation id="5313326810920013265">Definições de Bluetooth</translation>
 <translation id="5314219114274263156">Gravação de ecrã captada</translation>
+<translation id="5329548388331921293">A ligar…</translation>
 <translation id="5331975486040154427">Dispositivo USB-C (porta traseira do lado esquerdo)</translation>
 <translation id="5352250171825660495">O tema escuro está ativado.</translation>
 <translation id="5379115545237091094">Demasiadas tentativas</translation>
@@ -439,6 +446,7 @@
 <translation id="5465662442746197494">Precisa de ajuda?</translation>
 <translation id="5496819745535887422">O administrador vai reverter o dispositivo. Todos os dados serão eliminados quando o dispositivo for reiniciado.</translation>
 <translation id="5519195206574732858">LTE</translation>
+<translation id="5523434445161341166">A funcionalidade <ph name="FEATURE_NAME" /> está a estabelecer ligação.</translation>
 <translation id="553675580533261935">A sair da sessão…</translation>
 <translation id="5537725057119320332">Transmitir</translation>
 <translation id="5548285847212963613">A extensão "<ph name="EXTENSION_NAME" />" pode ajudar a estabelecer ligação a esta rede.</translation>
diff --git a/ash/strings/ash_strings_ru.xtb b/ash/strings/ash_strings_ru.xtb
index 8c42071e..823c636c 100644
--- a/ash/strings/ash_strings_ru.xtb
+++ b/ash/strings/ash_strings_ru.xtb
@@ -300,6 +300,7 @@
 <translation id="3943857333388298514">Вставить</translation>
 <translation id="394485226368336402">Настройки звука</translation>
 <translation id="3962859241508114581">Предыдущий трек</translation>
+<translation id="3969043077941541451">Отключен</translation>
 <translation id="397105322502079400">Вычисление…</translation>
 <translation id="3977512764614765090">Батарея заряжена на <ph name="PERCENTAGE" /> % и подключена к источнику питания.</translation>
 <translation id="3995138139523574647">Устройство USB-C (дальний порт справа)</translation>
@@ -310,6 +311,7 @@
 <translation id="4032485810211612751"><ph name="HOURS" />:<ph name="MINUTES" />:<ph name="SECONDS" /></translation>
 <translation id="4042660782729322247">Вы открыли доступ к своему экрану</translation>
 <translation id="4065525899979931964">{NUM_APPS,plural, =1{Откл. 1 прил.}one{Откл. # прил.}few{Откл. # прил.}many{Откл. # прил.}other{Откл. # прил.}}</translation>
+<translation id="4066027111132117168">Включен, <ph name="REMAINING_TIME" /></translation>
 <translation id="4072264167173457037">сигнал средней мощности</translation>
 <translation id="4112140312785995938">Перемотать назад</translation>
 <translation id="4114315158543974537">Включите Phone Hub</translation>
@@ -564,6 +566,7 @@
 <translation id="6803622936009808957">Не удалось дублировать изображение экрана, т. к. указанное разрешение не поддерживается. Включен режим расширенного рабочего стола.</translation>
 <translation id="6818242057446442178">Назад на одно слово</translation>
 <translation id="6820676911989879663">Пора отдохнуть!</translation>
+<translation id="6857725247182211756"><ph name="SECONDS" /> сек.</translation>
 <translation id="6857811139397017780">Активировать <ph name="NETWORKSERVICE" /></translation>
 <translation id="685782768769951078">{NUM_DIGITS,plural, =1{Осталась 1 цифра}one{Осталась # цифра}few{Осталось # цифры}many{Осталось # цифр}other{Осталось # цифры}}</translation>
 <translation id="6878400149835617132">Быстрые клавиши отключены</translation>
@@ -632,6 +635,7 @@
 <translation id="7600875258240007829">Показать все уведомления</translation>
 <translation id="7618774594543487847">Нейтральные</translation>
 <translation id="7624117708979618027"><ph name="TEMPERATURE_F" /> °F</translation>
+<translation id="7633755430369750696">Показать настройки Обмена с окружением</translation>
 <translation id="7642647758716480637">Открыть настройки сети "<ph name="NETWORK_NAME" />", статус: <ph name="CONNECTION_STATUS" /></translation>
 <translation id="7645176681409127223"><ph name="USER_NAME" /> (владелец)</translation>
 <translation id="7647488630410863958">Чтобы просмотреть уведомления, разблокируйте устройство</translation>
@@ -647,6 +651,7 @@
 <translation id="7780159184141939021">Поворот экрана</translation>
 <translation id="7796353162336583443">Нажмите кнопку стилуса на панели запуска, чтобы создать заметку, запустить Ассистента либо использовать стилус в качестве лупы или лазерной указки.</translation>
 <translation id="7798302898096527229">Для отмены нажмите SEARCH или SHIFT.</translation>
+<translation id="781126011916719498">Получите быстрый доступ к важным файлам. Щелкните файл правой кнопкой мыши или нажмите и удерживайте его, чтобы закрепить.</translation>
 <translation id="7814236020522506259"><ph name="HOUR" /> <ph name="MINUTE" /></translation>
 <translation id="7829386189513694949">хороший сигнал</translation>
 <translation id="7837740436429729974">Время истекло</translation>
@@ -790,6 +795,7 @@
 <translation id="9089416786594320554">Методы ввода</translation>
 <translation id="9091626656156419976">Удален экран "<ph name="DISPLAY_NAME" />"</translation>
 <translation id="9151726767154816831">Чтобы обновить систему, перезапустите ее и выполните Powerwash</translation>
+<translation id="9166331175924255663">Включить или отключить широкий доступ для Обмена с окружением</translation>
 <translation id="9168436347345867845">Позже</translation>
 <translation id="9179259655489829027">Эта функция позволяет быстро и без пароля получить доступ к любому аккаунту, в который выполнен вход. Используйте ее только для надежных аккаунтов.</translation>
 <translation id="9183456764293710005">Полноэкранная лупа</translation>
diff --git a/ash/strings/ash_strings_sl.xtb b/ash/strings/ash_strings_sl.xtb
index b470ea2..cd7b12f 100644
--- a/ash/strings/ash_strings_sl.xtb
+++ b/ash/strings/ash_strings_sl.xtb
@@ -27,6 +27,7 @@
 <translation id="121097972571826261">Naprej po besedo</translation>
 <translation id="1225748608451425081">Chromebook je zaklenjen zaradi znane težave. Prijavili se boste lahko čez toliko časa: <ph name="TIME_LEFT" />.</translation>
 <translation id="1229194443904279055">Ustavi izbiranje</translation>
+<translation id="1239161794459865856">Povezava s funkcijo <ph name="FEATURE_NAME" /> je vzpostavljena.</translation>
 <translation id="1247372569136754018">Mikrofon (vgrajeni)</translation>
 <translation id="1252999807265626933">Polnjenje iz: <ph name="POWER_SOURCE" /></translation>
 <translation id="1255033239764210633">Kakšno je vreme?</translation>
@@ -74,6 +75,7 @@
 <translation id="1654477262762802994">Začetek glasovne poizvedbe</translation>
 <translation id="1667964833127753507">Nevtralni barvni način ne uporablja barv, pridobljenih iz zaslonskega ozadja, temveč jih nadomesti s kompletom nevtralnih svetlih ali temnih odtenkov.</translation>
 <translation id="1677472565718498478">Še <ph name="TIME" /></translation>
+<translation id="1677507110654891115">Povezava s funkcijo <ph name="FEATURE_NAME" /> ni vzpostavljena.</translation>
 <translation id="1698080062160024910">Časovnik (<ph name="TOTAL_TIME" />) · <ph name="LABEL" /></translation>
 <translation id="1698760176351776263">Naslov IPv6: <ph name="ADDRESS" /></translation>
 <translation id="1708345662127501511">Pisalna miza: <ph name="DESK_NAME" /></translation>
@@ -145,6 +147,7 @@
 <translation id="2369165858548251131">»Živijo« po kitajsko</translation>
 <translation id="2390318262976603432">Nastavitve jezika</translation>
 <translation id="2391579633712104609">180°</translation>
+<translation id="2405664212338326887">Ni povezano</translation>
 <translation id="2408955596600435184">Vnos kode PIN</translation>
 <translation id="2412593942846481727">Na voljo je posodobitev</translation>
 <translation id="2413728805700750528"><ph name="DISPLAY_NAME" /> je upravljana seja, ki jo upravlja <ph name="DOMAIN" /></translation>
@@ -243,6 +246,7 @@
 <translation id="3364721542077212959">Orodja pisala</translation>
 <translation id="3368922792935385530">Povezano</translation>
 <translation id="3371140690572404006">Naprava USB-C (vrata desno spredaj)</translation>
+<translation id="3375634426936648815">Povezano</translation>
 <translation id="3386978599540877378">celozaslonska lupa</translation>
 <translation id="3400357268283240774">Dodatne nastavitve</translation>
 <translation id="3410336247007142655">Prikaz nastavitev temne teme</translation>
@@ -322,6 +326,7 @@
 <translation id="4181841719683918333">Jeziki</translation>
 <translation id="4195877955194704651">Gumb za samodejne klike</translation>
 <translation id="4197790712631116042">Izklopljeno</translation>
+<translation id="4201033867194214117"><ph name="FEATURE_NAME" /> ni na voljo.</translation>
 <translation id="4212246570487010370">Nadaljevanje brskanja</translation>
 <translation id="4212472694152630271">Preklopi na kodo PIN</translation>
 <translation id="4215497585250573029">Nastavitve VPN-ja</translation>
@@ -333,6 +338,7 @@
 <translation id="4285498937028063278">Odpni</translation>
 <translation id="4294319844246081198">Dobro jutro, <ph name="GIVEN_NAME" />,</translation>
 <translation id="4296136865091727875">Izbris vseh <ph name="COUNT" /> obvestil</translation>
+<translation id="4302592941791324970">Ni na voljo</translation>
 <translation id="4303223480529385476">Razširitev območja stanja</translation>
 <translation id="4321179778687042513">ctrl</translation>
 <translation id="4321776623976362024">Pritisnili ste bližnjično tipko za visoki kontrast. Ali ga želite vklopiti?</translation>
@@ -426,6 +432,7 @@
 <translation id="5302048478445481009">Jezik</translation>
 <translation id="5313326810920013265">Nastavitve za Bluetooth</translation>
 <translation id="5314219114274263156">Videoposnetek zaslona je bil ustvarjen</translation>
+<translation id="5329548388331921293">Vzpostavljanje povezave …</translation>
 <translation id="5331975486040154427">Naprava USB-C (vrata levo zadaj)</translation>
 <translation id="5352250171825660495">Temna tema je vklopljena</translation>
 <translation id="5379115545237091094">Preveč poskusov</translation>
@@ -439,6 +446,7 @@
 <translation id="5465662442746197494">Potrebujete pomoč?</translation>
 <translation id="5496819745535887422">Skrbnik vrača napravo na prejšnjo različico. Ko bo naprava znova zagnana, bodo vsi podatki izbrisani.</translation>
 <translation id="5519195206574732858">LTE</translation>
+<translation id="5523434445161341166">Vzpostavljanje povezave s funkcijo <ph name="FEATURE_NAME" />.</translation>
 <translation id="553675580533261935">Odjava iz seje</translation>
 <translation id="5537725057119320332">Predvajanje</translation>
 <translation id="5548285847212963613">Razširitev »<ph name="EXTENSION_NAME" />« lahko pomaga vzpostavi povezavo s tem omrežjem.</translation>
diff --git a/ash/strings/ash_strings_sr-Latn.xtb b/ash/strings/ash_strings_sr-Latn.xtb
index 41898f4..b7e0cc5 100644
--- a/ash/strings/ash_strings_sr-Latn.xtb
+++ b/ash/strings/ash_strings_sr-Latn.xtb
@@ -27,6 +27,7 @@
 <translation id="121097972571826261">Reč unapred</translation>
 <translation id="1225748608451425081">Chromebook je zaključan zbog poznatog problema. Moći ćete da se prijavite za: <ph name="TIME_LEFT" />.</translation>
 <translation id="1229194443904279055">Izađi iz režima biranja</translation>
+<translation id="1239161794459865856">Funkcija <ph name="FEATURE_NAME" /> je povezana.</translation>
 <translation id="1247372569136754018">Mikrofon (interni)</translation>
 <translation id="1252999807265626933">Punjenje iz uređaja <ph name="POWER_SOURCE" /></translation>
 <translation id="1255033239764210633">Kakvo je vreme?</translation>
@@ -74,6 +75,7 @@
 <translation id="1654477262762802994">Započnite glasovnu pretragu</translation>
 <translation id="1667964833127753507">Režim neutralnih boja ne koristi boje iz pozadina i zamenjuje ih skupom neutralnih svetlih i tamnih nijansi.</translation>
 <translation id="1677472565718498478"><ph name="TIME" /> je preostalo</translation>
+<translation id="1677507110654891115">Funkcija <ph name="FEATURE_NAME" /> nije povezana.</translation>
 <translation id="1698080062160024910">Tajmer za <ph name="TOTAL_TIME" /> · <ph name="LABEL" /></translation>
 <translation id="1698760176351776263">IPv6 adresa: <ph name="ADDRESS" /></translation>
 <translation id="1708345662127501511">Radna površina: <ph name="DESK_NAME" /></translation>
@@ -145,6 +147,7 @@
 <translation id="2369165858548251131">„Zdravo“ na kineskom</translation>
 <translation id="2390318262976603432">Podešavanja lokaliteta</translation>
 <translation id="2391579633712104609">180°</translation>
+<translation id="2405664212338326887">Nije povezano</translation>
 <translation id="2408955596600435184">Unesite PIN</translation>
 <translation id="2412593942846481727">Dostupno je ažuriranje</translation>
 <translation id="2413728805700750528"><ph name="DISPLAY_NAME" /> je sesija kojom upravlja <ph name="DOMAIN" /></translation>
@@ -243,6 +246,7 @@
 <translation id="3364721542077212959">Alatke za pisaljku</translation>
 <translation id="3368922792935385530">Povezan</translation>
 <translation id="3371140690572404006">Uređaj sa USB priključkom tipa C (desni prednji port)</translation>
+<translation id="3375634426936648815">Povezano</translation>
 <translation id="3386978599540877378">lupa preko celog ekrana</translation>
 <translation id="3400357268283240774">Dodatna podešavanja</translation>
 <translation id="3410336247007142655">Prikažite podešavanja tamne teme</translation>
@@ -322,6 +326,7 @@
 <translation id="4181841719683918333">Jezici</translation>
 <translation id="4195877955194704651">Automatski klikovi na dugmad</translation>
 <translation id="4197790712631116042">Isključeno</translation>
+<translation id="4201033867194214117">Funkcija <ph name="FEATURE_NAME" /> nije dostupna</translation>
 <translation id="4212246570487010370">Nastavite sa pregledanjem</translation>
 <translation id="4212472694152630271">Pređi na PIN</translation>
 <translation id="4215497585250573029">Podešavanja VPN-a</translation>
@@ -333,6 +338,7 @@
 <translation id="4285498937028063278">Otkači</translation>
 <translation id="4294319844246081198">Dobro jutro, <ph name="GIVEN_NAME" />,</translation>
 <translation id="4296136865091727875">Obrišite sva obaveštenja (<ph name="COUNT" />)</translation>
+<translation id="4302592941791324970">Nije dostupno</translation>
 <translation id="4303223480529385476">Proširite oblast statusa</translation>
 <translation id="4321179778687042513">ctrl</translation>
 <translation id="4321776623976362024">Pritisnuli ste tastersku prečicu za visoki kontrast. Želite li da je uključite?</translation>
@@ -426,6 +432,7 @@
 <translation id="5302048478445481009">Jezik</translation>
 <translation id="5313326810920013265">Podešavanja Bluetooth-a</translation>
 <translation id="5314219114274263156">Ekran je snimljen</translation>
+<translation id="5329548388331921293">Povezuje se...</translation>
 <translation id="5331975486040154427">Uređaj sa USB priključkom tipa C (levi zadnji port)</translation>
 <translation id="5352250171825660495">Tamna tema je uključena</translation>
 <translation id="5379115545237091094">Previše pokušaja</translation>
@@ -439,6 +446,7 @@
 <translation id="5465662442746197494">Potrebna vam je pomoć?</translation>
 <translation id="5496819745535887422">Administrator vraća uređaj na raniju verziju. Svi podaci će biti izbrisani kada se uređaj restartuje.</translation>
 <translation id="5519195206574732858">LTE</translation>
+<translation id="5523434445161341166"><ph name="FEATURE_NAME" /> se povezuje.</translation>
 <translation id="553675580533261935">Napuštanje sesije</translation>
 <translation id="5537725057119320332">Prebacuj</translation>
 <translation id="5548285847212963613">Dodatak „<ph name="EXTENSION_NAME" />“ može da pomogne u povezivanju sa ovom mrežom.</translation>
diff --git a/ash/strings/ash_strings_sr.xtb b/ash/strings/ash_strings_sr.xtb
index 85628e6..f11b4b7 100644
--- a/ash/strings/ash_strings_sr.xtb
+++ b/ash/strings/ash_strings_sr.xtb
@@ -27,6 +27,7 @@
 <translation id="121097972571826261">Реч унапред</translation>
 <translation id="1225748608451425081">Chromebook је закључан због познатог проблема. Моћи ћете да се пријавите за: <ph name="TIME_LEFT" />.</translation>
 <translation id="1229194443904279055">Изађи из режима бирања</translation>
+<translation id="1239161794459865856">Функција <ph name="FEATURE_NAME" /> је повезана.</translation>
 <translation id="1247372569136754018">Микрофон (интерни)</translation>
 <translation id="1252999807265626933">Пуњење из уређаја <ph name="POWER_SOURCE" /></translation>
 <translation id="1255033239764210633">Какво је време?</translation>
@@ -74,6 +75,7 @@
 <translation id="1654477262762802994">Започните гласовну претрагу</translation>
 <translation id="1667964833127753507">Режим неутралних боја не користи боје из позадина и замењује их скупом неутралних светлих и тамних нијанси.</translation>
 <translation id="1677472565718498478"><ph name="TIME" /> је преостало</translation>
+<translation id="1677507110654891115">Функција <ph name="FEATURE_NAME" /> није повезана.</translation>
 <translation id="1698080062160024910">Тајмер за <ph name="TOTAL_TIME" /> · <ph name="LABEL" /></translation>
 <translation id="1698760176351776263">IPv6 адреса: <ph name="ADDRESS" /></translation>
 <translation id="1708345662127501511">Радна површина: <ph name="DESK_NAME" /></translation>
@@ -145,6 +147,7 @@
 <translation id="2369165858548251131">„Здраво“ на кинеском</translation>
 <translation id="2390318262976603432">Подешавања локалитета</translation>
 <translation id="2391579633712104609">180°</translation>
+<translation id="2405664212338326887">Није повезано</translation>
 <translation id="2408955596600435184">Унесите PIN</translation>
 <translation id="2412593942846481727">Доступно је ажурирање</translation>
 <translation id="2413728805700750528"><ph name="DISPLAY_NAME" /> је сесија којом управља <ph name="DOMAIN" /></translation>
@@ -243,6 +246,7 @@
 <translation id="3364721542077212959">Алатке за писаљку</translation>
 <translation id="3368922792935385530">Повезан</translation>
 <translation id="3371140690572404006">Уређај са USB прикључком типа C (десни предњи порт)</translation>
+<translation id="3375634426936648815">Повезано</translation>
 <translation id="3386978599540877378">лупа преко целог екрана</translation>
 <translation id="3400357268283240774">Додатна подешавања</translation>
 <translation id="3410336247007142655">Прикажите подешавања тамне теме</translation>
@@ -322,6 +326,7 @@
 <translation id="4181841719683918333">Језици</translation>
 <translation id="4195877955194704651">Аутоматски кликови на дугмад</translation>
 <translation id="4197790712631116042">Искључено</translation>
+<translation id="4201033867194214117">Функција <ph name="FEATURE_NAME" /> није доступна</translation>
 <translation id="4212246570487010370">Наставите са прегледањем</translation>
 <translation id="4212472694152630271">Пређи на PIN</translation>
 <translation id="4215497585250573029">Подешавања VPN-а</translation>
@@ -333,6 +338,7 @@
 <translation id="4285498937028063278">Откачи</translation>
 <translation id="4294319844246081198">Добро јутро, <ph name="GIVEN_NAME" />,</translation>
 <translation id="4296136865091727875">Обришите сва обавештења (<ph name="COUNT" />)</translation>
+<translation id="4302592941791324970">Није доступно</translation>
 <translation id="4303223480529385476">Проширите област статуса</translation>
 <translation id="4321179778687042513">ctrl</translation>
 <translation id="4321776623976362024">Притиснули сте тастерску пречицу за високи контраст. Желите ли да је укључите?</translation>
@@ -426,6 +432,7 @@
 <translation id="5302048478445481009">Језик</translation>
 <translation id="5313326810920013265">Подешавања Bluetooth-а</translation>
 <translation id="5314219114274263156">Екран је снимљен</translation>
+<translation id="5329548388331921293">Повезује се...</translation>
 <translation id="5331975486040154427">Уређај са USB прикључком типа C (леви задњи порт)</translation>
 <translation id="5352250171825660495">Тамна тема је укључена</translation>
 <translation id="5379115545237091094">Превише покушаја</translation>
@@ -439,6 +446,7 @@
 <translation id="5465662442746197494">Потребна вам је помоћ?</translation>
 <translation id="5496819745535887422">Администратор враћа уређај на ранију верзију. Сви подаци ће бити избрисани када се уређај рестартује.</translation>
 <translation id="5519195206574732858">LTE</translation>
+<translation id="5523434445161341166"><ph name="FEATURE_NAME" /> се повезује.</translation>
 <translation id="553675580533261935">Напуштање сесије</translation>
 <translation id="5537725057119320332">Пребацуј</translation>
 <translation id="5548285847212963613">Додатак „<ph name="EXTENSION_NAME" />“ може да помогне у повезивању са овом мрежом.</translation>
diff --git a/ash/strings/ash_strings_sv.xtb b/ash/strings/ash_strings_sv.xtb
index 3f51acf..7a0a2dd4 100644
--- a/ash/strings/ash_strings_sv.xtb
+++ b/ash/strings/ash_strings_sv.xtb
@@ -27,6 +27,7 @@
 <translation id="121097972571826261">Framåt ord för ord</translation>
 <translation id="1225748608451425081">Chromebook har låsts på grund av ett känt problem. Du kan logga in om <ph name="TIME_LEFT" />.</translation>
 <translation id="1229194443904279055">Sluta markera</translation>
+<translation id="1239161794459865856"><ph name="FEATURE_NAME" /> har anslutits.</translation>
 <translation id="1247372569136754018">Mikrofon (inbyggd)</translation>
 <translation id="1252999807265626933">Laddar från <ph name="POWER_SOURCE" /></translation>
 <translation id="1255033239764210633">Vad är det för väder?</translation>
@@ -74,6 +75,7 @@
 <translation id="1654477262762802994">Säg en sökfråga</translation>
 <translation id="1667964833127753507">I det neutrala färgläget ersätts färger från bakgrunden med en uppsättning ljusa eller mörka nyanser i neutrala toner.</translation>
 <translation id="1677472565718498478"><ph name="TIME" /> kvar</translation>
+<translation id="1677507110654891115"><ph name="FEATURE_NAME" /> har inte anslutits.</translation>
 <translation id="1698080062160024910">Timer på <ph name="TOTAL_TIME" /> · <ph name="LABEL" /></translation>
 <translation id="1698760176351776263">IPv6-adress: <ph name="ADDRESS" /></translation>
 <translation id="1708345662127501511">Skrivbord: <ph name="DESK_NAME" /></translation>
@@ -145,6 +147,7 @@
 <translation id="2369165858548251131">”Hej” på kinesiska</translation>
 <translation id="2390318262976603432">Inställningar av språkkod</translation>
 <translation id="2391579633712104609">180°</translation>
+<translation id="2405664212338326887">Inte ansluten</translation>
 <translation id="2408955596600435184">Ange din pinkod</translation>
 <translation id="2412593942846481727">Det finns en uppdatering</translation>
 <translation id="2413728805700750528"><ph name="DISPLAY_NAME" /> är en hanterad session som hanteras av <ph name="DOMAIN" /></translation>
@@ -243,6 +246,7 @@
 <translation id="3364721542077212959">Verktyg för e-penna</translation>
 <translation id="3368922792935385530">Ansluten</translation>
 <translation id="3371140690572404006">USB-C-enhet (främre porten på högra sidan)</translation>
+<translation id="3375634426936648815">Ansluten</translation>
 <translation id="3386978599540877378">helskärmsförstoraren</translation>
 <translation id="3400357268283240774">Ytterligare inställningar</translation>
 <translation id="3410336247007142655">Visa inställningarna för mörkt tema</translation>
@@ -322,6 +326,7 @@
 <translation id="4181841719683918333">Språk</translation>
 <translation id="4195877955194704651">Knapp för Automatiska klick</translation>
 <translation id="4197790712631116042">Av</translation>
+<translation id="4201033867194214117"><ph name="FEATURE_NAME" /> är inte tillgängligt.</translation>
 <translation id="4212246570487010370">Fortsätt surfa</translation>
 <translation id="4212472694152630271">Byt till pinkod</translation>
 <translation id="4215497585250573029">VPN-inställningar</translation>
@@ -333,6 +338,7 @@
 <translation id="4285498937028063278">Lossa</translation>
 <translation id="4294319844246081198">Hej <ph name="GIVEN_NAME" />!</translation>
 <translation id="4296136865091727875">Rensa alla <ph name="COUNT" /> aviseringar</translation>
+<translation id="4302592941791324970">Inte tillgängligt</translation>
 <translation id="4303223480529385476">Utöka statusfält</translation>
 <translation id="4321179778687042513">ctrl</translation>
 <translation id="4321776623976362024">Du tryckte på kortkommandot för högkontrastläge. Vill du aktivera funktionen?</translation>
@@ -426,6 +432,7 @@
 <translation id="5302048478445481009">Språk</translation>
 <translation id="5313326810920013265">Bluetooth-inställningar</translation>
 <translation id="5314219114274263156">En skärminspelning har tagits</translation>
+<translation id="5329548388331921293">Ansluter …</translation>
 <translation id="5331975486040154427">USB-C-enhet (bakre porten på vänster sida)</translation>
 <translation id="5352250171825660495">Mörkt tema är på</translation>
 <translation id="5379115545237091094">För många försök</translation>
@@ -439,6 +446,7 @@
 <translation id="5465662442746197494">Behöver du hjälp?</translation>
 <translation id="5496819745535887422">Enheten återställs av administratören. All data raderas när enheten startas om.</translation>
 <translation id="5519195206574732858">LTE</translation>
+<translation id="5523434445161341166"><ph name="FEATURE_NAME" /> ansluter.</translation>
 <translation id="553675580533261935">Sessionen avslutas</translation>
 <translation id="5537725057119320332">Casta</translation>
 <translation id="5548285847212963613">Tillägget <ph name="EXTENSION_NAME" /> kan hjälpa till med att ansluta till nätverket.</translation>
diff --git a/ash/strings/ash_strings_te.xtb b/ash/strings/ash_strings_te.xtb
index a5ee22e..ef098d5 100644
--- a/ash/strings/ash_strings_te.xtb
+++ b/ash/strings/ash_strings_te.xtb
@@ -27,6 +27,7 @@
 <translation id="121097972571826261">ఒక పదం ముందుకు</translation>
 <translation id="1225748608451425081">తెలిసిన సమస్య కారణంగా మీ Chromebook లాక్ చేయబడింది. మీరు ఈ సమయం తర్వాత సైన్ ఇన్ చేయగలరు: <ph name="TIME_LEFT" />.</translation>
 <translation id="1229194443904279055">ఎంచుకోవడం ఆపివేయండి</translation>
+<translation id="1239161794459865856"><ph name="FEATURE_NAME" /> కనెక్ట్ చేయబడింది.</translation>
 <translation id="1247372569136754018">మైక్రోఫోన్ (అంతర్గతం)</translation>
 <translation id="1252999807265626933"><ph name="POWER_SOURCE" /> నుండి ఛార్జ్ అవుతోంది</translation>
 <translation id="1255033239764210633">వాతావరణం ఎలా ఉంది?</translation>
@@ -74,6 +75,7 @@
 <translation id="1654477262762802994">వాయిస్ ప్రశ్నను ప్రారంభించు</translation>
 <translation id="1667964833127753507">'న్యూట్రల్ రంగు మోడ్'లో వాల్‌పేపర్ నుండి సంగ్రహించిన రంగులు ఉపయోగించబడవు, వాటి స్థానంలో తటస్థంగా కనిపించే పలుచని లేదా ముదురు రంగులు ఉపయోగించబడతాయి.</translation>
 <translation id="1677472565718498478"><ph name="TIME" /> మిగిలి ఉంది</translation>
+<translation id="1677507110654891115"><ph name="FEATURE_NAME" /> కనెక్ట్ కాలేదు.</translation>
 <translation id="1698080062160024910"><ph name="TOTAL_TIME" /> టైమర్ · <ph name="LABEL" /></translation>
 <translation id="1698760176351776263">IPv6 చిరునామా: <ph name="ADDRESS" /></translation>
 <translation id="1708345662127501511">డెస్క్: <ph name="DESK_NAME" /></translation>
@@ -145,6 +147,7 @@
 <translation id="2369165858548251131">చైనీస్‌లో "హలో"</translation>
 <translation id="2390318262976603432">లొకేల్ సెట్టింగ్‌లు</translation>
 <translation id="2391579633712104609">180°</translation>
+<translation id="2405664212338326887">కనెక్ట్ చేయబడలేదు</translation>
 <translation id="2408955596600435184">మీ PINని నమోదు చేయండి</translation>
 <translation id="2412593942846481727">అప్‌డేట్ అందుబాటులో ఉంది</translation>
 <translation id="2413728805700750528"><ph name="DISPLAY_NAME" /> ఒక నిర్వహిత సెషన్, ఇది <ph name="DOMAIN" /> ద్వారా నిర్వహించబడుతుంది</translation>
@@ -243,6 +246,7 @@
 <translation id="3364721542077212959">స్టైలస్ సాధనాలు</translation>
 <translation id="3368922792935385530">కనెక్ట్ అయింది</translation>
 <translation id="3371140690572404006">USB-C పరికరం (కుడివైపు ముందు పోర్ట్)</translation>
+<translation id="3375634426936648815">కనెక్ట్ చేయబడింది</translation>
 <translation id="3386978599540877378">పూర్తి స్క్రీన్ మాగ్నిఫైయర్</translation>
 <translation id="3400357268283240774">అదనపు సెట్టింగ్‌లు</translation>
 <translation id="3410336247007142655">ముదురు రంగు రూపం సెట్టింగ్‌లను చూపించు</translation>
@@ -323,6 +327,7 @@
 <translation id="4181841719683918333">భాషలు</translation>
 <translation id="4195877955194704651">ఆటోమేటిక్ క్లిక్‌ల బటన్</translation>
 <translation id="4197790712631116042">ఆఫ్</translation>
+<translation id="4201033867194214117"><ph name="FEATURE_NAME" /> అందుబాటులో లేదు.</translation>
 <translation id="4212246570487010370">బ్రౌజింగ్‌ను కొనసాగించండి</translation>
 <translation id="4212472694152630271">పిన్‌కి స్విచ్ చేయి</translation>
 <translation id="4215497585250573029">VPN సెట్టింగ్‌లు</translation>
@@ -334,6 +339,7 @@
 <translation id="4285498937028063278">అన్‌పిన్ చేయి</translation>
 <translation id="4294319844246081198">శుభోదయం <ph name="GIVEN_NAME" />,</translation>
 <translation id="4296136865091727875">మొత్తం <ph name="COUNT" /> నోటిఫికేషన్‌లను క్లియర్ చేస్తుంది</translation>
+<translation id="4302592941791324970">అందుబాటులో లేదు</translation>
 <translation id="4303223480529385476">స్టేటస్ ప్రాంతాన్ని విస్తరించండి</translation>
 <translation id="4321179778687042513">ctrl</translation>
 <translation id="4321776623976362024">మీరు అధిక కాంట్రాస్ట్‌ కోసం కీబోర్డ్ షార్ట్‌కట్‌ను నొక్కారు. మీరు దీన్ని ఆన్ చేయాలనుకుంటున్నారా?</translation>
@@ -427,6 +433,7 @@
 <translation id="5302048478445481009">భాష</translation>
 <translation id="5313326810920013265">బ్లూటూత్ సెట్టింగ్‌లు</translation>
 <translation id="5314219114274263156">స్క్రీన్ రికార్డింగ్ తీసుకోబడింది</translation>
+<translation id="5329548388331921293">కనెక్ట్ అవుతోంది...</translation>
 <translation id="5331975486040154427">USB-C పరికరం (ఎడమవైపు వెనుక పోర్ట్)</translation>
 <translation id="5352250171825660495">ముదురు రంగు రూపం ఆన్‌లో ఉంది</translation>
 <translation id="5379115545237091094">అనేకసార్లు ప్రయత్నించారు</translation>
@@ -440,6 +447,7 @@
 <translation id="5465662442746197494">సహాయం కావాలా?</translation>
 <translation id="5496819745535887422">మీ నిర్వాహకుడు మీ పరికరాన్ని ఉపసంహరిస్తున్నారు. పరికరం మళ్లీ ప్రారంభించినప్పుడు మొత్తం డేటా తొలగించబడుతుంది.</translation>
 <translation id="5519195206574732858">LTE</translation>
+<translation id="5523434445161341166"><ph name="FEATURE_NAME" /> కనెక్ట్ అవుతోంది.</translation>
 <translation id="553675580533261935">సెషన్ నుండి నిష్క్రమిస్తోంది</translation>
 <translation id="5537725057119320332">Cast</translation>
 <translation id="5548285847212963613">"<ph name="EXTENSION_NAME" />" ఎక్స్‌టెన్షన్ ఈ నెట్‌వర్క్‌కు కనెక్ట్ చేయడంలో సహాయపడగలదు.</translation>
diff --git a/ash/strings/ash_strings_th.xtb b/ash/strings/ash_strings_th.xtb
index 50b4c92..11e36667 100644
--- a/ash/strings/ash_strings_th.xtb
+++ b/ash/strings/ash_strings_th.xtb
@@ -27,6 +27,7 @@
 <translation id="121097972571826261">ไปข้างหน้าทีละคำ</translation>
 <translation id="1225748608451425081">Chromebook ของคุณถูกล็อกเนื่องจากปัญหาที่ทราบแล้ว คุณจะลงชื่อเข้าใช้ได้ในอีก <ph name="TIME_LEFT" /></translation>
 <translation id="1229194443904279055">หยุดเลือก</translation>
+<translation id="1239161794459865856"><ph name="FEATURE_NAME" /> เชื่อมต่อแล้ว</translation>
 <translation id="1247372569136754018">ไมโครโฟน (ภายใน)</translation>
 <translation id="1252999807265626933">กำลังชาร์จจาก<ph name="POWER_SOURCE" /></translation>
 <translation id="1255033239764210633">วันนี้อากาศเป็นยังไงบ้าง</translation>
@@ -74,6 +75,7 @@
 <translation id="1654477262762802994">เริ่มการค้นหาด้วยเสียง</translation>
 <translation id="1667964833127753507">โหมดสีปานกลางไม่ได้ใช้สีที่ดึงมาจากวอลเปเปอร์ แต่จะใช้ชุดโทนสีที่สว่างหรือเข้มปานกลางแทนสีเหล่านั้น</translation>
 <translation id="1677472565718498478">ใช้ได้อีก <ph name="TIME" /></translation>
+<translation id="1677507110654891115"><ph name="FEATURE_NAME" /> ไม่เชื่อมต่อ</translation>
 <translation id="1698080062160024910">ตัวจับเวลา <ph name="TOTAL_TIME" /> · <ph name="LABEL" /></translation>
 <translation id="1698760176351776263">ที่อยู่ IPv6: <ph name="ADDRESS" /></translation>
 <translation id="1708345662127501511">โต๊ะ: <ph name="DESK_NAME" /></translation>
@@ -145,6 +147,7 @@
 <translation id="2369165858548251131">"สวัสดี" ในภาษาจีน</translation>
 <translation id="2390318262976603432">การตั้งค่าภาษา</translation>
 <translation id="2391579633712104609">180°</translation>
+<translation id="2405664212338326887">ไม่เชื่อมต่อ</translation>
 <translation id="2408955596600435184">ป้อน PIN ของคุณ</translation>
 <translation id="2412593942846481727">มีเวอร์ชันอัปเดต</translation>
 <translation id="2413728805700750528"><ph name="DISPLAY_NAME" /> เป็นเซสชันที่มีการจัดการซึ่งจัดการโดย <ph name="DOMAIN" /></translation>
@@ -243,6 +246,7 @@
 <translation id="3364721542077212959">เครื่องมือสไตลัส</translation>
 <translation id="3368922792935385530">เชื่อมต่อแล้ว</translation>
 <translation id="3371140690572404006">อุปกรณ์ USB-C (พอร์ตด้านหน้าขวา)</translation>
+<translation id="3375634426936648815">เชื่อมต่อแล้ว</translation>
 <translation id="3386978599540877378">แว่นขยายแบบเต็มหน้าจอ</translation>
 <translation id="3400357268283240774">การตั้งค่าเพิ่มเติม</translation>
 <translation id="3410336247007142655">แสดงการตั้งค่าธีมมืด</translation>
@@ -300,6 +304,7 @@
 <translation id="3943857333388298514">วาง</translation>
 <translation id="394485226368336402">การตั้งค่าเสียง</translation>
 <translation id="3962859241508114581">แทร็กก่อนหน้า</translation>
+<translation id="3969043077941541451">ปิด</translation>
 <translation id="397105322502079400">กำลังคำนวณ...</translation>
 <translation id="3977512764614765090">แบตเตอรี่เหลือ <ph name="PERCENTAGE" />% และกำลังชาร์จ</translation>
 <translation id="3995138139523574647">อุปกรณ์ USB-C (พอร์ตด้านหลังขวา)</translation>
@@ -310,6 +315,7 @@
 <translation id="4032485810211612751"><ph name="HOURS" />:<ph name="MINUTES" />:<ph name="SECONDS" /></translation>
 <translation id="4042660782729322247">คุณกำลังแชร์หน้าจอ</translation>
 <translation id="4065525899979931964">{NUM_APPS,plural, =1{ปิดไว้ 1 แอป}other{ปิดไว้ # แอป}}</translation>
+<translation id="4066027111132117168">เปิดอยู่ <ph name="REMAINING_TIME" /></translation>
 <translation id="4072264167173457037">สัญญาณแรงปานกลาง</translation>
 <translation id="4112140312785995938">ย้อนกลับ</translation>
 <translation id="4114315158543974537">เปิด Phone Hub</translation>
@@ -320,6 +326,7 @@
 <translation id="4181841719683918333">ภาษา</translation>
 <translation id="4195877955194704651">ปุ่มคลิกอัตโนมัติ</translation>
 <translation id="4197790712631116042">ปิด</translation>
+<translation id="4201033867194214117"><ph name="FEATURE_NAME" /> ไม่พร้อมใช้งาน</translation>
 <translation id="4212246570487010370">ท่องเว็บต่อไป</translation>
 <translation id="4212472694152630271">เปลี่ยนไปใช้ PIN</translation>
 <translation id="4215497585250573029">การตั้งค่า VPN</translation>
@@ -331,6 +338,7 @@
 <translation id="4285498937028063278">เลิกตรึง</translation>
 <translation id="4294319844246081198">สวัสดียามเช้า <ph name="GIVEN_NAME" /></translation>
 <translation id="4296136865091727875">ล้างการแจ้งเตือนทั้งหมด <ph name="COUNT" /> รายการ</translation>
+<translation id="4302592941791324970">ไม่พร้อมใช้งาน</translation>
 <translation id="4303223480529385476">ขยายพื้นที่แสดงสถานะ</translation>
 <translation id="4321179778687042513">ctrl</translation>
 <translation id="4321776623976362024">คุณกดแป้นพิมพ์ลัดสำหรับคอนทราสต์สูง จะเปิดคอนทราสต์สูงไหม</translation>
@@ -424,6 +432,7 @@
 <translation id="5302048478445481009">ภาษา</translation>
 <translation id="5313326810920013265">การตั้งค่าบลูทูธ</translation>
 <translation id="5314219114274263156">อัดหน้าจอแล้ว</translation>
+<translation id="5329548388331921293">กำลังเชื่อมต่อ...</translation>
 <translation id="5331975486040154427">อุปกรณ์ USB-C (พอร์ตด้านหลังซ้าย)</translation>
 <translation id="5352250171825660495">ธีมมืดเปิดอยู่</translation>
 <translation id="5379115545237091094">ลองหลายครั้งเกินไป</translation>
@@ -437,6 +446,7 @@
 <translation id="5465662442746197494">หากต้องการความช่วยเหลือ</translation>
 <translation id="5496819745535887422">ผู้ดูแลระบบกำลังคืนค่าสถานะของอุปกรณ์ ระบบจะลบข้อมูลทั้งหมดเมื่อรีสตาร์ทอุปกรณ์</translation>
 <translation id="5519195206574732858">LTE</translation>
+<translation id="5523434445161341166"><ph name="FEATURE_NAME" /> กำลังเชื่อมต่อ</translation>
 <translation id="553675580533261935">กำลังออกจากเซสชัน</translation>
 <translation id="5537725057119320332">แคสต์</translation>
 <translation id="5548285847212963613">ส่วนขยาย "<ph name="EXTENSION_NAME" />" สามารถช่วยในการเชื่อมต่อเครือข่ายนี้</translation>
@@ -564,6 +574,7 @@
 <translation id="6803622936009808957">ไม่สามารถแสดงผลคู่ขนานได้เนื่องจากไม่พบความละเอียดที่สนับสนุน เข้าสู่เดสก์ท็อปแบบขยายแทน</translation>
 <translation id="6818242057446442178">ถอยกลับทีละคำ</translation>
 <translation id="6820676911989879663">พักสายตาหน่อย</translation>
+<translation id="6857725247182211756"><ph name="SECONDS" /> วินาที</translation>
 <translation id="6857811139397017780">เปิดใช้งาน <ph name="NETWORKSERVICE" /></translation>
 <translation id="685782768769951078">{NUM_DIGITS,plural, =1{เหลือตัวเลขอีก 1 หลัก}other{เหลือตัวเลขอีก # หลัก}}</translation>
 <translation id="6878400149835617132">ทางลัดปิดอยู่</translation>
@@ -632,6 +643,7 @@
 <translation id="7600875258240007829">ดูการแจ้งเตือนทั้งหมด</translation>
 <translation id="7618774594543487847">ปานกลาง</translation>
 <translation id="7624117708979618027"><ph name="TEMPERATURE_F" />° F</translation>
+<translation id="7633755430369750696">แสดงการตั้งค่าการแชร์ใกล้เคียง</translation>
 <translation id="7642647758716480637">เปิดการตั้งค่าของ <ph name="NETWORK_NAME" /> <ph name="CONNECTION_STATUS" /></translation>
 <translation id="7645176681409127223"><ph name="USER_NAME" /> (เจ้าของ)</translation>
 <translation id="7647488630410863958">ปลดล็อกอุปกรณ์เพื่อดูการแจ้งเตือน</translation>
@@ -647,6 +659,7 @@
 <translation id="7780159184141939021">หมุนหน้าจอ</translation>
 <translation id="7796353162336583443">แตะปุ่มสไตลัสในชั้นวางเพื่อจดโน้ต บันทึกภาพหน้าจอ ตลอดจนใช้ Google Assistant ตัวชี้เลเซอร์ หรือแว่นขยาย</translation>
 <translation id="7798302898096527229">กด Search หรือ Shift เพื่อยกเลิก</translation>
+<translation id="781126011916719498">เข้าถึงไฟล์สำคัญอย่างรวดเร็ว คลิกขวาหรือแตะไฟล์ค้างไว้เพื่อตรึง</translation>
 <translation id="7814236020522506259"><ph name="HOUR" /> กับ <ph name="MINUTE" /></translation>
 <translation id="7829386189513694949">สัญญาณแรง</translation>
 <translation id="7837740436429729974">หมดเวลา</translation>
@@ -790,6 +803,7 @@
 <translation id="9089416786594320554">วิธีป้อนข้อมูล</translation>
 <translation id="9091626656156419976">นำจอแสดงผล <ph name="DISPLAY_NAME" /> ออกแล้ว</translation>
 <translation id="9151726767154816831">รีสตาร์ทและ Powerwash เพื่ออัปเดต</translation>
+<translation id="9166331175924255663">เปิด/ปิดระดับการเข้าถึงสูงของการแชร์ใกล้เคียง</translation>
 <translation id="9168436347345867845">ข้ามไปก่อน</translation>
 <translation id="9179259655489829027">ฟีเจอร์นี้ช่วยให้เข้าถึงผู้ใช้ที่ลงชื่อเข้าใช้แล้วได้อย่างรวดเร็วโดยไม่ต้องใช้รหัสผ่าน ใช้ฟีเจอร์นี้กับบัญชีที่คุณเชื่อถือเท่านั้น</translation>
 <translation id="9183456764293710005">แว่นขยายทั้งหน้าจอ</translation>
diff --git a/ash/strings/ash_strings_ur.xtb b/ash/strings/ash_strings_ur.xtb
index 9149e2d..e387191 100644
--- a/ash/strings/ash_strings_ur.xtb
+++ b/ash/strings/ash_strings_ur.xtb
@@ -300,6 +300,7 @@
 <translation id="3943857333388298514">پیسٹ کریں</translation>
 <translation id="394485226368336402">آڈیو کی ترتیبات</translation>
 <translation id="3962859241508114581">پچھلا ٹریک</translation>
+<translation id="3969043077941541451">آف</translation>
 <translation id="397105322502079400">حساب لگایا جا رہا ہے…</translation>
 <translation id="3977512764614765090">‏بیٹری ‎<ph name="PERCENTAGE" />%‎ ہے اور چارج ہو رہی ہے۔</translation>
 <translation id="3995138139523574647">‏USB-C آلہ (دائیں طرف کا پچھلا پورٹ)</translation>
@@ -310,6 +311,7 @@
 <translation id="4032485810211612751"><ph name="HOURS" />:<ph name="MINUTES" />:<ph name="SECONDS" /></translation>
 <translation id="4042660782729322247">آپ اپنی اسکرین کا اشتراک کر رہے ہیں</translation>
 <translation id="4065525899979931964">{NUM_APPS,plural, =1{ایک ایپ کیلئے آف ہے}other{# ایپس کیلئے آف ہے}}</translation>
+<translation id="4066027111132117168"><ph name="REMAINING_TIME" />، آن</translation>
 <translation id="4072264167173457037">اوسط سگنل</translation>
 <translation id="4112140312785995938">پیچھے کریں</translation>
 <translation id="4114315158543974537">‏Phone Hub آن کریں</translation>
@@ -564,6 +566,7 @@
 <translation id="6803622936009808957">ڈسپلیز کی عکاسی نہیں کر سکا کیونکہ کوئی تعاون یافتہ ریزولیوشنز نہیں ملے۔اس کی بجائے توسیع کردہ ڈیسک ٹاپ داخل کیا گیا۔</translation>
 <translation id="6818242057446442178">ایک لفظ پیچھے جائیں</translation>
 <translation id="6820676911989879663">تھوڑا وقفہ لیں!</translation>
+<translation id="6857725247182211756"><ph name="SECONDS" /> سیکنڈ</translation>
 <translation id="6857811139397017780"><ph name="NETWORKSERVICE" /> فعال کریں</translation>
 <translation id="685782768769951078">{NUM_DIGITS,plural, =1{ایک ہندسہ باقی ہے}other{# ہندسے باقی ہیں}}</translation>
 <translation id="6878400149835617132">شارٹ کٹ آف ہے</translation>
@@ -632,6 +635,7 @@
 <translation id="7600875258240007829">تمام اطلاعات دیکھیں</translation>
 <translation id="7618774594543487847">نیوٹرل</translation>
 <translation id="7624117708979618027">F °<ph name="TEMPERATURE_F" /></translation>
+<translation id="7633755430369750696">قریبی اشتراک کی ترتیبات کو دکھائیں۔</translation>
 <translation id="7642647758716480637"><ph name="NETWORK_NAME" />، <ph name="CONNECTION_STATUS" /> کے لیے ترتیبات کھولیں</translation>
 <translation id="7645176681409127223"><ph name="USER_NAME" /> (مالک)</translation>
 <translation id="7647488630410863958">اپنی اطلاعات دیکھنے کیلئے آلہ کو غیر مقفل کریں</translation>
@@ -647,6 +651,7 @@
 <translation id="7780159184141939021">اسکرین کو گھمائیں</translation>
 <translation id="7796353162336583443">‏نوٹ لینے، اسکرین شاٹ لینے، Google اسسٹنٹ، لیزر پوائنٹر یا میگنیفائنگ گلاس استعمال کرنے کے لیے شیلف پر موجود اسٹائلس بٹن کو تھپتھپائیں۔</translation>
 <translation id="7798302898096527229">‏منسوخ کرنے کے لیے Search یا Shift دبائیں۔</translation>
+<translation id="781126011916719498">اپنی اہم فائلز تک فوری طور پر رسائی حاصل کریں۔ فائل کو اس میں پن کرنے کیلئے دائیں طرف کلک یا ٹچ کریں اور دبائے رکھیں۔</translation>
 <translation id="7814236020522506259"><ph name="HOUR" /> اور <ph name="MINUTE" /></translation>
 <translation id="7829386189513694949">مضبوط سگنل</translation>
 <translation id="7837740436429729974">وقت ختم ہو گیا</translation>
@@ -790,6 +795,7 @@
 <translation id="9089416786594320554">اندراج کے طریقے</translation>
 <translation id="9091626656156419976">ڈسپلے <ph name="DISPLAY_NAME" /> کو ہٹا دیا گیا</translation>
 <translation id="9151726767154816831">اپ ڈیٹ کرنے کیلئے ری اسٹارٹ اور پاور واش کریں</translation>
+<translation id="9166331175924255663">قریبی آلات کے ساتھ اشتراک اعلی مرئیت ٹوگل کریں۔</translation>
 <translation id="9168436347345867845">اسے بعد میں کریں</translation>
 <translation id="9179259655489829027">یہ خصوصیت آپ کو کسی بھی سائن ان کردہ صارف تک پاس ورڈ کا تقاضہ کیے بغیر تیزی سے رسائی حاصل کرنے کی اجازت دیتی ہے۔ یہ خصوصیت صرف اپنے معتبر اکاؤنٹس کے ساتھ استعمال کریں۔</translation>
 <translation id="9183456764293710005">فُل اسکرین میگنیفائر</translation>
diff --git a/ash/style/default_color_constants.h b/ash/style/default_color_constants.h
index 2df17ce..ca56f1f 100644
--- a/ash/style/default_color_constants.h
+++ b/ash/style/default_color_constants.h
@@ -15,4 +15,9 @@
 // Colors for power button menu.
 constexpr SkColor kPowerButtonMenuFullscreenShieldColor = SK_ColorBLACK;
 
+// Login shelf button color constants
+constexpr SkColor kLoginShelfButtonLabelColor = gfx::kGoogleGrey100;
+constexpr SkColor kLoginShelfButtonIconColor = SkColorSetRGB(0xEB, 0xEA, 0xED);
+constexpr SkColor kLoginBackgroundBaseColor = SK_ColorBLACK;
+
 #endif  // ASH_STYLE_DEFAULT_COLOR_CONSTANTS_H_
diff --git a/ash/style/default_colors.cc b/ash/style/default_colors.cc
index 9a80af9..ec8d143 100644
--- a/ash/style/default_colors.cc
+++ b/ash/style/default_colors.cc
@@ -41,4 +41,10 @@
   return AshColorProvider::Get()->GetContentLayerColor(type);
 }
 
+SkColor DeprecatedGetLoginBackgroundBaseColor(SkColor default_color) {
+  if (!features::IsDarkLightModeEnabled())
+    return default_color;
+  return AshColorProvider::Get()->GetLoginBackgroundBaseColor();
+}
+
 }  // namespace ash
diff --git a/ash/style/default_colors.h b/ash/style/default_colors.h
index 5d8eca0..c83309c6 100644
--- a/ash/style/default_colors.h
+++ b/ash/style/default_colors.h
@@ -24,6 +24,8 @@
     SkColor default_color);
 SkColor DeprecatedGetContentLayerColor(AshColorProvider::ContentLayerType type,
                                        SkColor default_color);
+SkColor DeprecatedGetLoginBackgroundBaseColor(SkColor default_color);
+
 }  // namespace ash
 
 #endif  // ASH_STYLE_DEFAULT_COLORS_H_
diff --git a/ash/system/phonehub/enable_hotspot_quick_action_controller.cc b/ash/system/phonehub/enable_hotspot_quick_action_controller.cc
index 20726db..6f7b4e0 100644
--- a/ash/system/phonehub/enable_hotspot_quick_action_controller.cc
+++ b/ash/system/phonehub/enable_hotspot_quick_action_controller.cc
@@ -39,8 +39,6 @@
 void EnableHotspotQuickActionController::OnButtonPressed(bool is_now_enabled) {
   is_now_enabled ? tether_controller_->Disconnect()
                  : tether_controller_->AttemptConnection();
-  // TODO(leandre): Add a timer to switch back to off state after connecting
-  // failed.
 }
 
 void EnableHotspotQuickActionController::OnTetherStatusChanged() {
diff --git a/ash/system/phonehub/locate_phone_quick_action_controller.cc b/ash/system/phonehub/locate_phone_quick_action_controller.cc
index a8b9401..b4c1509 100644
--- a/ash/system/phonehub/locate_phone_quick_action_controller.cc
+++ b/ash/system/phonehub/locate_phone_quick_action_controller.cc
@@ -7,10 +7,20 @@
 #include "ash/resources/vector_icons/vector_icons.h"
 #include "ash/strings/grit/ash_strings.h"
 #include "ash/system/phonehub/quick_action_item.h"
+#include "base/timer/timer.h"
 #include "ui/base/l10n/l10n_util.h"
 
 namespace ash {
 
+namespace {
+
+// Time to wait until we check the state of the phone to prevent showing wrong
+// state
+constexpr base::TimeDelta kWaitForRequestTimeout =
+    base::TimeDelta::FromSeconds(5);
+
+}  // namespace
+
 using Status = chromeos::phonehub::FindMyDeviceController::Status;
 
 LocatePhoneQuickActionController::LocatePhoneQuickActionController(
@@ -33,26 +43,42 @@
 }
 
 void LocatePhoneQuickActionController::OnButtonPressed(bool is_now_enabled) {
-  SetState(ActionState::kConnecting);
+  requested_state_ = is_now_enabled ? ActionState::kOff : ActionState::kOn;
+  SetItemState(requested_state_.value());
+
+  check_requested_state_timer_ = std::make_unique<base::OneShotTimer>();
+  check_requested_state_timer_->Start(
+      FROM_HERE, kWaitForRequestTimeout,
+      base::BindOnce(&LocatePhoneQuickActionController::CheckRequestedState,
+                     base::Unretained(this)));
+
   find_my_device_controller_->RequestNewPhoneRingingState(!is_now_enabled);
 }
 
 void LocatePhoneQuickActionController::OnPhoneRingingStateChanged() {
   switch (find_my_device_controller_->GetPhoneRingingStatus()) {
     case Status::kRingingOff:
-      SetState(ActionState::kOff);
+      state_ = ActionState::kOff;
       break;
     case Status::kRingingOn:
-      SetState(ActionState::kOn);
+      state_ = ActionState::kOn;
       break;
     case Status::kRingingNotAvailable:
       item_->SetEnabled(false);
       return;
   }
+  SetItemState(state_);
   item_->SetEnabled(true);
+
+  // If |requested_state_| correctly resembles the current state, reset it and
+  // the timer.
+  if (state_ == requested_state_) {
+    check_requested_state_timer_.reset();
+    requested_state_.reset();
+  }
 }
 
-void LocatePhoneQuickActionController::SetState(ActionState state) {
+void LocatePhoneQuickActionController::SetItemState(ActionState state) {
   bool icon_enabled;
   int state_text_id;
   int sub_label_text;
@@ -62,11 +88,6 @@
       state_text_id = IDS_ASH_PHONE_HUB_QUICK_ACTIONS_DISABLED_STATE_TOOLTIP;
       sub_label_text = IDS_ASH_PHONE_HUB_QUICK_ACTIONS_OFF_STATE;
       break;
-    case ActionState::kConnecting:
-      icon_enabled = true;
-      state_text_id = IDS_ASH_PHONE_HUB_QUICK_ACTIONS_CONNECTING_STATE_TOOLTIP;
-      sub_label_text = IDS_ASH_PHONE_HUB_QUICK_ACTIONS_CONNECTING_STATE;
-      break;
     case ActionState::kOn:
       icon_enabled = true;
       state_text_id = IDS_ASH_PHONE_HUB_QUICK_ACTIONS_ENABLED_STATE_TOOLTIP;
@@ -83,4 +104,14 @@
                                  item_->GetItemLabel(), tooltip_state));
 }
 
+void LocatePhoneQuickActionController::CheckRequestedState() {
+  // If the current state is different from the requested state, it means that
+  // we fail to change the state, so switch back to the original one.
+  if (state_ != requested_state_)
+    SetItemState(state_);
+
+  check_requested_state_timer_.reset();
+  requested_state_.reset();
+}
+
 }  // namespace ash
diff --git a/ash/system/phonehub/locate_phone_quick_action_controller.h b/ash/system/phonehub/locate_phone_quick_action_controller.h
index 0fb058c..52b72b6 100644
--- a/ash/system/phonehub/locate_phone_quick_action_controller.h
+++ b/ash/system/phonehub/locate_phone_quick_action_controller.h
@@ -8,6 +8,10 @@
 #include "ash/system/phonehub/quick_action_controller_base.h"
 #include "chromeos/components/phonehub/find_my_device_controller.h"
 
+namespace base {
+class OneShotTimer;
+}  // namespace base
+
 namespace ash {
 
 // Controller of a quick action item that toggles Locate phone mode.
@@ -32,14 +36,29 @@
  private:
   // All the possible states that the locate phone button can be viewed. Each
   // state has a corresponding icon, labels and tooltip view.
-  enum class ActionState { kOff, kConnecting, kOn };
+  enum class ActionState { kOff, kOn };
 
   // Set the item (including icon, label and tooltips) to a certain state.
-  void SetState(ActionState state);
+  void SetItemState(ActionState state);
+
+  // Check to see if the requested state is the same as the current state of the
+  // phone. Make changes to item's state if necessary.
+  void CheckRequestedState();
 
   chromeos::phonehub::FindMyDeviceController* find_my_device_controller_ =
       nullptr;
   QuickActionItem* item_ = nullptr;
+
+  // Keep track the current state of the item.
+  ActionState state_;
+
+  // State that user requests when clicking the button.
+  base::Optional<ActionState> requested_state_;
+
+  // Timer that fires to prevent showing wrong state in the item. It will check
+  // if the requested state is the same as the current state after the button is
+  // pressed for a certain time.
+  std::unique_ptr<base::OneShotTimer> check_requested_state_timer_;
 };
 
 }  // namespace ash
diff --git a/ash/system/phonehub/quick_actions_view_unittest.cc b/ash/system/phonehub/quick_actions_view_unittest.cc
index ed8f022..7baf51515 100644
--- a/ash/system/phonehub/quick_actions_view_unittest.cc
+++ b/ash/system/phonehub/quick_actions_view_unittest.cc
@@ -143,6 +143,23 @@
                                                             DummyEvent());
   EXPECT_EQ(FindMyDeviceController::Status::kRingingOff,
             find_my_device_controller()->GetPhoneRingingStatus());
+
+  // Test the error state.
+  find_my_device_controller()->SetShouldRequestFail(true);
+  actions_view()->locate_phone_for_testing()->ButtonPressed(nullptr,
+                                                            DummyEvent());
+
+  // In error state, find my device is disabled but the button should still be
+  // on after being pressed.
+  EXPECT_EQ(FindMyDeviceController::Status::kRingingOff,
+            find_my_device_controller()->GetPhoneRingingStatus());
+  EXPECT_TRUE(actions_view()->locate_phone_for_testing()->IsToggled());
+
+  // After a certain time, the button should be corrected to be off.
+  task_environment()->FastForwardBy(kWaitForRequestTimeout);
+  EXPECT_FALSE(actions_view()->locate_phone_for_testing()->IsToggled());
+
+  find_my_device_controller()->SetShouldRequestFail(false);
 }
 
 }  // namespace ash
diff --git a/ash/wallpaper/wallpaper_base_view.cc b/ash/wallpaper/wallpaper_base_view.cc
index 6c9145c..943645f 100644
--- a/ash/wallpaper/wallpaper_base_view.cc
+++ b/ash/wallpaper/wallpaper_base_view.cc
@@ -7,7 +7,8 @@
 #include "ash/public/cpp/login_constants.h"
 #include "ash/public/cpp/wallpaper_types.h"
 #include "ash/shell.h"
-#include "ash/style/ash_color_provider.h"
+#include "ash/style/default_color_constants.h"
+#include "ash/style/default_colors.h"
 #include "ash/wallpaper/wallpaper_controller_impl.h"
 #include "ash/wm/overview/overview_controller.h"
 #include "ash/wm/tablet_mode/tablet_mode_controller.h"
@@ -31,12 +32,14 @@
           color_utils::ColorProfile(color_utils::LumaRange::DARK,
                                     color_utils::SaturationRange::MUTED));
   if (darken_color == kInvalidWallpaperColor) {
-    darken_color = AshColorProvider::Get()->GetLoginBackgroundBaseColor();
+    darken_color =
+        DeprecatedGetLoginBackgroundBaseColor(kLoginBackgroundBaseColor);
   }
 
   darken_color = color_utils::GetResultingPaintColor(
-      SkColorSetA(AshColorProvider::Get()->GetLoginBackgroundBaseColor(),
-                  login_constants::kTranslucentColorDarkenAlpha),
+      SkColorSetA(
+          DeprecatedGetLoginBackgroundBaseColor(kLoginBackgroundBaseColor),
+          login_constants::kTranslucentColorDarkenAlpha),
       SkColorSetA(darken_color, 0xFF));
 
   int alpha = login_constants::kTranslucentAlpha;
diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn
index 9322b7ce..e3220e3 100644
--- a/build/config/compiler/BUILD.gn
+++ b/build/config/compiler/BUILD.gn
@@ -2,6 +2,7 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
+import("//build/buildflag_header.gni")
 import("//build/config/android/config.gni")
 import("//build/config/c++/c++.gni")
 import("//build/config/chrome_build.gni")
@@ -2523,3 +2524,9 @@
     cflags += [ "-ftrivial-auto-var-init=pattern" ]
   }
 }
+
+buildflag_header("compiler_buildflags") {
+  header = "compiler_buildflags.h"
+
+  flags = [ "CLANG_PGO=$chrome_pgo_phase" ]
+}
diff --git a/build/fuchsia/device_target.py b/build/fuchsia/device_target.py
index 135770cd..f68dbff1 100644
--- a/build/fuchsia/device_target.py
+++ b/build/fuchsia/device_target.py
@@ -28,8 +28,6 @@
 # Number of failed connection attempts before redirecting system logs to stdout.
 CONNECT_RETRY_COUNT_BEFORE_LOGGING = 10
 
-TARGET_HASH_FILE_PATH = '/data/.hash'
-
 # Number of seconds to wait when querying a list of all devices over mDNS.
 _LIST_DEVICES_TIMEOUT_SECS = 3
 
@@ -149,20 +147,6 @@
         "match. If 'update', then the target device will automatically "
         "be repaved. If 'ignore', then the OS version won\'t be checked.")
 
-  def _SDKHashMatches(self):
-    """Checks if /data/.hash on the device matches SDK_ROOT/.hash.
-
-    Returns True if the files are identical, or False otherwise.
-    """
-    with tempfile.NamedTemporaryFile() as tmp:
-      try:
-        self.GetFile(TARGET_HASH_FILE_PATH, tmp.name)
-      except subprocess.CalledProcessError:
-        # If the file is unretrievable for whatever reason, assume mismatch.
-        return False
-
-      return filecmp.cmp(tmp.name, os.path.join(SDK_ROOT, '.hash'), False)
-
   def _ProvisionDeviceIfNecessary(self):
     if self._Discover():
       self._WaitUntilReady()
@@ -258,8 +242,8 @@
     # Repeatdly query mDNS until we find the device, or we hit the timeout of
     # DISCOVERY_TIMEOUT_SECS.
     logging.info('Waiting for device to join network.')
-    for _ in xrange(_BOOT_DISCOVERY_ATTEMPTS):
-      if self.__Discover():
+    for _ in xrange(BOOT_DISCOVERY_ATTEMPTS):
+      if self._Discover():
         break
 
     if not self._host:
@@ -268,9 +252,6 @@
 
     self._WaitUntilReady();
 
-    # Update the target's hash to match the current tree's.
-    self.PutFile(os.path.join(SDK_ROOT, '.hash'), TARGET_HASH_FILE_PATH)
-
   def _GetEndpoint(self):
     return (self._host, self._port)
 
diff --git a/build/fuchsia/generic_x64_target.py b/build/fuchsia/generic_x64_target.py
index 172d203..5fece12 100644
--- a/build/fuchsia/generic_x64_target.py
+++ b/build/fuchsia/generic_x64_target.py
@@ -29,6 +29,24 @@
   If --os-check=update is set, then the target device is repaved if the SDK
   version doesn't match."""
 
+  TARGET_HASH_FILE_PATH = '/data/.hash'
+
+  def _SDKHashMatches(self):
+    """Checks if /data/.hash on the device matches SDK_ROOT/.hash.
+
+    Returns True if the files are identical, or False otherwise.
+    """
+
+    with tempfile.NamedTemporaryFile() as tmp:
+      # TODO: Avoid using an exception for when file is unretrievable.
+      try:
+        self.GetFile(TARGET_HASH_FILE_PATH, tmp.name)
+      except subprocess.CalledProcessError:
+        # If the file is unretrievable for whatever reason, assume mismatch.
+        return False
+
+      return filecmp.cmp(tmp.name, os.path.join(SDK_ROOT, '.hash'), False)
+
   def _ProvisionDeviceIfNecessary(self):
     should_provision = False
 
@@ -51,6 +69,7 @@
 
   def _ProvisionDevice(self):
     """Pave a device with a generic image of Fuchsia."""
+
     bootserver_path = GetHostToolPathFromPlatform('bootserver')
     bootserver_command = [
         bootserver_path, '-1', '--fvm',
@@ -76,22 +95,5 @@
 
     self._ParseNodename(stdout)
 
-    # Start loglistener to save system logs.
-    if self._system_log_file:
-      self._StartLoglistener()
-
-    # Repeatdly query mDNS until we find the device, or we hit
-    # BOOT_DISCOVERY_ATTEMPTS
-    logging.info('Waiting for device to join network.')
-    for _ in xrange(device_target.BOOT_DISCOVERY_ATTEMPTS):
-      if self.__Discover():
-        break
-
-    if not self._host:
-      raise Exception("Device %s couldn't be discovered via mDNS." %
-                      self._node_name)
-
-    self._WaitUntilReady()
-
     # Update the target's hash to match the current tree's.
     self.PutFile(os.path.join(SDK_ROOT, '.hash'), TARGET_HASH_FILE_PATH)
diff --git a/build/fuchsia/target.py b/build/fuchsia/target.py
index ce89e81..c2a21e2 100644
--- a/build/fuchsia/target.py
+++ b/build/fuchsia/target.py
@@ -84,7 +84,7 @@
   def __enter__(self):
     return self
   def __exit__(self, exc_type, exc_val, exc_tb):
-    return self
+    return
 
   def Start(self):
     """Handles the instantiation and connection process for the Fuchsia
diff --git a/build/toolchain/get_concurrent_links.py b/build/toolchain/get_concurrent_links.py
index e895e13ba..56a0b93 100755
--- a/build/toolchain/get_concurrent_links.py
+++ b/build/toolchain/get_concurrent_links.py
@@ -62,31 +62,23 @@
   explanation.append(
       'per_link_gb={} reserve_gb={} secondary_per_link_gb={}'.format(
           per_link_gb, reserve_gb, secondary_per_link_gb))
-  # Inherit the legacy environment variable for people that have set it in GYP.
-  num_links = int(os.getenv('GYP_LINK_CONCURRENCY', 0))
-  if num_links:
-    reason = 'GYP_LINK_CONCURRENCY'
+  mem_total_gb = float(_GetTotalMemoryInBytes()) / 2**30
+  mem_total_gb = max(0, mem_total_gb - reserve_gb)
+  mem_cap = int(max(1, mem_total_gb / per_link_gb))
+
+  try:
+    cpu_cap = multiprocessing.cpu_count()
+  except:
+    cpu_cap = 1
+
+  explanation.append('cpu_count={} mem_total_gb={:.1f}GiB'.format(
+      cpu_cap, mem_total_gb))
+
+  num_links = min(mem_cap, cpu_cap)
+  if num_links == cpu_cap:
+    reason = 'cpu_count'
   else:
-    mem_total_gb = float(_GetTotalMemoryInBytes()) / 2**30
-    mem_total_gb = max(0, mem_total_gb - reserve_gb)
-    mem_cap = int(max(1, mem_total_gb / per_link_gb))
-    hard_cap = max(1, int(os.getenv('GYP_LINK_CONCURRENCY_MAX', 2**32)))
-
-    try:
-      cpu_cap = multiprocessing.cpu_count()
-    except:
-      cpu_cap = 1
-
-    explanation.append('cpu_count={} mem_total_gb={:.1f}GiB'.format(
-        cpu_cap, mem_total_gb))
-
-    num_links = min(mem_cap, hard_cap, cpu_cap)
-    if num_links == cpu_cap:
-      reason = 'cpu_count'
-    elif num_links == hard_cap:
-      reason = 'GYP_LINK_CONCURRENCY_MAX'
-    else:
-      reason = 'RAM'
+    reason = 'RAM'
 
   explanation.append('concurrent_links={}  (reason: {})'.format(
       num_links, reason))
diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java_sources.gni
index 8d234c6..6a8bec5c 100644
--- a/chrome/android/chrome_java_sources.gni
+++ b/chrome/android/chrome_java_sources.gni
@@ -1613,6 +1613,7 @@
   "java/src/org/chromium/chrome/browser/tracing/settings/DeveloperSettings.java",
   "java/src/org/chromium/chrome/browser/tracing/settings/TracingCategoriesSettings.java",
   "java/src/org/chromium/chrome/browser/tracing/settings/TracingSettings.java",
+  "java/src/org/chromium/chrome/browser/translate/TranslateAssistContent.java",
   "java/src/org/chromium/chrome/browser/translate/TranslateBridge.java",
   "java/src/org/chromium/chrome/browser/translate/TranslateIntentHandler.java",
   "java/src/org/chromium/chrome/browser/translate/TranslateUtils.java",
diff --git a/chrome/android/chrome_test_java_sources.gni b/chrome/android/chrome_test_java_sources.gni
index bf18b5a..98747d16 100644
--- a/chrome/android/chrome_test_java_sources.gni
+++ b/chrome/android/chrome_test_java_sources.gni
@@ -589,6 +589,7 @@
   "javatests/src/org/chromium/chrome/browser/toolbar/top/TabSwitcherActionMenuTest.java",
   "javatests/src/org/chromium/chrome/browser/toolbar/top/ToolbarPhoneTest.java",
   "javatests/src/org/chromium/chrome/browser/tracing/settings/TracingSettingsTest.java",
+  "javatests/src/org/chromium/chrome/browser/translate/TranslateAssistContentTest.java",
   "javatests/src/org/chromium/chrome/browser/translate/TranslateCompactInfoBarTest.java",
   "javatests/src/org/chromium/chrome/browser/translate/TranslateIntentTest.java",
   "javatests/src/org/chromium/chrome/browser/ui/system/StatusBarColorControllerTest.java",
diff --git a/chrome/android/features/cablev2_authenticator/java/src/org/chromium/chrome/browser/webauth/authenticator/CableAuthenticator.java b/chrome/android/features/cablev2_authenticator/java/src/org/chromium/chrome/browser/webauth/authenticator/CableAuthenticator.java
index 516bf56..c0df0289 100644
--- a/chrome/android/features/cablev2_authenticator/java/src/org/chromium/chrome/browser/webauth/authenticator/CableAuthenticator.java
+++ b/chrome/android/features/cablev2_authenticator/java/src/org/chromium/chrome/browser/webauth/authenticator/CableAuthenticator.java
@@ -438,7 +438,7 @@
      * Called to indicate that a QR code was scanned by the user.
      *
      * @param value contents of the QR code, which will be a valid caBLE
-     *              URL, i.e. "fido://c1/"...
+     *              URL, i.e. "fido://"...
      */
     public void onQRCode(String value) {
         mTaskRunner.postTask(() -> {
diff --git a/chrome/android/features/cablev2_authenticator/java/src/org/chromium/chrome/browser/webauth/authenticator/QRScanDialog.java b/chrome/android/features/cablev2_authenticator/java/src/org/chromium/chrome/browser/webauth/authenticator/QRScanDialog.java
index 7c4d5609..3d979fb 100644
--- a/chrome/android/features/cablev2_authenticator/java/src/org/chromium/chrome/browser/webauth/authenticator/QRScanDialog.java
+++ b/chrome/android/features/cablev2_authenticator/java/src/org/chromium/chrome/browser/webauth/authenticator/QRScanDialog.java
@@ -36,7 +36,7 @@
      * FIDO QR codes begin with this prefix. This class will ignore QR codes that don't match
      * this.
      */
-    public static final String FIDO_QR_PREFIX = "fido://c1/";
+    public static final String FIDO_QR_PREFIX = "fido://";
     private static final String TAG = "QRScanDialog";
     /**
      * Receives a single call containing the decoded QR value. It will
diff --git a/chrome/android/features/cablev2_authenticator/native/cablev2_authenticator_android.cc b/chrome/android/features/cablev2_authenticator/native/cablev2_authenticator_android.cc
index aacf657..23ba6ffa 100644
--- a/chrome/android/features/cablev2_authenticator/native/cablev2_authenticator_android.cc
+++ b/chrome/android/features/cablev2_authenticator/native/cablev2_authenticator_android.cc
@@ -4,7 +4,6 @@
 
 #include "base/android/jni_array.h"
 #include "base/android/jni_string.h"
-#include "base/base64url.h"
 #include "base/bind.h"
 #include "base/callback.h"
 #include "base/memory/weak_ptr.h"
@@ -19,8 +18,6 @@
 #include "device/fido/cable/v2_handshake.h"
 #include "device/fido/cable/v2_registration.h"
 #include "device/fido/fido_parsing_utils.h"
-#include "third_party/boringssl/src/include/openssl/ec_key.h"
-#include "third_party/boringssl/src/include/openssl/obj.h"
 
 // These "headers" actually contain several function definitions and thus can
 // only be included once across Chromium.
@@ -75,79 +72,6 @@
   return std::make_tuple(root_secret, std::move(*bytes));
 }
 
-// DecodeQR represents the values in a scanned QR code.
-struct DecodedQR {
-  std::array<uint8_t, 16> secret;
-  std::array<uint8_t, device::kP256X962Length> peer_identity;
-};
-
-// DecompressPublicKey converts a compressed public key (from a scanned QR
-// code) into a standard, uncompressed one.
-base::Optional<std::array<uint8_t, device::kP256X962Length>>
-DecompressPublicKey(
-    base::span<const uint8_t, device::cablev2::kCompressedPublicKeySize>
-        compressed_public_key) {
-  bssl::UniquePtr<EC_GROUP> p256(
-      EC_GROUP_new_by_curve_name(NID_X9_62_prime256v1));
-  bssl::UniquePtr<EC_POINT> point(EC_POINT_new(p256.get()));
-  if (!EC_POINT_oct2point(p256.get(), point.get(), compressed_public_key.data(),
-                          compressed_public_key.size(), /*ctx=*/nullptr)) {
-    return base::nullopt;
-  }
-  std::array<uint8_t, device::kP256X962Length> ret;
-  CHECK_EQ(
-      ret.size(),
-      EC_POINT_point2oct(p256.get(), point.get(), POINT_CONVERSION_UNCOMPRESSED,
-                         ret.data(), ret.size(), /*ctx=*/nullptr));
-  return ret;
-}
-
-// DecodeQR converts the textual form of a scanned QR code into a |DecodedQR|.
-base::Optional<DecodedQR> DecodeQR(const std::string& qr_url) {
-  static const char kPrefix[] = "fido://c1/";
-  // The scanning code should have filtered out any unrelated URLs.
-  if (qr_url.find(kPrefix) != 0) {
-    NOTREACHED();
-    return base::nullopt;
-  }
-
-  base::StringPiece qr_url_base64(qr_url);
-  qr_url_base64 = qr_url_base64.substr(sizeof(kPrefix) - 1);
-  std::string qr_data_str;
-  if (!base::Base64UrlDecode(qr_url_base64,
-                             base::Base64UrlDecodePolicy::DISALLOW_PADDING,
-                             &qr_data_str) ||
-      qr_data_str.size() != device::cablev2::kQRDataSize) {
-    FIDO_LOG(ERROR) << "QR decoding failed: " << qr_url;
-    return base::nullopt;
-  }
-
-  base::span<const uint8_t, device::cablev2::kQRDataSize> qr_data(
-      reinterpret_cast<const uint8_t*>(qr_data_str.data()), qr_data_str.size());
-
-  static_assert(EXTENT(qr_data) == device::cablev2::kCompressedPublicKeySize +
-                                       device::cablev2::kQRSecretSize,
-                "");
-  base::span<const uint8_t, device::cablev2::kCompressedPublicKeySize>
-      compressed_public_key(qr_data.data(),
-                            device::cablev2::kCompressedPublicKeySize);
-  auto qr_secret = qr_data.subspan(device::cablev2::kCompressedPublicKeySize);
-
-  DecodedQR ret;
-  DCHECK_EQ(qr_secret.size(), ret.secret.size());
-  std::copy(qr_secret.begin(), qr_secret.end(), ret.secret.begin());
-
-  base::Optional<std::array<uint8_t, device::kP256X962Length>> peer_identity =
-      DecompressPublicKey(compressed_public_key);
-  if (!peer_identity) {
-    FIDO_LOG(ERROR) << "Invalid compressed public key in QR data";
-    return base::nullopt;
-  }
-
-  ret.peer_identity = *peer_identity;
-  return ret;
-}
-
 // JavaByteArrayToSpan returns a span that aliases |data|. Be aware that the
 // reference for |data| must outlive the span.
 base::span<const uint8_t> JavaByteArrayToSpan(
@@ -466,9 +390,11 @@
     const JavaParamRef<jstring>& authenticator_name,
     const JavaParamRef<jstring>& qr_url) {
   GlobalData& global_data = GetGlobalData();
-  base::Optional<DecodedQR> decoded_qr(
-      DecodeQR(ConvertJavaStringToUTF8(qr_url)));
+  const std::string& qr_string = ConvertJavaStringToUTF8(qr_url);
+  base::Optional<device::cablev2::qr::Components> decoded_qr(
+      device::cablev2::qr::Parse(qr_string));
   if (!decoded_qr) {
+    FIDO_LOG(ERROR) << "Failed to decode QR: " << qr_string;
     return false;
   }
 
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_bs.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_bs.xtb
index 776c643e..1552834 100644
--- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_bs.xtb
+++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_bs.xtb
@@ -21,7 +21,7 @@
 <translation id="7029809446516969842">Lozinke</translation>
 <translation id="7299100402441711551">Prikaz adresa</translation>
 <translation id="7494879913343971937">Prikaži lozinke</translation>
-<translation id="7594473730623999723">Prijeđite prstom da biste vidjeli više prijedloga</translation>
+<translation id="7594473730623999723">Prevucite da vidite više prijedloga</translation>
 <translation id="7658239707568436148">Otkaži</translation>
 <translation id="7992095260806105436">Koristite prijedlog Chromea za automatsko popunjavanje</translation>
 <translation id="8037472847879765671">Prikaz načina plaćanja</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_es-419.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_es-419.xtb
index b0336e1..d882732 100644
--- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_es-419.xtb
+++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_es-419.xtb
@@ -21,6 +21,7 @@
 <translation id="7029809446516969842">Contraseñas</translation>
 <translation id="7299100402441711551">Mostrar direcciones</translation>
 <translation id="7494879913343971937">Mostrar contraseñas</translation>
+<translation id="7594473730623999723">Desliza el dedo para ver más sugerencias</translation>
 <translation id="7658239707568436148">Cancelar</translation>
 <translation id="7992095260806105436">Usa la sugerencia de Autocompletar de Chrome.</translation>
 <translation id="8037472847879765671">Muestra formas de pago</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_es.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_es.xtb
index 481f455..b505fe57 100644
--- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_es.xtb
+++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_es.xtb
@@ -21,6 +21,7 @@
 <translation id="7029809446516969842">Contraseñas</translation>
 <translation id="7299100402441711551">Mostrar direcciones</translation>
 <translation id="7494879913343971937">Mostrar contraseñas</translation>
+<translation id="7594473730623999723">Desliza el dedo para ver más sugerencias</translation>
 <translation id="7658239707568436148">Cancelar</translation>
 <translation id="7992095260806105436">Utilizar sugerencia de Autocompletar de Chrome</translation>
 <translation id="8037472847879765671">Mostrar métodos de pago</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_hi.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_hi.xtb
index 9de293a..6393b882 100644
--- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_hi.xtb
+++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_hi.xtb
@@ -21,6 +21,7 @@
 <translation id="7029809446516969842">पासवर्ड</translation>
 <translation id="7299100402441711551">पतों की जानकारी दिखाओ</translation>
 <translation id="7494879913343971937">पासवर्ड दिखाएं</translation>
+<translation id="7594473730623999723">ज़्यादा सुझाव देखने के लिए स्वाइप करें</translation>
 <translation id="7658239707568436148">अभी नहीं</translation>
 <translation id="7992095260806105436">ऑटोमैटिक जानकारी भरने के Chrome के सुझाव का इस्तेमाल करें</translation>
 <translation id="8037472847879765671">भुगतान के तरीके दिखाएं</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_hu.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_hu.xtb
index 24335be..b69c301 100644
--- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_hu.xtb
+++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_hu.xtb
@@ -21,6 +21,7 @@
 <translation id="7029809446516969842">Jelszavak</translation>
 <translation id="7299100402441711551">Címek megjelenítése</translation>
 <translation id="7494879913343971937">Jelszavak mutatása</translation>
+<translation id="7594473730623999723">További javaslatok megtekintéséhez csúsztasson</translation>
 <translation id="7658239707568436148">Mégse</translation>
 <translation id="7992095260806105436">A Chrome automatikus kitöltési javaslatának használata</translation>
 <translation id="8037472847879765671">Fizetési módok megjelenítése</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_it.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_it.xtb
index 3a21b0a4..c199953e 100644
--- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_it.xtb
+++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_it.xtb
@@ -21,6 +21,7 @@
 <translation id="7029809446516969842">Password</translation>
 <translation id="7299100402441711551">Mostra indirizzi</translation>
 <translation id="7494879913343971937">Mostra password</translation>
+<translation id="7594473730623999723">Scorri per vedere altri suggerimenti</translation>
 <translation id="7658239707568436148">Annulla</translation>
 <translation id="7992095260806105436">Utilizza suggerimento della compilazione automatica di Chrome</translation>
 <translation id="8037472847879765671">Mostra metodi di pagamento</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ml.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ml.xtb
index 1c811d0f..904605d 100644
--- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ml.xtb
+++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ml.xtb
@@ -21,6 +21,7 @@
 <translation id="7029809446516969842">പാസ്‌വേഡുകള്‍</translation>
 <translation id="7299100402441711551">വിലാസങ്ങൾ കാണിക്കുക</translation>
 <translation id="7494879913343971937">പാസ്‌വേ‌ഡുകൾ കാണിക്കുക</translation>
+<translation id="7594473730623999723">കൂടുതൽ നിർദ്ദേശങ്ങൾ കാണാൻ സ്വൈപ്പ് ചെയ്യുക</translation>
 <translation id="7658239707568436148">റദ്ദാക്കൂ</translation>
 <translation id="7992095260806105436">Chrome ഓട്ടോഫിൽ നിർദ്ദേശം ഉപയോഗിക്കുക</translation>
 <translation id="8037472847879765671">പേയ്‌മെന്റ് രീതികൾ കാണിക്കുക</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_no.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_no.xtb
index d4e9bc3..25eaa1f 100644
--- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_no.xtb
+++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_no.xtb
@@ -21,6 +21,7 @@
 <translation id="7029809446516969842">Passord</translation>
 <translation id="7299100402441711551">Vis adresser</translation>
 <translation id="7494879913343971937">Vis passord</translation>
+<translation id="7594473730623999723">Sveip for å se flere forslag</translation>
 <translation id="7658239707568436148">Avbryt</translation>
 <translation id="7992095260806105436">Bruk autofyllforslag fra Chrome</translation>
 <translation id="8037472847879765671">Vis betalingsmåter</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_pl.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_pl.xtb
index d9d811c5..1ffd7ac7 100644
--- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_pl.xtb
+++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_pl.xtb
@@ -21,6 +21,7 @@
 <translation id="7029809446516969842">Hasła</translation>
 <translation id="7299100402441711551">Pokaż adresy</translation>
 <translation id="7494879913343971937">Pokazuj hasła</translation>
+<translation id="7594473730623999723">Przesuń palcem, by zobaczyć więcej sugestii</translation>
 <translation id="7658239707568436148">Anuluj</translation>
 <translation id="7992095260806105436">Użyj sugestii autouzupełniania Chrome</translation>
 <translation id="8037472847879765671">Pokaż formy płatności</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_pt-BR.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_pt-BR.xtb
index 1ef5232..5aada773 100644
--- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_pt-BR.xtb
+++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_pt-BR.xtb
@@ -21,6 +21,7 @@
 <translation id="7029809446516969842">Senhas</translation>
 <translation id="7299100402441711551">Mostrar endereços</translation>
 <translation id="7494879913343971937">Mostrar senhas</translation>
+<translation id="7594473730623999723">Deslize para ver mais sugestões</translation>
 <translation id="7658239707568436148">Cancelar</translation>
 <translation id="7992095260806105436">Usar a sugestão de preenchimento automático do Chrome</translation>
 <translation id="8037472847879765671">Mostrar formas de pagamento</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_pt-PT.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_pt-PT.xtb
index 59d4f0a..715f501 100644
--- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_pt-PT.xtb
+++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_pt-PT.xtb
@@ -21,6 +21,7 @@
 <translation id="7029809446516969842">Palavras-passe</translation>
 <translation id="7299100402441711551">Mostrar endereços</translation>
 <translation id="7494879913343971937">Mostrar palavras-passe</translation>
+<translation id="7594473730623999723">Deslize rapidamente para ver mais sugestões</translation>
 <translation id="7658239707568436148">Cancelar</translation>
 <translation id="7992095260806105436">Utilize as sugestões de preenchimento automático do Chrome.</translation>
 <translation id="8037472847879765671">Mostrar métodos de pagamento</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_sl.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_sl.xtb
index e75a446..b02e1c6 100644
--- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_sl.xtb
+++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_sl.xtb
@@ -20,6 +20,7 @@
 <translation id="7029809446516969842">Gesla</translation>
 <translation id="7299100402441711551">Pokaži naslove</translation>
 <translation id="7494879913343971937">Prikaz gesel</translation>
+<translation id="7594473730623999723">Povlecite, če si želite ogledati več predlogov.</translation>
 <translation id="7658239707568436148">Prekliči</translation>
 <translation id="7992095260806105436">Uporabite Chromov predlog samodejnega izpolnjevanja</translation>
 <translation id="8037472847879765671">Prikaz plačilnih sredstev</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_sr-Latn.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_sr-Latn.xtb
index 1cfa7e6..f13c67f 100644
--- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_sr-Latn.xtb
+++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_sr-Latn.xtb
@@ -21,6 +21,7 @@
 <translation id="7029809446516969842">Lozinke</translation>
 <translation id="7299100402441711551">Prikaži adrese</translation>
 <translation id="7494879913343971937">Prikazuj lozinke</translation>
+<translation id="7594473730623999723">Prevucite da biste videli još predloga</translation>
 <translation id="7658239707568436148">Otkaži</translation>
 <translation id="7992095260806105436">Koristite predlog Chrome automatskog popunjavanja</translation>
 <translation id="8037472847879765671">Prikaži načine plaćanja</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_sr.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_sr.xtb
index 812efcd..f7d11c2 100644
--- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_sr.xtb
+++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_sr.xtb
@@ -21,6 +21,7 @@
 <translation id="7029809446516969842">Лозинке</translation>
 <translation id="7299100402441711551">Прикажи адресе</translation>
 <translation id="7494879913343971937">Приказуј лозинке</translation>
+<translation id="7594473730623999723">Превуците да бисте видели још предлога</translation>
 <translation id="7658239707568436148">Откажи</translation>
 <translation id="7992095260806105436">Користите предлог Chrome аутоматског попуњавања</translation>
 <translation id="8037472847879765671">Прикажи начине плаћања</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_sv.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_sv.xtb
index 98ad785..f8f1bb38 100644
--- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_sv.xtb
+++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_sv.xtb
@@ -21,6 +21,7 @@
 <translation id="7029809446516969842">Lösenord</translation>
 <translation id="7299100402441711551">Visa adresser</translation>
 <translation id="7494879913343971937">Visa lösenord</translation>
+<translation id="7594473730623999723">Svep om du vill se fler förslag</translation>
 <translation id="7658239707568436148">Avbryt</translation>
 <translation id="7992095260806105436">Använd förslag från Autofyll i Chrome</translation>
 <translation id="8037472847879765671">Visa betalningsmetoder</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_te.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_te.xtb
index d5ef20ee..cd7a871 100644
--- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_te.xtb
+++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_te.xtb
@@ -21,6 +21,7 @@
 <translation id="7029809446516969842">పాస్‌వర్డ్‌లు</translation>
 <translation id="7299100402441711551">చిరునామాలను చూపుతుంది</translation>
 <translation id="7494879913343971937">పాస్‌వర్డ్‌లను చూపుతుంది</translation>
+<translation id="7594473730623999723">మరిన్ని సూచనలను చూడటం కోసం స్వైప్ చేయండి</translation>
 <translation id="7658239707568436148">రద్దు చేయి</translation>
 <translation id="7992095260806105436">Chrome ఆటోఫిల్ సూచనను ఉపయోగించండి</translation>
 <translation id="8037472847879765671">చెల్లింపు పద్ధతులను చూపుతుంది</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_th.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_th.xtb
index 370b629..c1b74910 100644
--- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_th.xtb
+++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_th.xtb
@@ -21,6 +21,7 @@
 <translation id="7029809446516969842">รหัสผ่าน</translation>
 <translation id="7299100402441711551">แสดงที่อยู่</translation>
 <translation id="7494879913343971937">แสดงรหัสผ่าน</translation>
+<translation id="7594473730623999723">เลื่อนเพื่อดูคำแนะนำเพิ่มเติม</translation>
 <translation id="7658239707568436148">ยกเลิก</translation>
 <translation id="7992095260806105436">ใช้คำแนะนำการป้อนข้อความอัตโนมัติใน Chrome</translation>
 <translation id="8037472847879765671">แสดงวิธีการชำระเงิน</translation>
diff --git a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/library/api/internal/actionmanager/ActionManager.java b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/library/api/internal/actionmanager/ActionManager.java
index 47c4ff6..2342fca 100644
--- a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/library/api/internal/actionmanager/ActionManager.java
+++ b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/library/api/internal/actionmanager/ActionManager.java
@@ -14,6 +14,8 @@
 
 /** Allows Stream to notify the Feed library of actions taken */
 public interface ActionManager extends ViewActionManager {
+    public static enum UploadActionType { MISC, CLICK, VIEW }
+
     /**
      * Dismiss content for the content ID in the session, along with executing the provided stream
      * data operations on the session.
@@ -41,12 +43,13 @@
      * Issues a request to record a set of actions, with the consumer being called back with the
      * resulting {@link ConsistencyToken}.
      */
-    void createAndUploadAction(String contentId, ActionPayload payload);
+    void createAndUploadAction(
+            String contentId, ActionPayload payload, UploadActionType actionType);
 
     /**
      * Issues a request to record a single action and store it for future upload.
      */
-    void createAndStoreAction(String contentId, ActionPayload payload);
+    void createAndStoreAction(String contentId, ActionPayload payload, UploadActionType actionType);
 
     /**
      * Issues a request to record a set of action and update the url with consistency token with the
@@ -54,4 +57,10 @@
      */
     void uploadAllActionsAndUpdateUrl(
             String url, String consistencyTokenQueryParamName, Consumer<String> consumer);
+
+    /**
+     * Sets the bit that determines whether clicks and views can be uploaded when the notice card is
+     * present.
+     */
+    void setCanUploadClicksAndViewsWhenNoticeCardIsPresent(boolean canUploadClicksAndViews);
 }
diff --git a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/library/basicstream/BasicStream.java b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/library/basicstream/BasicStream.java
index c2f3494..d00d6da 100644
--- a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/library/basicstream/BasicStream.java
+++ b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/library/basicstream/BasicStream.java
@@ -85,10 +85,14 @@
 import org.chromium.chrome.browser.feed.library.sharedstream.scroll.ScrollListenerNotifier;
 import org.chromium.chrome.browser.feed.shared.stream.Header;
 import org.chromium.chrome.browser.feed.shared.stream.Stream;
+import org.chromium.chrome.browser.flags.ChromeFeatureList;
+import org.chromium.chrome.browser.preferences.Pref;
+import org.chromium.chrome.browser.profiles.Profile;
 import org.chromium.components.feed.core.proto.libraries.api.internal.StreamDataProto.UiContext;
 import org.chromium.components.feed.core.proto.libraries.basicstream.internal.StreamSavedInstanceStateProto.StreamSavedInstanceState;
 import org.chromium.components.feed.core.proto.libraries.sharedstream.ScrollStateProto.ScrollState;
 import org.chromium.components.feed.core.proto.libraries.sharedstream.UiRefreshReasonProto.UiRefreshReason;
+import org.chromium.components.user_prefs.UserPrefs;
 
 import java.util.List;
 
@@ -304,6 +308,7 @@
         mStreamOfflineMonitor.onDestroy();
         mUiSessionRequestLogger.onDestroy();
         mActionManager.setViewport(null);
+        mActionManager.setCanUploadClicksAndViewsWhenNoticeCardIsPresent(false);
         mIsDestroyed = true;
     }
 
@@ -511,9 +516,19 @@
         mRecyclerView.addOnLayoutChangeListener(this);
 
         mActionManager.setViewport(mRecyclerView);
+        mActionManager.setCanUploadClicksAndViewsWhenNoticeCardIsPresent(canUpload());
         addScrollListener(mActionManager.getScrollListener());
     }
 
+    private boolean canUpload() {
+        if (ChromeFeatureList.isEnabled(
+                    ChromeFeatureList.INTEREST_FEEDV1_CLICKS_AND_VIEWS_CONDITIONAL_UPLOAD)) {
+            return UserPrefs.get(Profile.getLastUsedRegularProfile())
+                    .getBoolean(Pref.HAS_REACHED_CLICK_AND_VIEW_ACTIONS_UPLOAD_CONDITIONS);
+        }
+        return true;
+    }
+
     private void updateAdapterAfterSessionStart(ModelProvider modelProvider) {
         StreamDriver newStreamDriver = createStreamDriver(mActionApi, mActionManager,
                 mActionParserFactory, modelProvider, mThreadUtils, mClock, mConfiguration, mContext,
diff --git a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/library/basicstream/internal/actions/StreamActionApiImpl.java b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/library/basicstream/internal/actions/StreamActionApiImpl.java
index 165bee2..0e8ae85f 100644
--- a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/library/basicstream/internal/actions/StreamActionApiImpl.java
+++ b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/library/basicstream/internal/actions/StreamActionApiImpl.java
@@ -130,7 +130,8 @@
                 @Override
                 public void onDismissCommitted() {
                     dismiss(dataOperations);
-                    mActionManager.createAndUploadAction(mContentId, payload);
+                    mActionManager.createAndUploadAction(
+                            mContentId, payload, ActionManager.UploadActionType.MISC);
                     mBasicLoggingApi.onNotInterestedIn(
                             interestType, mContentLoggingData.get(), /* wasCommitted = */ true);
                 }
@@ -142,7 +143,8 @@
     public void handleBlockContent(
             List<StreamDataOperation> dataOperations, ActionPayload payload) {
         dismiss(dataOperations);
-        mActionManager.createAndUploadAction(mContentId, payload);
+        mActionManager.createAndUploadAction(
+                mContentId, payload, ActionManager.UploadActionType.MISC);
     }
 
     @Override
@@ -164,7 +166,8 @@
                 public void onDismissCommitted() {
                     dismissLocal(contentId, dataOperations);
                     dismiss(dataOperations);
-                    mActionManager.createAndUploadAction(contentId, payload);
+                    mActionManager.createAndUploadAction(
+                            contentId, payload, ActionManager.UploadActionType.MISC);
                     mBasicLoggingApi.onContentDismissed(
                             mContentLoggingData.get(), /* wasCommitted = */ true);
                 }
@@ -334,7 +337,8 @@
     @Override
     public void reportClickAction(String contentId, ActionPayload payload) {
         if (FeedFeatures.isReportingUserActions()) {
-            mActionManager.createAndUploadAction(contentId, payload);
+            mActionManager.createAndUploadAction(
+                    contentId, payload, ActionManager.UploadActionType.CLICK);
         }
     }
 
diff --git a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/library/feedactionmanager/FeedActionManagerImpl.java b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/library/feedactionmanager/FeedActionManagerImpl.java
index 04fd84e..23d66cf 100644
--- a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/library/feedactionmanager/FeedActionManagerImpl.java
+++ b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/library/feedactionmanager/FeedActionManagerImpl.java
@@ -36,9 +36,12 @@
 import org.chromium.chrome.browser.feed.shared.stream.Stream.ScrollListener;
 import org.chromium.chrome.browser.feed.shared.stream.Stream.ScrollListener.ScrollState;
 import org.chromium.chrome.browser.flags.ChromeFeatureList;
+import org.chromium.chrome.browser.preferences.Pref;
+import org.chromium.chrome.browser.profiles.Profile;
 import org.chromium.components.feed.core.proto.libraries.api.internal.StreamDataProto.StreamDataOperation;
 import org.chromium.components.feed.core.proto.libraries.api.internal.StreamDataProto.StreamUploadableAction;
 import org.chromium.components.feed.core.proto.wire.ActionPayloadProto.ActionPayload;
+import org.chromium.components.user_prefs.UserPrefs;
 
 import java.util.HashMap;
 import java.util.HashSet;
@@ -88,6 +91,8 @@
     private final double mViewportCoverageThreshold;
     private final long mViewDurationMsThreshold;
 
+    private boolean mCanUploadClicksAndViewsWhenNoticePresent;
+
     FeedActionManagerImpl(Store store, ThreadUtils threadUtils, TaskQueue taskQueue,
             MainThreadRunner mainThreadRunner, ViewHandler viewHandler, Clock clock,
             BasicLoggingApi basicLoggingApi) {
@@ -121,6 +126,11 @@
     }
 
     @Override
+    public void setCanUploadClicksAndViewsWhenNoticeCardIsPresent(boolean canUploadClicksAndViews) {
+        mCanUploadClicksAndViewsWhenNoticePresent = canUploadClicksAndViews;
+    }
+
+    @Override
     public void dismissLocal(List<String> contentIds,
             List<StreamDataOperation> streamDataOperations, @Nullable String sessionId) {
         executeStreamDataOperations(streamDataOperations, sessionId);
@@ -142,7 +152,13 @@
     }
 
     @Override
-    public void createAndUploadAction(String contentId, ActionPayload payload) {
+    public void createAndUploadAction(
+            String contentId, ActionPayload payload, ActionManager.UploadActionType type) {
+        // Don't upload click actions when logging is disabled.
+        if (!canUploadClicksAndViews() && type == ActionManager.UploadActionType.CLICK) {
+            return;
+        }
+
         mTaskQueue.execute(Task.CREATE_AND_UPLOAD, TaskType.BACKGROUND, () -> {
             HashSet<StreamUploadableAction> actionSet = new HashSet<>();
             long currentTime = TimeUnit.MILLISECONDS.toSeconds(mClock.currentTimeMillis());
@@ -156,7 +172,13 @@
     }
 
     @Override
-    public void createAndStoreAction(String contentId, ActionPayload payload) {
+    public void createAndStoreAction(
+            String contentId, ActionPayload payload, ActionManager.UploadActionType type) {
+        // Don't store click actions when logging is disabled.
+        if (!canUploadClicksAndViews() && type == ActionManager.UploadActionType.CLICK) {
+            return;
+        }
+
         mTaskQueue.execute(Task.CREATE_AND_STORE, TaskType.BACKGROUND, () -> {
             long currentTime = TimeUnit.MILLISECONDS.toSeconds(mClock.currentTimeMillis());
             StreamUploadableAction action = StreamUploadableAction.newBuilder()
@@ -355,6 +377,11 @@
     }
 
     private void reportViewActions(Runnable doneCallback) {
+        // Don't report when logging is disabled.
+        if (!canUploadClicksAndViews()) {
+            return;
+        }
+
         Set<StreamUploadableAction> actions = new HashSet<>();
         if (FeedFeatures.isReportingUserActions()) {
             Iterator<Map.Entry<String, ViewActionData>> entryIterator =
@@ -476,4 +503,10 @@
             return new ViewActionData(actionPayload, 0L, false);
         }
     }
+
+    private boolean canUploadClicksAndViews() {
+        boolean wasNoticePresent = UserPrefs.get(Profile.getLastUsedRegularProfile())
+                                           .getBoolean(Pref.LAST_FETCH_HAD_NOTICE_CARD);
+        return mCanUploadClicksAndViewsWhenNoticePresent || !wasNoticePresent;
+    }
 }
diff --git a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/library/feedrequestmanager/FeedRequestManagerImpl.java b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/library/feedrequestmanager/FeedRequestManagerImpl.java
index 232d3b5..44dae9a 100644
--- a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/library/feedrequestmanager/FeedRequestManagerImpl.java
+++ b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/library/feedrequestmanager/FeedRequestManagerImpl.java
@@ -42,6 +42,7 @@
 import org.chromium.chrome.browser.feed.library.common.time.TimingUtils.ElapsedTimeTracker;
 import org.chromium.chrome.browser.feed.library.feedrequestmanager.internal.Utils;
 import org.chromium.chrome.browser.feed.shared.FeedFeatures;
+import org.chromium.chrome.browser.preferences.Pref;
 import org.chromium.chrome.browser.profiles.Profile;
 import org.chromium.chrome.browser.profiles.ProfileManager;
 import org.chromium.chrome.browser.signin.IdentityServicesProvider;
@@ -66,6 +67,7 @@
 import org.chromium.components.feed.core.proto.wire.VersionProto.Version;
 import org.chromium.components.feed.core.proto.wire.VersionProto.Version.Architecture;
 import org.chromium.components.feed.core.proto.wire.VersionProto.Version.BuildType;
+import org.chromium.components.user_prefs.UserPrefs;
 
 import java.io.IOException;
 import java.io.UnsupportedEncodingException;
@@ -127,7 +129,7 @@
         RequestBuilder request = newDefaultRequest(RequestReason.MANUAL_CONTINUATION)
                                          .setPageToken(streamToken.getNextPageToken())
                                          .setConsistencyToken(token);
-        executeRequest(request, consumer);
+        executeRequest(request, consumer, false);
         timeTracker.stop(
                 "task", "FeedRequestManagerImpl LoadMore", "token", streamToken.getNextPageToken());
     }
@@ -147,9 +149,9 @@
             // This will make a new request, it should invalidate the existing head to delay
             // everything until the response is obtained.
             mTaskQueue.execute(Task.REQUEST_MANAGER_TRIGGER_REFRESH, TaskType.HEAD_INVALIDATE,
-                    () -> executeRequest(request, consumer));
+                    () -> executeRequest(request, consumer, true));
         } else {
-            executeRequest(request, consumer);
+            executeRequest(request, consumer, true);
         }
     }
 
@@ -193,7 +195,8 @@
         return false;
     }
 
-    private void executeRequest(RequestBuilder requestBuilder, Consumer<Result<Model>> consumer) {
+    private void executeRequest(RequestBuilder requestBuilder, Consumer<Result<Model>> consumer,
+            boolean isRefreshRequest) {
         mThreadUtils.checkNotMainThread();
         // Do not include Dismiss actions in the FeedQuery request for signed in users.
         // Dismiss actions for signed in users are uploaded via the ActionsUpload endpoint.
@@ -213,12 +216,12 @@
                         FeatureName.CARD_MENU_TOOLTIP, (wouldTrigger) -> {
                             mTaskQueue.execute(Task.SEND_REQUEST, TaskType.IMMEDIATE, () -> {
                                 requestBuilder.setCardMenuTooltipWouldTrigger(wouldTrigger);
-                                sendRequest(requestBuilder, consumer);
+                                sendRequest(requestBuilder, consumer, isRefreshRequest);
                             });
                         });
             });
         } else {
-            sendRequest(requestBuilder, consumer);
+            sendRequest(requestBuilder, consumer, isRefreshRequest);
         }
     }
 
@@ -227,7 +230,8 @@
                 || reason == FeedQuery.RequestReason.WITH_CONTENT);
     }
 
-    private void sendRequest(RequestBuilder requestBuilder, Consumer<Result<Model>> consumer) {
+    private void sendRequest(RequestBuilder requestBuilder, Consumer<Result<Model>> consumer,
+            boolean isRefreshRequest) {
         mThreadUtils.checkNotMainThread();
         String endpoint = mConfiguration.getValueOrDefault(ConfigKey.FEED_SERVER_ENDPOINT, "");
         @HttpMethod
@@ -261,12 +265,12 @@
                         "FeedRequestManagerImpl consumer", () -> consumer.accept(Result.failure()));
                 return;
             }
-            handleResponseBytes(input.getResponseBody(), consumer);
+            handleResponseBytes(input.getResponseBody(), consumer, isRefreshRequest);
         });
     }
 
-    private void handleResponseBytes(
-            final byte[] responseBytes, final Consumer<Result<Model>> consumer) {
+    private void handleResponseBytes(final byte[] responseBytes,
+            final Consumer<Result<Model>> consumer, boolean isRefreshRequest) {
         mTaskQueue.execute(Task.HANDLE_RESPONSE_BYTES, TaskType.IMMEDIATE, () -> {
             Response response;
             boolean isLengthPrefixed = mConfiguration.getValueOrDefault(
@@ -282,17 +286,28 @@
                         "FeedRequestManagerImpl consumer", () -> consumer.accept(Result.failure()));
                 return;
             }
-            logServerCapabilities(response);
+            logServerCapabilities(response, isRefreshRequest);
             mMainThreadRunner.execute("FeedRequestManagerImpl consumer",
                     () -> consumer.accept(mProtocolAdapter.createModel(response)));
         });
     }
 
-    private static void logServerCapabilities(Response response) {
+    private void logServerCapabilities(Response response, boolean isRefreshRequest) {
         FeedResponse feedResponse = response.getExtension(FeedResponse.feedResponse);
         List<Capability> capabilities = feedResponse.getServerCapabilitiesList();
         RecordHistogram.recordBooleanHistogram("ContentSuggestions.Feed.NoticeCardFulfilled",
                 capabilities.contains(Capability.REPORT_FEED_USER_ACTIONS_NOTICE_CARD));
+        if (isRefreshRequest) {
+            mMainThreadRunner.execute("Update notice card pref",
+                    ()
+                            -> updateNoticeCardPref(capabilities.contains(
+                                    Capability.REPORT_FEED_USER_ACTIONS_NOTICE_CARD)));
+        }
+    }
+
+    private void updateNoticeCardPref(boolean hasNoticeCard) {
+        UserPrefs.get(Profile.getLastUsedRegularProfile())
+                .setBoolean(Pref.LAST_FETCH_HAD_NOTICE_CARD, hasNoticeCard);
     }
 
     private static final class RequestBuilder {
diff --git a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/v1/FeedLoggingBridge.java b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/v1/FeedLoggingBridge.java
index a4258c8..f23d74e 100644
--- a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/v1/FeedLoggingBridge.java
+++ b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/v1/FeedLoggingBridge.java
@@ -24,9 +24,12 @@
 import org.chromium.chrome.browser.feed.library.api.host.logging.ZeroStateShowReason;
 import org.chromium.chrome.browser.feed.library.common.time.Clock;
 import org.chromium.chrome.browser.feed.shared.stream.Stream.ScrollListener;
+import org.chromium.chrome.browser.flags.ChromeFeatureList;
 import org.chromium.chrome.browser.ntp.NewTabPageUma;
+import org.chromium.chrome.browser.preferences.Pref;
 import org.chromium.chrome.browser.profiles.Profile;
 import org.chromium.components.feed.core.proto.ui.action.FeedActionProto;
+import org.chromium.components.user_prefs.UserPrefs;
 import org.chromium.ui.mojom.WindowOpenDisposition;
 
 import java.util.List;
@@ -39,6 +42,8 @@
 @JNINamespace("feed")
 public class FeedLoggingBridge implements BasicLoggingApi {
     private static final String TAG = "FeedLoggingBridge";
+    private static final int SHOWN_INDEX_THRESHOLD = 2;
+
     private long mNativeFeedLoggingBridge;
     private static final int MIN_SCROLL_THRESHOLD_DP = 160; // one inch.
     private static final long VISIT_TIME_THRESHOLD = 1000 * 60 * 5; // 5 min in ms.
@@ -47,6 +52,7 @@
     private boolean mScrolledReported;
     private long mVisitStartTime;
     private Clock mClock;
+    private boolean mHasReachedShownIndexesThreshold;
 
     // This enum is used for UMA, don't move or reassign these numbers.
     public @interface FeedEngagementType {
@@ -71,6 +77,10 @@
         mScrolledReported = false;
         mClock = clock;
         mVisitStartTime = 0;
+        // Set the initial value to true when the conditional logging feature is disabled because
+        // the threshold isn't needed in that case.
+        mHasReachedShownIndexesThreshold = !ChromeFeatureList.isEnabled(
+                ChromeFeatureList.INTEREST_FEEDV1_CLICKS_AND_VIEWS_CONDITIONAL_UPLOAD);
     }
 
     /** Cleans up native half of this bridge. */
@@ -85,6 +95,8 @@
 
     @Override
     public void onContentViewed(ContentLoggingData data) {
+        onShownSlice(data.getPositionInStream());
+
         // Bridge could have been destroyed for policy when this is called.
         // See https://crbug.com/901414.
         if (mNativeFeedLoggingBridge == 0) return;
@@ -96,6 +108,18 @@
                 data.isAvailableOffline());
     }
 
+    private void onShownSlice(int index) {
+        if (mHasReachedShownIndexesThreshold) {
+            return;
+        }
+
+        if (index + 1 >= SHOWN_INDEX_THRESHOLD) {
+            mHasReachedShownIndexesThreshold = true;
+            UserPrefs.get(Profile.getLastUsedRegularProfile())
+                    .setBoolean(Pref.HAS_REACHED_CLICK_AND_VIEW_ACTIONS_UPLOAD_CONDITIONS, true);
+        }
+    }
+
     @Override
     public void onContentDismissed(ContentLoggingData data, boolean wasCommitted) {
         // Bridge could have been destroyed for policy when this is called.
diff --git a/chrome/android/feed/core/javatests/src/org/chromium/chrome/browser/feed/library/basicstream/BasicStreamTest.java b/chrome/android/feed/core/javatests/src/org/chromium/chrome/browser/feed/library/basicstream/BasicStreamTest.java
index 5d9bdfcc..383d8e0 100644
--- a/chrome/android/feed/core/javatests/src/org/chromium/chrome/browser/feed/library/basicstream/BasicStreamTest.java
+++ b/chrome/android/feed/core/javatests/src/org/chromium/chrome/browser/feed/library/basicstream/BasicStreamTest.java
@@ -34,7 +34,9 @@
 import com.google.protobuf.InvalidProtocolBufferException;
 
 import org.junit.Before;
+import org.junit.Rule;
 import org.junit.Test;
+import org.junit.rules.TestRule;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
 import org.robolectric.Robolectric;
@@ -42,6 +44,8 @@
 import org.robolectric.shadow.api.Shadow;
 
 import org.chromium.base.Consumer;
+import org.chromium.base.test.util.JniMocker;
+import org.chromium.chrome.R;
 import org.chromium.chrome.browser.feed.library.api.client.knowncontent.ContentMetadata;
 import org.chromium.chrome.browser.feed.library.api.client.knowncontent.KnownContent;
 import org.chromium.chrome.browser.feed.library.api.host.action.ActionApi;
@@ -94,12 +98,18 @@
 import org.chromium.chrome.browser.feed.shared.stream.Header;
 import org.chromium.chrome.browser.feed.shared.stream.Stream.ContentChangedListener;
 import org.chromium.chrome.browser.feed.shared.stream.Stream.ScrollListener;
-import org.chromium.chrome.R;
+import org.chromium.chrome.browser.flags.ChromeFeatureList;
+import org.chromium.chrome.browser.preferences.Pref;
+import org.chromium.chrome.browser.profiles.Profile;
+import org.chromium.chrome.test.util.browser.Features;
 import org.chromium.components.feed.core.proto.libraries.api.internal.StreamDataProto.UiContext;
 import org.chromium.components.feed.core.proto.libraries.basicstream.internal.StreamSavedInstanceStateProto.StreamSavedInstanceState;
 import org.chromium.components.feed.core.proto.libraries.sharedstream.ScrollStateProto.ScrollState;
 import org.chromium.components.feed.core.proto.libraries.sharedstream.UiRefreshReasonProto.UiRefreshReason;
 import org.chromium.components.feed.core.proto.libraries.sharedstream.UiRefreshReasonProto.UiRefreshReason.Reason;
+import org.chromium.components.prefs.PrefService;
+import org.chromium.components.user_prefs.UserPrefs;
+import org.chromium.components.user_prefs.UserPrefsJni;
 import org.chromium.testing.local.LocalRobolectricTestRunner;
 
 import java.util.ArrayList;
@@ -111,6 +121,7 @@
 /** Tests for {@link BasicStream}. */
 @RunWith(LocalRobolectricTestRunner.class)
 @Config(manifest = Config.NONE, shadows = {ShadowRecycledViewPool.class})
+@Features.DisableFeatures(ChromeFeatureList.INTEREST_FEEDV1_CLICKS_AND_VIEWS_CONDITIONAL_UPLOAD)
 public class BasicStreamTest {
     private static final int START_PADDING = 1;
     private static final int END_PADDING = 2;
@@ -137,6 +148,12 @@
                     .put(ConfigKey.SPINNER_MINIMUM_SHOW_TIME_MS, SPINNER_MINIMUM_SHOW_TIME_MS)
                     .build();
 
+    @Rule
+    public TestRule mFeaturesProcessorRule = new Features.JUnitProcessor();
+
+    @Rule
+    public JniMocker mocker = new JniMocker();
+
     @Mock
     private StreamConfiguration mStreamConfiguration;
     @Mock
@@ -173,6 +190,12 @@
     private TooltipApi mTooltipApi;
     @Mock
     private ActionManager mActionManager;
+    @Mock
+    private UserPrefs.Natives mUserPrefsJniMock;
+    @Mock
+    private Profile mProfile;
+    @Mock
+    private PrefService mPrefService;
 
     private FakeFeedKnownContent mFakeFeedKnownContent;
     private LinearLayoutManagerWithFakePositioning mLayoutManager;
@@ -186,6 +209,12 @@
     public void setUp() {
         initMocks(this);
 
+        mocker.mock(UserPrefsJni.TEST_HOOKS, mUserPrefsJniMock);
+        Profile.setLastUsedProfileForTesting(mProfile);
+        when(mUserPrefsJniMock.get(mProfile)).thenReturn(mPrefService);
+        when(mPrefService.getBoolean(Pref.HAS_REACHED_CLICK_AND_VIEW_ACTIONS_UPLOAD_CONDITIONS))
+                .thenReturn(true);
+
         mFakeFeedKnownContent = new FakeFeedKnownContent();
         mHeaders = new ArrayList<>();
         mHeaders.add(mock(Header.class));
@@ -222,6 +251,12 @@
     }
 
     @Test
+    @Features.EnableFeatures(ChromeFeatureList.INTEREST_FEEDV1_CLICKS_AND_VIEWS_CONDITIONAL_UPLOAD)
+    public void testOnCreate_setReachedUploadConditionsBitInActionManager_whenFeatureEnabled() {
+        verify(mActionManager, times(1)).setCanUploadClicksAndViewsWhenNoticeCardIsPresent(true);
+    }
+
+    @Test
     public void testRecyclerViewSetup() {
         assertThat(getStreamRecyclerView().getId()).isEqualTo(R.id.feed_stream_recycler_view);
     }
diff --git a/chrome/android/feed/core/javatests/src/org/chromium/chrome/browser/feed/library/basicstream/internal/actions/StreamActionApiImplTest.java b/chrome/android/feed/core/javatests/src/org/chromium/chrome/browser/feed/library/basicstream/internal/actions/StreamActionApiImplTest.java
index 4527e487..732f444b 100644
--- a/chrome/android/feed/core/javatests/src/org/chromium/chrome/browser/feed/library/basicstream/internal/actions/StreamActionApiImplTest.java
+++ b/chrome/android/feed/core/javatests/src/org/chromium/chrome/browser/feed/library/basicstream/internal/actions/StreamActionApiImplTest.java
@@ -253,7 +253,9 @@
         mStreamActionApi.handleBlockContent(streamDataOperations, ACTION_PAYLOAD);
 
         verify(mActionManager).dismiss(streamDataOperations, SESSION_ID);
-        verify(mActionManager).createAndUploadAction(CONTENT_ID, ACTION_PAYLOAD);
+        verify(mActionManager)
+                .createAndUploadAction(
+                        CONTENT_ID, ACTION_PAYLOAD, ActionManager.UploadActionType.MISC);
     }
 
     @Test
@@ -299,7 +301,9 @@
         String contentId = "contentId";
         mStreamActionApi.reportClickAction(contentId, ACTION_PAYLOAD);
 
-        verify(mActionManager).createAndUploadAction(contentId, ACTION_PAYLOAD);
+        verify(mActionManager)
+                .createAndUploadAction(
+                        contentId, ACTION_PAYLOAD, ActionManager.UploadActionType.CLICK);
     }
 
     @Test
@@ -308,7 +312,8 @@
         mStreamActionApi.reportClickAction("contentId", ACTION_PAYLOAD);
 
         verify(mActionManager, never())
-                .createAndUploadAction(anyString(), any(ActionPayload.class));
+                .createAndUploadAction(anyString(), any(ActionPayload.class),
+                        any(ActionManager.UploadActionType.class));
     }
 
     @Test
@@ -611,7 +616,9 @@
                                 ImmutableList.of(CONTENT_ID), streamDataOperations, SESSION_ID);
                 verify(mBasicLoggingApi)
                         .onContentDismissed(mContentLoggingData, /*wasCommitted =*/true);
-                verify(mActionManager).createAndUploadAction(CONTENT_ID, ACTION_PAYLOAD);
+                verify(mActionManager)
+                        .createAndUploadAction(
+                                CONTENT_ID, ACTION_PAYLOAD, ActionManager.UploadActionType.MISC);
                 break;
             case DISMISS_LOCAL:
                 verify(mActionManager)
@@ -625,7 +632,9 @@
                 verify(mBasicLoggingApi)
                         .onNotInterestedIn(
                                 INTEREST_TYPE, mContentLoggingData, /*wasCommitted =*/true);
-                verify(mActionManager).createAndUploadAction(CONTENT_ID, ACTION_PAYLOAD);
+                verify(mActionManager)
+                        .createAndUploadAction(
+                                CONTENT_ID, ACTION_PAYLOAD, ActionManager.UploadActionType.MISC);
                 break;
             default:
                 break;
diff --git a/chrome/android/feed/core/javatests/src/org/chromium/chrome/browser/feed/library/feedactionmanager/FeedActionManagerImplTest.java b/chrome/android/feed/core/javatests/src/org/chromium/chrome/browser/feed/library/feedactionmanager/FeedActionManagerImplTest.java
index 780dca2..27b8515f 100644
--- a/chrome/android/feed/core/javatests/src/org/chromium/chrome/browser/feed/library/feedactionmanager/FeedActionManagerImplTest.java
+++ b/chrome/android/feed/core/javatests/src/org/chromium/chrome/browser/feed/library/feedactionmanager/FeedActionManagerImplTest.java
@@ -32,7 +32,9 @@
 import org.robolectric.annotation.Config;
 
 import org.chromium.base.Consumer;
+import org.chromium.base.test.util.JniMocker;
 import org.chromium.chrome.browser.feed.library.api.common.MutationContext;
+import org.chromium.chrome.browser.feed.library.api.internal.actionmanager.ActionManager;
 import org.chromium.chrome.browser.feed.library.api.internal.common.Model;
 import org.chromium.chrome.browser.feed.library.api.internal.sessionmanager.FeedSessionManager;
 import org.chromium.chrome.browser.feed.library.api.internal.store.LocalActionMutation;
@@ -46,6 +48,8 @@
 import org.chromium.chrome.browser.feed.library.common.time.testing.FakeClock;
 import org.chromium.chrome.browser.feed.v1.FeedLoggingBridge;
 import org.chromium.chrome.browser.flags.ChromeFeatureList;
+import org.chromium.chrome.browser.preferences.Pref;
+import org.chromium.chrome.browser.profiles.Profile;
 import org.chromium.chrome.test.util.browser.Features;
 import org.chromium.components.feed.core.proto.libraries.api.internal.StreamDataProto.StreamDataOperation;
 import org.chromium.components.feed.core.proto.libraries.api.internal.StreamDataProto.StreamStructure;
@@ -53,6 +57,9 @@
 import org.chromium.components.feed.core.proto.libraries.api.internal.StreamDataProto.StreamUploadableAction;
 import org.chromium.components.feed.core.proto.wire.ActionPayloadProto.ActionPayload;
 import org.chromium.components.feed.core.proto.wire.ConsistencyTokenProto.ConsistencyToken;
+import org.chromium.components.prefs.PrefService;
+import org.chromium.components.user_prefs.UserPrefs;
+import org.chromium.components.user_prefs.UserPrefsJni;
 import org.chromium.testing.local.LocalRobolectricTestRunner;
 
 import java.time.Duration;
@@ -96,6 +103,9 @@
     @Rule
     public TestRule mFeaturesProcessorRule = new Features.JUnitProcessor();
 
+    @Rule
+    public JniMocker mocker = new JniMocker();
+
     @Mock
     private FeedSessionManager mFeedSessionManager;
     @Mock
@@ -110,6 +120,13 @@
     private FeedLoggingBridge mFeedLoggingBridge;
     @Mock
     private Runnable mStoreViewActionsRunnable;
+    @Mock
+    private UserPrefs.Natives mUserPrefsJniMock;
+    @Mock
+    private Profile mProfile;
+    @Mock
+    private PrefService mPrefService;
+
     @Captor
     private ArgumentCaptor<Integer> mActionTypeCaptor;
     @Captor
@@ -132,6 +149,11 @@
     @Before
     public void setUp() throws Exception {
         initMocks(this);
+
+        mocker.mock(UserPrefsJni.TEST_HOOKS, mUserPrefsJniMock);
+        Profile.setLastUsedProfileForTesting(mProfile);
+        when(mUserPrefsJniMock.get(mProfile)).thenReturn(mPrefService);
+
         mActionManager = new FeedActionManagerImpl(mStore, mFakeThreadUtils, getTaskQueue(),
                 mFakeMainThreadRunner, new TestViewHandler(), mFakeClock, mFeedLoggingBridge);
         mActionManager.initialize(mFeedSessionManager);
@@ -150,6 +172,7 @@
         mViewport = new TestView();
         mViewport.setRectOnScreen(VIEWPORT_RECT);
         mActionManager.setViewport(mViewport);
+        mActionManager.setCanUploadClicksAndViewsWhenNoticeCardIsPresent(false);
     }
 
     @Test
@@ -237,9 +260,26 @@
     }
 
     @Test
-    public void triggerCreateAndUploadAction() throws Exception {
+    public void triggerCreateAndUploadAction_whenUploadDisabled_byCantUploadWithNotice()
+            throws Exception {
+        mActionManager.setCanUploadClicksAndViewsWhenNoticeCardIsPresent(false);
+        when(mPrefService.getBoolean(Pref.LAST_FETCH_HAD_NOTICE_CARD)).thenReturn(true);
+
         mFakeClock.set(DEFAULT_TIME);
-        mActionManager.createAndUploadAction(CONTENT_ID_STRING, ACTION_PAYLOAD);
+        mActionManager.createAndUploadAction(
+                CONTENT_ID_STRING, ACTION_PAYLOAD, ActionManager.UploadActionType.CLICK);
+        verify(mFeedSessionManager, never()).triggerUploadActions(mActionCaptor.capture());
+    }
+
+    @Test
+    public void triggerCreateAndUploadAction_whenUploadEnabled_byCanUploadWithNotice()
+            throws Exception {
+        mActionManager.setCanUploadClicksAndViewsWhenNoticeCardIsPresent(true);
+        when(mPrefService.getBoolean(Pref.LAST_FETCH_HAD_NOTICE_CARD)).thenReturn(true);
+
+        mFakeClock.set(DEFAULT_TIME);
+        mActionManager.createAndUploadAction(
+                CONTENT_ID_STRING, ACTION_PAYLOAD, ActionManager.UploadActionType.CLICK);
         verify(mFeedSessionManager).triggerUploadActions(mActionCaptor.capture());
         StreamUploadableAction action =
                 (StreamUploadableAction) mActionCaptor.getValue().toArray()[0];
@@ -249,16 +289,35 @@
     }
 
     @Test
-    public void triggerCreateAndStoreAction() throws Exception {
+    public void triggerCreateAndUploadAction_whenUploadEnabled_byNoClickAction() throws Exception {
+        mActionManager.setCanUploadClicksAndViewsWhenNoticeCardIsPresent(false);
+        when(mPrefService.getBoolean(Pref.LAST_FETCH_HAD_NOTICE_CARD)).thenReturn(true);
+
         mFakeClock.set(DEFAULT_TIME);
-        mActionManager.createAndStoreAction(CONTENT_ID_STRING, ACTION_PAYLOAD);
-        verify(mUploadableActionMutation)
-                .upsert(mUploadableActionCaptor.capture(), mContentIdStringCaptor.capture());
-        StreamUploadableAction action = mUploadableActionCaptor.getValue();
+        mActionManager.createAndUploadAction(
+                CONTENT_ID_STRING, ACTION_PAYLOAD, ActionManager.UploadActionType.MISC);
+        verify(mFeedSessionManager).triggerUploadActions(mActionCaptor.capture());
+        StreamUploadableAction action =
+                (StreamUploadableAction) mActionCaptor.getValue().toArray()[0];
         assertThat(action.getFeatureContentId()).isEqualTo(CONTENT_ID_STRING);
         assertThat(action.getTimestampSeconds()).isEqualTo(DEFAULT_TIME_SECONDS);
         assertThat(action.getPayload()).isEqualTo(ACTION_PAYLOAD);
-        assertThat(mContentIdStringCaptor.getValue()).isEqualTo(CONTENT_ID_STRING);
+    }
+
+    @Test
+    public void triggerCreateAndUploadAction_whenLogEnabled_byNoNoticeCard() throws Exception {
+        mActionManager.setCanUploadClicksAndViewsWhenNoticeCardIsPresent(false);
+        when(mPrefService.getBoolean(Pref.LAST_FETCH_HAD_NOTICE_CARD)).thenReturn(false);
+
+        mFakeClock.set(DEFAULT_TIME);
+        mActionManager.createAndUploadAction(
+                CONTENT_ID_STRING, ACTION_PAYLOAD, ActionManager.UploadActionType.MISC);
+        verify(mFeedSessionManager).triggerUploadActions(mActionCaptor.capture());
+        StreamUploadableAction action =
+                (StreamUploadableAction) mActionCaptor.getValue().toArray()[0];
+        assertThat(action.getFeatureContentId()).isEqualTo(CONTENT_ID_STRING);
+        assertThat(action.getTimestampSeconds()).isEqualTo(DEFAULT_TIME_SECONDS);
+        assertThat(action.getPayload()).isEqualTo(ACTION_PAYLOAD);
     }
 
     @Test
diff --git a/chrome/android/feed/core/javatests/src/org/chromium/chrome/browser/feed/library/feedrequestmanager/FeedRequestManagerImplTest.java b/chrome/android/feed/core/javatests/src/org/chromium/chrome/browser/feed/library/feedrequestmanager/FeedRequestManagerImplTest.java
index db7137b..347730d 100644
--- a/chrome/android/feed/core/javatests/src/org/chromium/chrome/browser/feed/library/feedrequestmanager/FeedRequestManagerImplTest.java
+++ b/chrome/android/feed/core/javatests/src/org/chromium/chrome/browser/feed/library/feedrequestmanager/FeedRequestManagerImplTest.java
@@ -7,6 +7,7 @@
 import static com.google.common.truth.Truth.assertThat;
 
 import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 import static org.mockito.MockitoAnnotations.initMocks;
@@ -59,6 +60,7 @@
 import org.chromium.chrome.browser.feed.library.testing.network.FakeNetworkClient;
 import org.chromium.chrome.browser.feed.library.testing.protocoladapter.FakeProtocolAdapter;
 import org.chromium.chrome.browser.flags.ChromeFeatureList;
+import org.chromium.chrome.browser.preferences.Pref;
 import org.chromium.chrome.browser.profiles.Profile;
 import org.chromium.chrome.browser.signin.IdentityServicesProvider;
 import org.chromium.chrome.browser.signin.IdentityServicesProviderJni;
@@ -77,6 +79,7 @@
 import org.chromium.components.feed.core.proto.wire.FeedActionQueryDataProto.FeedActionQueryDataItem;
 import org.chromium.components.feed.core.proto.wire.FeedQueryProto.FeedQuery;
 import org.chromium.components.feed.core.proto.wire.FeedRequestProto.FeedRequest;
+import org.chromium.components.feed.core.proto.wire.FeedResponseProto.FeedResponse;
 import org.chromium.components.feed.core.proto.wire.RequestProto.Request;
 import org.chromium.components.feed.core.proto.wire.RequestProto.Request.RequestVersion;
 import org.chromium.components.feed.core.proto.wire.ResponseProto.Response;
@@ -84,7 +87,10 @@
 import org.chromium.components.feed.core.proto.wire.VersionProto.Version;
 import org.chromium.components.feed.core.proto.wire.VersionProto.Version.Architecture;
 import org.chromium.components.feed.core.proto.wire.VersionProto.Version.BuildType;
+import org.chromium.components.prefs.PrefService;
 import org.chromium.components.signin.identitymanager.IdentityManager;
+import org.chromium.components.user_prefs.UserPrefs;
+import org.chromium.components.user_prefs.UserPrefsJni;
 import org.chromium.testing.local.LocalRobolectricTestRunner;
 
 import java.io.IOException;
@@ -118,6 +124,9 @@
     private final TimingUtils mTimingUtils = new TimingUtils();
     private final Configuration mConfiguration = new Configuration.Builder().build();
 
+    @Rule
+    public JniMocker mocker = new JniMocker();
+
     @Mock
     private SchedulerApi mScheduler;
     @Mock
@@ -128,6 +137,12 @@
     private Profile mProfileMock;
     @Mock
     private IdentityManager mIdentifiyManagerMock;
+    @Mock
+    private UserPrefs.Natives mUserPrefsJniMock;
+    @Mock
+    private Profile mProfile;
+    @Mock
+    private PrefService mPrefService;
 
     private Context mContext;
     private ExtensionRegistryLite mRegistry;
@@ -187,6 +202,9 @@
         when(mIdentityServicesProviderJniMock.getIdentityManager(mProfileMock))
                 .thenReturn(mIdentifiyManagerMock);
 
+        jniMocker.mock(UserPrefsJni.TEST_HOOKS, mUserPrefsJniMock);
+        when(mUserPrefsJniMock.get(mProfileMock)).thenReturn(mPrefService);
+
         mRequestManager = new FeedRequestManagerImpl(mConfiguration, mFakeNetworkClient,
                 mFakeProtocolAdapter, feedExtensionRegistry, mScheduler, mFakeTaskQueue,
                 mTimingUtils, mFakeThreadUtils, mFakeActionReader, mContext, mApplicationInfo,
@@ -224,6 +242,62 @@
     }
 
     @Test
+    public void testTriggerRefresh_setNoticeCardPref() throws Exception {
+        // Skip the read of the int that determines the length of the encoded proto. This is to
+        // avoid having to encode the length which is a feature we don't want to test here.
+        Configuration configuration =
+                new Configuration.Builder()
+                        .put(ConfigKey.FEED_SERVER_RESPONSE_LENGTH_PREFIXED, false)
+                        .build();
+
+        mRequestManager = new FeedRequestManagerImpl(configuration, mFakeNetworkClient,
+                mFakeProtocolAdapter, new FeedExtensionRegistry(ArrayList::new), mScheduler,
+                mFakeTaskQueue, mTimingUtils, mFakeThreadUtils, mFakeActionReader, mContext,
+                mApplicationInfo, mFakeMainThreadRunner, mFakeBasicLoggingApi,
+                mFakeTooltipSupportedApi);
+
+        Response response =
+                Response.newBuilder()
+                        .setExtension(FeedResponse.feedResponse,
+                                FeedResponse.newBuilder()
+                                        .addServerCapabilities(
+                                                Capability.REPORT_FEED_USER_ACTIONS_NOTICE_CARD)
+                                        .build())
+                        .build();
+        mFakeNetworkClient.addResponse(new HttpResponse(200, response.toByteArray()));
+        mRequestManager.triggerRefresh(RequestReason.HOST_REQUESTED, input -> {});
+
+        verify(mPrefService, times(1)).setBoolean(Pref.LAST_FETCH_HAD_NOTICE_CARD, true);
+    }
+
+    @Test
+    public void testLoadMore_setNoticeCardPref() throws Exception {
+        // Skip the read of the int that determines the length of the encoded proto. This is to
+        // avoid having to encode the length which is a feature we don't want to test here.
+        Configuration configuration =
+                new Configuration.Builder()
+                        .put(ConfigKey.FEED_SERVER_RESPONSE_LENGTH_PREFIXED, false)
+                        .build();
+
+        mRequestManager = new FeedRequestManagerImpl(configuration, mFakeNetworkClient,
+                mFakeProtocolAdapter, new FeedExtensionRegistry(ArrayList::new), mScheduler,
+                mFakeTaskQueue, mTimingUtils, mFakeThreadUtils, mFakeActionReader, mContext,
+                mApplicationInfo, mFakeMainThreadRunner, mFakeBasicLoggingApi,
+                mFakeTooltipSupportedApi);
+
+        mFakeNetworkClient.addResponse(
+                new HttpResponse(200, Response.getDefaultInstance().toByteArray()));
+        StreamToken token =
+                StreamToken.newBuilder()
+                        .setNextPageToken(ByteString.copyFrom("abc", Charset.defaultCharset()))
+                        .build();
+        mFakeThreadUtils.enforceMainThread(false);
+        mRequestManager.loadMore(token, ConsistencyToken.getDefaultInstance(), input -> {});
+
+        verify(mPrefService, never()).setBoolean(Pref.LAST_FETCH_HAD_NOTICE_CARD, true);
+    }
+
+    @Test
     public void testTriggerRefresh_FeedUiCapabilityAddedWhenFlagIsOn() throws Exception {
         testCapabilityAdded(ConfigKey.FEED_UI_ENABLED, Capability.FEED_UI);
     }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
index ca797e8..3468676 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
@@ -1497,7 +1497,8 @@
         mInactivityTracker = new ChromeInactivityTracker(
                 ChromePreferenceKeys.TABBED_ACTIVITY_LAST_BACKGROUNDED_TIME_MS_PREF);
         PaintPreviewHelper.initialize(
-                this, getTabModelSelector(), () -> getToolbarManager().getProgressBarCoordinator());
+                this, getTabModelSelector(), () -> getToolbarManager() == null ? null :
+                 getToolbarManager().getProgressBarCoordinator());
     }
 
     @Override
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java
index fe4cf431..9a74499 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java
@@ -154,6 +154,7 @@
 import org.chromium.chrome.browser.tabmodel.TabModelUtils;
 import org.chromium.chrome.browser.toolbar.ControlContainer;
 import org.chromium.chrome.browser.toolbar.ToolbarManager;
+import org.chromium.chrome.browser.translate.TranslateAssistContent;
 import org.chromium.chrome.browser.translate.TranslateBridge;
 import org.chromium.chrome.browser.ui.BottomContainer;
 import org.chromium.chrome.browser.ui.RootUiCoordinator;
@@ -1192,9 +1193,18 @@
     @TargetApi(Build.VERSION_CODES.M)
     public void onProvideAssistContent(AssistContent outContent) {
         Tab tab = getActivityTab();
+        boolean inOverviewMode = isInOverviewMode();
+
+        // Attempt to fetch translate data here so we can record UMA even if it won't be attached.
+        @Nullable
+        String structuredData = TranslateAssistContent.getTranslateDataForTab(tab, inOverviewMode);
+
         // No information is provided in incognito mode and overview mode.
-        if (tab != null && !tab.isIncognito() && !isInOverviewMode()) {
+        if (tab != null && !tab.isIncognito() && !inOverviewMode) {
             outContent.setWebUri(Uri.parse(tab.getUrlString()));
+            if (structuredData != null) {
+                outContent.setStructuredData(structuredData);
+            }
         }
     }
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/paint_preview/PaintPreviewHelper.java b/chrome/android/java/src/org/chromium/chrome/browser/paint_preview/PaintPreviewHelper.java
index 2612be83..9bcf59a 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/paint_preview/PaintPreviewHelper.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/paint_preview/PaintPreviewHelper.java
@@ -41,9 +41,9 @@
     private static boolean sHasAttemptedToShowOnRestore;
 
     /**
-     * A map for keeping Activity-specific variables and classes. New entries are added on calls
-     * to {@link #initialize(ChromeActivity, TabModelSelector)}. Entries are automatically removed
-     * when their respective Activity is destroyed.
+     * A map for keeping Activity-specific variables and classes. New entries are added on calls to
+     * {@link #initialize(ChromeActivity, TabModelSelector)}. Entries are automatically removed when
+     * their respective Activity is destroyed.
      */
     private static Map<WindowAndroid, PaintPreviewWindowAndroidHelper> sWindowAndroidHelperMap =
             new HashMap<>();
@@ -51,7 +51,8 @@
     /**
      * Initializes the logic required for the Paint Preview on startup feature. Mainly, observes a
      * {@link TabModelSelector} to monitor for initialization completion.
-     * @param activity The ChromeActivity that corresponds to the tabModelSelector.
+     *
+     * @param activity         The ChromeActivity that corresponds to the tabModelSelector.
      * @param tabModelSelector The TabModelSelector to observe.
      */
     public static void initialize(ChromeActivity<?> activity, TabModelSelector tabModelSelector,
@@ -99,13 +100,17 @@
         player.setBrowserVisibilityDelegate(
                 windowAndroidHelper.getBrowserControlsManager().getBrowserVisibilityDelegate());
         player.setProgressSimulatorNeededCallback(
-                ()
-                        -> windowAndroidHelper.getLoadProgressCoordinator()
-                                   .simulateLoadProgressCompletion());
+                () -> {
+                    if (windowAndroidHelper.getLoadProgressCoordinator() == null) return;
+                    windowAndroidHelper.getLoadProgressCoordinator()
+                            .simulateLoadProgressCompletion();
+                });
         player.setProgressbarUpdatePreventionCallback(
-                (preventProgressbar)
-                        -> windowAndroidHelper.getLoadProgressCoordinator().setPreventUpdates(
-                                preventProgressbar));
+                (preventProgressbar) -> {
+                    if (windowAndroidHelper.getLoadProgressCoordinator() == null) return;
+                    windowAndroidHelper.getLoadProgressCoordinator().setPreventUpdates(
+                            preventProgressbar);
+                });
         PageLoadMetrics.Observer observer = new PageLoadMetrics.Observer() {
             @Override
             public void onFirstMeaningfulPaint(WebContents webContents, long navigationId,
@@ -115,9 +120,9 @@
         };
 
         if (!player.maybeShow(()
-                                      -> PageLoadMetrics.removeObserver(observer),
-                    windowAndroidHelper.getActivityCreationTime(),
-                    () -> UmaUtils.hasComeToForeground() && !UmaUtils.hasComeToBackground())) {
+                        -> PageLoadMetrics.removeObserver(observer),
+                windowAndroidHelper.getActivityCreationTime(),
+                () -> UmaUtils.hasComeToForeground() && !UmaUtils.hasComeToBackground())) {
             return;
         }
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/translate/TranslateAssistContent.java b/chrome/android/java/src/org/chromium/chrome/browser/translate/TranslateAssistContent.java
new file mode 100644
index 0000000..b3f2f6e
--- /dev/null
+++ b/chrome/android/java/src/org/chromium/chrome/browser/translate/TranslateAssistContent.java
@@ -0,0 +1,141 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.chrome.browser.translate;
+
+import android.text.TextUtils;
+
+import androidx.annotation.IntDef;
+import androidx.annotation.Nullable;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import org.chromium.base.FeatureList;
+import org.chromium.base.metrics.RecordHistogram;
+import org.chromium.chrome.browser.flags.ChromeFeatureList;
+import org.chromium.chrome.browser.tab.Tab;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * Provides utilities related to providing translate information to Assistant.
+ */
+public class TranslateAssistContent {
+    public static final String TYPE_KEY = "@type";
+    public static final String TYPE_VALUE = "WebPage";
+    public static final String URL_KEY = "url";
+    public static final String IN_LANGUAGE_KEY = "inLanguage";
+    public static final String WORK_TRANSLATION_KEY = "workTranslation";
+    public static final String TRANSLATION_OF_WORK_KEY = "translationOfWork";
+
+    /**
+     * Represents the result of attempting to attach translate data to AssistContent.
+     * DO NOT reorder items in this interface, because it's mirrored to UMA (as
+     * TranslateAssistContentResult). Values should be enumerated from 0 and can't have gaps.
+     * When removing items, comment them out and keep existing numeric values stable.
+     */
+    @IntDef({TranslateAssistContentResult.FEATURE_DISABLED,
+            TranslateAssistContentResult.TAB_WAS_NULL, TranslateAssistContentResult.INCOGNITO_TAB,
+            TranslateAssistContentResult.OVERVIEW_MODE,
+            TranslateAssistContentResult.CANNOT_TRANSLATE_TAB,
+            TranslateAssistContentResult.MISSING_ORIGINAL_LANGUAGE,
+            TranslateAssistContentResult.MISSING_CURRENT_LANGUAGE,
+            TranslateAssistContentResult.JSON_EXCEPTION,
+            TranslateAssistContentResult.TRANSLATABLE_PAGE,
+            TranslateAssistContentResult.TRANSLATED_PAGE})
+    @Retention(RetentionPolicy.SOURCE)
+    public @interface TranslateAssistContentResult {
+        int FEATURE_DISABLED = 0;
+        int TAB_WAS_NULL = 1;
+        int INCOGNITO_TAB = 2;
+        int OVERVIEW_MODE = 3;
+        int CANNOT_TRANSLATE_TAB = 4;
+        int MISSING_ORIGINAL_LANGUAGE = 5;
+        int MISSING_CURRENT_LANGUAGE = 6;
+        int JSON_EXCEPTION = 7;
+        int TRANSLATABLE_PAGE = 8;
+        int TRANSLATED_PAGE = 9;
+        // Update TranslateAssistContentResult in enums.xml when adding new items.
+        int NUM_ENTRIES = 10;
+    }
+
+    private static void recordTranslateAssistContentResultUMA(
+            @TranslateAssistContentResult int result) {
+        RecordHistogram.recordEnumeratedHistogram("Translate.TranslateAssistContentResult", result,
+                TranslateAssistContentResult.NUM_ENTRIES);
+    }
+
+    /**
+     * Returns a StructuredData string populated with translate information. This is used to inform
+     * the Assistant of the current page's translate state.
+     * @param tab The tab to create translate data for.
+     * @param isInOverviewMode Whether the ChromeActivity is in overview mode.
+     * @return A JSON string of translate data to be surfaced to the Assistant via
+     *         AssistContent#setStructuredData. Returns null if there was an issue creating the
+     *         StructuredData or if the feature is disabled.
+     */
+    public static @Nullable String getTranslateDataForTab(
+            @Nullable Tab tab, boolean isInOverviewMode) {
+        if (!FeatureList.isInitialized()
+                || !ChromeFeatureList.isEnabled(ChromeFeatureList.TRANSLATE_ASSIST_CONTENT)) {
+            recordTranslateAssistContentResultUMA(TranslateAssistContentResult.FEATURE_DISABLED);
+            return null;
+        } else if (isInOverviewMode) {
+            recordTranslateAssistContentResultUMA(TranslateAssistContentResult.OVERVIEW_MODE);
+            return null;
+        } else if (tab == null) {
+            recordTranslateAssistContentResultUMA(TranslateAssistContentResult.TAB_WAS_NULL);
+            return null;
+        } else if (tab.isIncognito()) {
+            recordTranslateAssistContentResultUMA(TranslateAssistContentResult.INCOGNITO_TAB);
+            return null;
+        }
+
+        try {
+            JSONObject structuredData =
+                    new JSONObject().put(TYPE_KEY, TYPE_VALUE).put(URL_KEY, tab.getUrl().getSpec());
+            if (!TranslateBridge.canManuallyTranslate(tab)) {
+                recordTranslateAssistContentResultUMA(
+                        TranslateAssistContentResult.CANNOT_TRANSLATE_TAB);
+                return structuredData.toString();
+            }
+
+            String originalLanguageCode = TranslateBridge.getOriginalLanguage(tab);
+            if (TextUtils.isEmpty(originalLanguageCode)) {
+                recordTranslateAssistContentResultUMA(
+                        TranslateAssistContentResult.MISSING_ORIGINAL_LANGUAGE);
+                return structuredData.toString();
+            }
+            String currentLanguageCode = TranslateBridge.getCurrentLanguage(tab);
+            if (TextUtils.isEmpty(currentLanguageCode)) {
+                recordTranslateAssistContentResultUMA(
+                        TranslateAssistContentResult.MISSING_CURRENT_LANGUAGE);
+                return structuredData.toString();
+            }
+            // The target language is not necessary for Assistant to decide whether to show the
+            // translate UI.
+            String targetLanguageCode = TranslateBridge.getTargetLanguage();
+
+            structuredData.put(IN_LANGUAGE_KEY, currentLanguageCode);
+            if (currentLanguageCode.equals(originalLanguageCode)) {
+                if (!TextUtils.isEmpty(targetLanguageCode)) {
+                    structuredData.put(WORK_TRANSLATION_KEY,
+                            new JSONObject().put(IN_LANGUAGE_KEY, targetLanguageCode));
+                }
+                recordTranslateAssistContentResultUMA(
+                        TranslateAssistContentResult.TRANSLATABLE_PAGE);
+            } else {
+                structuredData.put(TRANSLATION_OF_WORK_KEY,
+                        new JSONObject().put(IN_LANGUAGE_KEY, originalLanguageCode));
+                recordTranslateAssistContentResultUMA(TranslateAssistContentResult.TRANSLATED_PAGE);
+            }
+            return structuredData.toString();
+        } catch (JSONException e) {
+            recordTranslateAssistContentResultUMA(TranslateAssistContentResult.JSON_EXCEPTION);
+            return null;
+        }
+    }
+}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/translate/TranslateBridge.java b/chrome/android/java/src/org/chromium/chrome/browser/translate/TranslateBridge.java
index 944aad1..a3eb68b 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/translate/TranslateBridge.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/translate/TranslateBridge.java
@@ -58,6 +58,22 @@
     }
 
     /**
+     * @return The original language code of the given tab. Empty string if no language was detected
+     *         yet.
+     */
+    public static String getOriginalLanguage(Tab tab) {
+        return TranslateBridgeJni.get().getOriginalLanguage(tab.getWebContents());
+    }
+
+    /**
+     * @return The current language code of the given tab. Empty string if no language was detected
+     *         yet.
+     */
+    public static String getCurrentLanguage(Tab tab) {
+        return TranslateBridgeJni.get().getCurrentLanguage(tab.getWebContents());
+    }
+
+    /**
      * @return The best target language based on what the Translate Service knows about the user.
      */
     public static String getTargetLanguage() {
@@ -200,6 +216,8 @@
         boolean canManuallyTranslate(WebContents webContents);
         boolean shouldShowManualTranslateIPH(WebContents webContents);
         void setPredefinedTargetLanguage(WebContents webContents, String targetLanguage);
+        String getOriginalLanguage(WebContents webContents);
+        String getCurrentLanguage(WebContents webContents);
         String getTargetLanguage();
         boolean isBlockedLanguage(String language);
         void getModelLanguages(LinkedHashSet<String> set);
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/translate/TranslateAssistContentTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/translate/TranslateAssistContentTest.java
new file mode 100644
index 0000000..8f991b4
--- /dev/null
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/translate/TranslateAssistContentTest.java
@@ -0,0 +1,184 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.chrome.browser.translate;
+
+import android.app.assist.AssistContent;
+import android.os.Build;
+
+import androidx.test.filters.MediumTest;
+
+import org.hamcrest.Matchers;
+import org.json.JSONException;
+import org.json.JSONObject;
+import org.junit.Assert;
+import org.junit.ClassRule;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import org.chromium.base.test.util.Batch;
+import org.chromium.base.test.util.CommandLineFlags;
+import org.chromium.base.test.util.DisabledTest;
+import org.chromium.base.test.util.MinAndroidSdkLevel;
+import org.chromium.chrome.browser.flags.ChromeFeatureList;
+import org.chromium.chrome.browser.flags.ChromeSwitches;
+import org.chromium.chrome.browser.tab.Tab;
+import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
+import org.chromium.chrome.test.ChromeTabbedActivityTestRule;
+import org.chromium.chrome.test.batch.BlankCTATabInitialStateRule;
+import org.chromium.chrome.test.util.browser.Features;
+import org.chromium.content_public.browser.test.util.Criteria;
+import org.chromium.content_public.browser.test.util.CriteriaHelper;
+import org.chromium.content_public.browser.test.util.TestThreadUtils;
+
+import java.util.concurrent.TimeoutException;
+
+/**
+ * Tests for the translate info included in onProvideAssistContent.
+ */
+@RunWith(ChromeJUnit4ClassRunner.class)
+@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE})
+@Batch(Batch.PER_CLASS)
+public class TranslateAssistContentTest {
+    @ClassRule
+    public static final ChromeTabbedActivityTestRule sActivityTestRule =
+            new ChromeTabbedActivityTestRule();
+    @Rule
+    public final BlankCTATabInitialStateRule mInitialStateRule =
+            new BlankCTATabInitialStateRule(sActivityTestRule, false);
+
+    private static final String TRANSLATE_PAGE = "/chrome/test/data/translate/fr_test.html";
+    private static final String NON_TRANSLATE_PAGE = "/chrome/test/data/android/test.html";
+
+    /**
+     * Wait until the activity tab is translatable.
+     */
+    private void waitUntilTranslatable() {
+        CriteriaHelper.pollInstrumentationThread(() -> {
+            Tab tab = sActivityTestRule.getActivity().getActivityTab();
+            Criteria.checkThat(tab, Matchers.notNullValue());
+            boolean canManuallyTranslate = TestThreadUtils.runOnUiThreadBlockingNoException(
+                    () -> TranslateBridge.canManuallyTranslate(tab));
+            Criteria.checkThat(canManuallyTranslate, Matchers.is(true));
+        });
+    }
+
+    /**
+     * Wait until the activity tab is translated.
+     */
+    private void waitUntilTranslated() {
+        CriteriaHelper.pollInstrumentationThread(() -> {
+            Tab tab = sActivityTestRule.getActivity().getActivityTab();
+            Criteria.checkThat(tab, Matchers.notNullValue());
+
+            String original = TestThreadUtils.runOnUiThreadBlockingNoException(
+                    () -> TranslateBridge.getOriginalLanguage(tab));
+            Criteria.checkThat(original, Matchers.notNullValue());
+
+            String current = TestThreadUtils.runOnUiThreadBlockingNoException(
+                    () -> TranslateBridge.getCurrentLanguage(tab));
+            Criteria.checkThat(current, Matchers.notNullValue());
+
+            Criteria.checkThat(current, Matchers.is(Matchers.not(original)));
+        });
+    }
+
+    @Test
+    @MediumTest
+    @DisabledTest(message = "https://crbug.com/1134812")
+    // onProvideAssistContent was first added in the M SDK.
+    @MinAndroidSdkLevel(Build.VERSION_CODES.M)
+    @Features.DisableFeatures({ChromeFeatureList.TRANSLATE_ASSIST_CONTENT})
+    public void testAssistContentDisabled() throws TimeoutException {
+        // Load a page that triggers the translate recommendation.
+        final String url = sActivityTestRule.getTestServer().getURL(TRANSLATE_PAGE);
+        sActivityTestRule.loadUrl(url);
+        waitUntilTranslatable();
+
+        AssistContent assistContent = new AssistContent();
+        TestThreadUtils.runOnUiThreadBlocking(
+                () -> sActivityTestRule.getActivity().onProvideAssistContent(assistContent));
+        Assert.assertNull(assistContent.getStructuredData());
+    }
+
+    @Test
+    @MediumTest
+    @DisabledTest(message = "https://crbug.com/1134812")
+    @MinAndroidSdkLevel(Build.VERSION_CODES.M)
+    @Features.EnableFeatures({ChromeFeatureList.TRANSLATE_ASSIST_CONTENT})
+    public void testAssistContentTranslatablePage() throws TimeoutException, JSONException {
+        // Load a page that triggers the translate recommendation.
+        final String url = sActivityTestRule.getTestServer().getURL(TRANSLATE_PAGE);
+        sActivityTestRule.loadUrl(url);
+        waitUntilTranslatable();
+
+        AssistContent assistContent = new AssistContent();
+        TestThreadUtils.runOnUiThreadBlocking(
+                () -> sActivityTestRule.getActivity().onProvideAssistContent(assistContent));
+
+        JSONObject structuredData = new JSONObject(assistContent.getStructuredData());
+        Assert.assertEquals(structuredData.getString(TranslateAssistContent.TYPE_KEY),
+                TranslateAssistContent.TYPE_VALUE);
+        Assert.assertEquals(structuredData.getString(TranslateAssistContent.URL_KEY), url);
+        Assert.assertEquals(structuredData.getString(TranslateAssistContent.IN_LANGUAGE_KEY), "fr");
+        Assert.assertEquals(
+                structuredData.getJSONObject(TranslateAssistContent.WORK_TRANSLATION_KEY)
+                        .getString(TranslateAssistContent.IN_LANGUAGE_KEY),
+                "en");
+    }
+
+    @Test
+    @MediumTest
+    @DisabledTest(message = "https://crbug.com/1134812")
+    @MinAndroidSdkLevel(Build.VERSION_CODES.M)
+    @Features.EnableFeatures({ChromeFeatureList.TRANSLATE_ASSIST_CONTENT})
+    public void testAssistContentTranslatedPage() throws TimeoutException, JSONException {
+        // Load a page that triggers the translate recommendation.
+        final String url = sActivityTestRule.getTestServer().getURL(TRANSLATE_PAGE);
+        sActivityTestRule.loadUrl(url);
+        waitUntilTranslatable();
+        TestThreadUtils.runOnUiThreadBlocking(
+                ()
+                        -> TranslateBridge.translateTabWhenReady(
+                                sActivityTestRule.getActivity().getActivityTab()));
+        waitUntilTranslated();
+
+        AssistContent assistContent = new AssistContent();
+        TestThreadUtils.runOnUiThreadBlocking(
+                () -> sActivityTestRule.getActivity().onProvideAssistContent(assistContent));
+
+        JSONObject structuredData = new JSONObject(assistContent.getStructuredData());
+        Assert.assertEquals(structuredData.getString(TranslateAssistContent.TYPE_KEY),
+                TranslateAssistContent.TYPE_VALUE);
+        Assert.assertEquals(structuredData.getString(TranslateAssistContent.URL_KEY), url);
+        Assert.assertEquals(structuredData.getString(TranslateAssistContent.IN_LANGUAGE_KEY), "en");
+        Assert.assertEquals(
+                structuredData.getJSONObject(TranslateAssistContent.TRANSLATION_OF_WORK_KEY)
+                        .getString(TranslateAssistContent.IN_LANGUAGE_KEY),
+                "fr");
+    }
+
+    @Test
+    @MediumTest
+    @DisabledTest(message = "https://crbug.com/1134812")
+    @MinAndroidSdkLevel(Build.VERSION_CODES.M)
+    @Features.EnableFeatures({ChromeFeatureList.TRANSLATE_ASSIST_CONTENT})
+    public void testAssistContentNonTranslatePage() throws TimeoutException, JSONException {
+        // Load a page that can't be translated.
+        final String url = sActivityTestRule.getTestServer().getURL(NON_TRANSLATE_PAGE);
+        sActivityTestRule.loadUrl(url);
+
+        AssistContent assistContent = new AssistContent();
+        TestThreadUtils.runOnUiThreadBlocking(
+                () -> sActivityTestRule.getActivity().onProvideAssistContent(assistContent));
+        JSONObject structuredData = new JSONObject(assistContent.getStructuredData());
+        Assert.assertEquals(structuredData.getString(TranslateAssistContent.TYPE_KEY),
+                TranslateAssistContent.TYPE_VALUE);
+        Assert.assertEquals(structuredData.getString(TranslateAssistContent.URL_KEY), url);
+        Assert.assertFalse(structuredData.has(TranslateAssistContent.IN_LANGUAGE_KEY));
+        Assert.assertFalse(structuredData.has(TranslateAssistContent.TRANSLATION_OF_WORK_KEY));
+        Assert.assertFalse(structuredData.has(TranslateAssistContent.WORK_TRANSLATION_KEY));
+    }
+}
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/feed/v1/FeedLoggingBridgeTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/feed/v1/FeedLoggingBridgeTest.java
index 8390a4d..2ba58197 100644
--- a/chrome/android/junit/src/org/chromium/chrome/browser/feed/v1/FeedLoggingBridgeTest.java
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/feed/v1/FeedLoggingBridgeTest.java
@@ -4,13 +4,20 @@
 package org.chromium.chrome.browser.feed.v1;
 
 import static org.junit.Assert.assertEquals;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
 
 import android.support.test.filters.SmallTest;
 
+import androidx.annotation.Nullable;
+
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
+import org.junit.rules.TestRule;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
@@ -21,13 +28,21 @@
 import org.chromium.base.test.BaseRobolectricTestRunner;
 import org.chromium.base.test.util.Feature;
 import org.chromium.base.test.util.JniMocker;
+import org.chromium.chrome.browser.feed.library.api.host.logging.ContentLoggingData;
 import org.chromium.chrome.browser.feed.library.api.host.logging.ScrollType;
 import org.chromium.chrome.browser.feed.library.common.time.testing.FakeClock;
+import org.chromium.chrome.browser.flags.ChromeFeatureList;
+import org.chromium.chrome.browser.preferences.Pref;
 import org.chromium.chrome.browser.profiles.Profile;
+import org.chromium.chrome.test.util.browser.Features;
+import org.chromium.components.prefs.PrefService;
+import org.chromium.components.user_prefs.UserPrefs;
+import org.chromium.components.user_prefs.UserPrefsJni;
 
 /** Tests of the {@link FeedLoggingBridge} class. */
 @RunWith(BaseRobolectricTestRunner.class)
 @Config(manifest = Config.NONE, shadows = {ShadowRecordHistogram.class})
+@Features.DisableFeatures(ChromeFeatureList.INTEREST_FEEDV1_CLICKS_AND_VIEWS_CONDITIONAL_UPLOAD)
 public class FeedLoggingBridgeTest {
     private static final String HISTOGRAM_ENGAGEMENT_TYPE =
             "ContentSuggestions.Feed.EngagementType";
@@ -39,16 +54,33 @@
     private FakeClock mFakeClock;
 
     @Rule
+    public TestRule mFeaturesProcessorRule = new Features.JUnitProcessor();
+
+    @Rule
     public JniMocker mocker = new JniMocker();
 
     @Mock
     private FeedLoggingBridge.Natives mFeedLoggingBridgeJniMock;
 
+    @Mock
+    private UserPrefs.Natives mUserPrefsJniMock;
+
+    @Mock
+    private Profile mProfile;
+
+    @Mock
+    private PrefService mPrefService;
+
     @Before
     public void setUp() throws Exception {
         MockitoAnnotations.initMocks(this);
         ShadowRecordHistogram.reset();
         mocker.mock(FeedLoggingBridgeJni.TEST_HOOKS, mFeedLoggingBridgeJniMock);
+
+        mocker.mock(UserPrefsJni.TEST_HOOKS, mUserPrefsJniMock);
+        Profile.setLastUsedProfileForTesting(mProfile);
+        when(mUserPrefsJniMock.get(mProfile)).thenReturn(mPrefService);
+
         Profile profile = null;
         mFakeClock = new FakeClock();
         mFeedLoggingBridge = new FeedLoggingBridge(profile, mFakeClock);
@@ -161,9 +193,85 @@
         verifyHistogram(FeedLoggingBridge.FeedEngagementType.FEED_SCROLLED, 2);
     }
 
+    @Test
+    @SmallTest
+    @Feature({"Feed"})
+    @Features.EnableFeatures(ChromeFeatureList.INTEREST_FEEDV1_CLICKS_AND_VIEWS_CONDITIONAL_UPLOAD)
+    public void onContentViewed_setPrefOnces_whenReachLoggingThresholdAndFeatureEnabled()
+            throws Exception {
+        ContentLoggingData data = makeContentData(2);
+        mFeedLoggingBridge.onContentViewed(data);
+        mFeedLoggingBridge.onContentViewed(data);
+
+        verify(mPrefService, times(1))
+                .setBoolean(Pref.HAS_REACHED_CLICK_AND_VIEW_ACTIONS_UPLOAD_CONDITIONS, true);
+    }
+
+    @Test
+    @SmallTest
+    @Feature({"Feed"})
+    @Features.DisableFeatures(ChromeFeatureList.INTEREST_FEEDV1_CLICKS_AND_VIEWS_CONDITIONAL_UPLOAD)
+    public void onContentViewed_dontSetPref_whenReachLoggingThresholdAndFeatureDisabled()
+            throws Exception {
+        ContentLoggingData data = makeContentData(2);
+        mFeedLoggingBridge.onContentViewed(data);
+
+        verify(mPrefService, never())
+                .setBoolean(Pref.HAS_REACHED_CLICK_AND_VIEW_ACTIONS_UPLOAD_CONDITIONS, true);
+    }
+
     private void verifyHistogram(int sample, int expectedCount) {
         assertEquals(expectedCount,
                 RecordHistogram.getHistogramValueCountForTesting(
                         HISTOGRAM_ENGAGEMENT_TYPE, sample));
     }
+
+    private ContentLoggingData makeContentData(int positionInStream) {
+        return new ContentLoggingData() {
+            @Override
+            public int getPositionInStream() {
+                return positionInStream;
+            }
+
+            @Override
+            public long getPublishedTimeSeconds() {
+                return 0;
+            }
+
+            @Override
+            public long getTimeContentBecameAvailable() {
+                return 0;
+            }
+
+            @Override
+            public float getScore() {
+                return 0.0f;
+            }
+
+            @Override
+            public String getRepresentationUri() {
+                return "";
+            }
+
+            @Override
+            public boolean isAvailableOffline() {
+                return true;
+            }
+
+            @Override
+            public int hashCode() {
+                return 0;
+            }
+
+            @Override
+            public boolean equals(@Nullable Object o) {
+                return true;
+            }
+
+            @Override
+            public String toString() {
+                return "";
+            }
+        };
+    }
 }
diff --git a/chrome/app/resources/chromium_strings_bs.xtb b/chrome/app/resources/chromium_strings_bs.xtb
index f57ef0e28..5b25c72 100644
--- a/chrome/app/resources/chromium_strings_bs.xtb
+++ b/chrome/app/resources/chromium_strings_bs.xtb
@@ -9,7 +9,7 @@
 <translation id="1098170124587656448">Chromium vam može pomoći da se zaštitite od narušavanja podataka, loših ekstenzija i još mnogo toga</translation>
 <translation id="1104942323762546749">Chromium želi izvesti vaše zaporke. Upišite svoju zaporku za Windows da biste to dopustili.</translation>
 <translation id="113122355610423240">Chromium je vaš zadani preglednik</translation>
-<translation id="1131805035311359397">Da biste provjerili jesu li vaše zaporke sigurne od povrede podataka i drugih poteškoća sa sigurnošću, <ph name="BEGIN_LINK" />prijavite se na Chromium<ph name="END_LINK" />.</translation>
+<translation id="1131805035311359397">Da provjerite jesu li vaše lozinke zaštićene od narušavanja podataka i drugih sigurnosnih problema, <ph name="BEGIN_LINK" />prijavite se u Chromium<ph name="END_LINK" />.</translation>
 <translation id="1185134272377778587">O programu Chromium</translation>
 <translation id="1315551408014407711">Postavite novi Chromium profil</translation>
 <translation id="1396446129537741364">Chromium pokušava prikazati lozinke.</translation>
@@ -27,12 +27,12 @@
 <translation id="1929939181775079593">Chromium ne reagira. Ponovo pokrenuti sada?</translation>
 <translation id="1966382378801805537">Chromium ne može utvrditi niti postaviti zadani preglednik</translation>
 <translation id="2008474315282236005">Ovim će se izbrisati jedna stavka s uređaja. Za preuzimanje podataka kasnije, prijavite se u Chromium kao <ph name="USER_EMAIL" />.</translation>
-<translation id="2020032459870799438">Da biste provjerili jesu li vaše druge zaporke sigurne od povrede podataka i drugih poteškoća sa sigurnošću, <ph name="BEGIN_LINK" />prijavite se na Chromium<ph name="END_LINK" />.</translation>
+<translation id="2020032459870799438">Da provjerite jesu li vaše ostale lozinke zaštićene od narušavanja podataka i drugih sigurnosnih problema, <ph name="BEGIN_LINK" />prijavite se u Chromium<ph name="END_LINK" />.</translation>
 <translation id="2185166961232948079">Chromium – prijava na mrežu – <ph name="PAGE_TITLE" /></translation>
 <translation id="2225696941839557119">Chromium OS nije uspio sinhronizirati vaše lozinke.</translation>
 <translation id="2241627712206172106">Ako dijelite računar, prijatelji i porodica mogu odvojeno pretraživati i postaviti Chromium na način koji njima odgovara.</translation>
 <translation id="2294245788148774212">Nije obavezno: Pomozite nam da poboljšamo funkcije i performanse Chromium OS-a automatskim slanjem podataka o dijagnostici i korištenju Googleu.</translation>
-<translation id="2343156876103232566">Da biste poslali broj s ovog uređaja na svoj Android telefon, prijavite se na Chromium na oba uređaja.</translation>
+<translation id="2343156876103232566">Da pošaljete broj s ovog uređaja na svoj Android telefon, prijavite se u Chromium na oba uređaja.</translation>
 <translation id="2347108572062610441">Ova ekstenzija je promijenila stranicu koja se prikazuje prilikom pokretanja Chromiuma.</translation>
 <translation id="2396765026452590966">Ekstenzija "<ph name="EXTENSION_NAME" />" je promijenila stranicu koja se prikazuje prilikom pokretanja Chromiuma.</translation>
 <translation id="2483889755041906834">U Chromiumu</translation>
@@ -78,7 +78,7 @@
 <translation id="3575459661164320785">Na vašem računaru se nalazi štetni softver. Chromium ga može ukloniti, vratiti vaše postavke i onemogućiti ekstenziju kako bi vaš preglednik ponovo radio normalno.</translation>
 <translation id="3639635944603682591">Podaci o pregledavanju za tu osobu izbrisat će se s ovog uređaja. Da biste vratili te podatke, prijavite se na Chromium kao <ph name="USER_EMAIL" />.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{Dostupno je novo ažuriranje za Chromium i primijenit će se čim ga ponovo pokrenete.}=1{Dostupno je novo ažuriranje za Chromium i primijenit će se čim ga ponovo pokrenete. Vaš anonimni prozor se neće ponovo otvoriti.}one{Dostupno je novo ažuriranje za Chromium i primijenit će se čim ga ponovo pokrenete. Vaš # anonimni prozor se neće ponovo otvoriti.}few{Dostupno je novo ažuriranje za Chromium i primijenit će se čim ga ponovo pokrenete. Vaša # anonimna prozora se neće ponovo otvoriti.}other{Dostupno je novo ažuriranje za Chromium i primijenit će se čim ga ponovo pokrenete. Vaših # anonimnih prozora se neće ponovo otvoriti.}}</translation>
-<translation id="3651803019964686660">Da biste poslali broj s uređaja <ph name="ORIGIN" /> na svoj Android telefon, prijavite se na Chromium na oba uređaja.</translation>
+<translation id="3651803019964686660">Da pošaljete broj s uređaja <ph name="ORIGIN" /> na svoj Android telefon, prijavite se u Chromium na oba uređaja.</translation>
 <translation id="3685209450716071127">Chromium ne može provjeravati vaše lozinke. Predlažemo da provjerite internetsku vezu.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{Vaš administrator traži da ponovo pokrenete Chromium radi primjene ovog ažuriranja}=1{Vaš administrator traži da ponovo pokrenete Chromium radi primjene ovog ažuriranja. Vaš anonimni prozor se neće ponovo otvoriti.}one{Vaš administrator traži da ponovo pokrenete Chromium radi primjene ovog ažuriranja. Vaš # anonimni prozor se neće ponovo otvoriti.}few{Vaš administrator traži da ponovo pokrenete Chromium radi primjene ovog ažuriranja. Vaša # anonimna prozora se neće ponovo otvoriti.}other{Vaš administrator traži da ponovo pokrenete Chromium radi primjene ovog ažuriranja. Vaših # anonimnih prozora se neće ponovo otvoriti.}}</translation>
 <translation id="3713809861844741608">Otvori link u novoj &amp;kartici Chromiuma</translation>
@@ -149,7 +149,7 @@
 <translation id="6120345080069858279">Chromium će sačuvati ovu lozinku na vašem Google računu. Nećete je morati zapamtiti.</translation>
 <translation id="6129621093834146363">Fajl <ph name="FILE_NAME" /> je opasan pa ga je Chromium blokirao.</translation>
 <translation id="6134968993075716475">Sigurno pregledanje je isključeno. Chromium preporučuje da ga uključite.</translation>
-<translation id="6183079672144801177">Obavezno se prijavite na Chromium na uređaju <ph name="TARGET_DEVICE_NAME" /> i nakon toga ponovno pokušajte poslati.</translation>
+<translation id="6183079672144801177">Provjerite jeste li prijavljeni u Chromium na svom uređaju <ph name="TARGET_DEVICE_NAME" /> i zatim pokušajte poslati ponovo.</translation>
 <translation id="6212496753309875659">Na ovom računaru se već nalazi novija verzija Chromiuma. Ako softver ne funkcionira, deinstalirajte Chromium i pokušajte ponovo.</translation>
 <translation id="6219195342503754812">{0,plural, =0{Chromium će se sada ponovo pokrenuti}=1{Chromium će se ponovo pokrenuti za 1 sekundu}one{Chromium će se ponovo pokrenuti za # sekundu}few{Chromium će se ponovo pokrenuti za # sekunde}other{Chromium će se ponovo pokrenuti za # sekundi}}</translation>
 <translation id="623836266260425961">Chromium OS nije uspio sinhronizirati vaše podatke.</translation>
diff --git a/chrome/app/resources/chromium_strings_es-419.xtb b/chrome/app/resources/chromium_strings_es-419.xtb
index 9d60281..00655ab 100644
--- a/chrome/app/resources/chromium_strings_es-419.xtb
+++ b/chrome/app/resources/chromium_strings_es-419.xtb
@@ -7,6 +7,7 @@
 <translation id="1098170124587656448">Chromium puede protegerte ante violaciones de la seguridad de los datos, extensiones dañadas y mucho más</translation>
 <translation id="1104942323762546749">Chromium desea exportar tus contraseñas. Para permitirlo, escribe tu contraseña de Windows.</translation>
 <translation id="113122355610423240">Chromium es tu navegador predeterminado</translation>
+<translation id="1131805035311359397">Para comprobar que tus contraseñas están a salvo de violaciones de la seguridad de los datos y otros problemas de seguridad, <ph name="BEGIN_LINK" />accede a Chromium<ph name="END_LINK" />.</translation>
 <translation id="1185134272377778587">Acerca de Chromium</translation>
 <translation id="1315551408014407711">Configura tu nuevo perfil de Chromium</translation>
 <translation id="1396446129537741364">Chromium está intentando mostrar contraseñas.</translation>
@@ -24,10 +25,12 @@
 <translation id="1929939181775079593">Chromium no responde. ¿Quieres reiniciarlo ahora?</translation>
 <translation id="1966382378801805537">Chromium no puede determinar ni establecer el navegador predeterminado</translation>
 <translation id="2008474315282236005">Esta acción borrará 1 elemento de este dispositivo. Si más adelante deseas recuperar los datos, accede a tu cuenta en Chromium como <ph name="USER_EMAIL" />.</translation>
+<translation id="2020032459870799438">Para comprobar que tus otras contraseñas están a salvo de violaciones de la seguridad de los datos y otros problemas de seguridad, <ph name="BEGIN_LINK" />accede a Chromium<ph name="END_LINK" />.</translation>
 <translation id="2185166961232948079">Chromium: Acceso a la red - <ph name="PAGE_TITLE" /></translation>
 <translation id="2225696941839557119">El Sistema operativo Chromium no pudo sincronizar tus contraseñas.</translation>
 <translation id="2241627712206172106">Si compartes una computadora, tus amigos y familiares pueden navegar de forma independiente y configurar Chromium según los gustos individuales.</translation>
 <translation id="2294245788148774212">Opcional: Para ayudarnos a mejorar las funciones y el rendimiento del Sistema operativo Chromium, envía automáticamente datos de uso y diagnóstico a Google.</translation>
+<translation id="2343156876103232566">Para enviar un número desde aquí a tu teléfono Android, accede a Chromium en ambos dispositivos.</translation>
 <translation id="2347108572062610441">Esta extensión cambió la página que se muestra al iniciar Chromium.</translation>
 <translation id="2396765026452590966">La extensión "<ph name="EXTENSION_NAME" />" cambió la página que se muestra al iniciar Chromium.</translation>
 <translation id="2483889755041906834">En Chromium</translation>
@@ -71,6 +74,7 @@
 <translation id="3575459661164320785">Tu computadora tiene software dañino. Chromium puede quitarlo, inhabilitar las extensiones y restablecer la configuración para que el navegador vuelva a funcionar correctamente.</translation>
 <translation id="3639635944603682591">Los datos de navegación de esta persona se borrarán de este dispositivo. Para recuperarlos, accede a Chromium como <ph name="USER_EMAIL" />.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{Hay una nueva actualización disponible para Chromium que se aplicará cuando lo reinicies.}=1{Hay una nueva actualización disponible para Chromium que se aplicará cuando lo reinicies. No se volverá a abrir la ventana de incógnito.}other{Hay una nueva actualización disponible para Chromium que se aplicará cuando lo reinicies. No se volverán a abrir las # ventanas de incógnito.}}</translation>
+<translation id="3651803019964686660">Para enviar un número desde <ph name="ORIGIN" /> a tu teléfono Android, accede a Chromium en ambos dispositivos.</translation>
 <translation id="3685209450716071127">Chromium no puede revisar las contraseñas. Revisa la conexión a Internet.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{Tu administrador solicita que reinicies Chromium para aplicar esta actualización}=1{Tu administrador solicita que reinicies Chromium para aplicar esta actualización. No se volverá a abrir la ventana de incógnito.}other{Tu administrador solicita que reinicies Chromium para aplicar esta actualización. No se volverán a abrir las # ventanas de incógnito.}}</translation>
 <translation id="3713809861844741608">Abrir vínculo en una pes&amp;taña nueva de Chromium</translation>
@@ -141,6 +145,7 @@
 <translation id="6120345080069858279">Chromium guardará esta contraseña en tu cuenta de Google, por lo que no tendrás que recordarla.</translation>
 <translation id="6129621093834146363">Chromium bloqueó <ph name="FILE_NAME" /> porque es un archivo peligroso.</translation>
 <translation id="6134968993075716475">La Navegación segura está desactivada. Chromium recomienda activarla.</translation>
+<translation id="6183079672144801177">Asegúrate de haber accedido a Chromium en tu <ph name="TARGET_DEVICE_NAME" /> y, luego, intenta enviarlo de nuevo.</translation>
 <translation id="6212496753309875659">Este equipo ya tiene una versión más reciente de Chromium. Si el software no funciona, desinstala Chromium y vuelve a intentarlo.</translation>
 <translation id="6219195342503754812">{0,plural, =0{Se reiniciará Chromium ahora}=1{Se reiniciará Chromium en 1 segundo}other{Se reiniciará Chromium en # segundos}}</translation>
 <translation id="623836266260425961">El Sistema operativo Chromium no pudo sincronizar los datos.</translation>
diff --git a/chrome/app/resources/chromium_strings_es.xtb b/chrome/app/resources/chromium_strings_es.xtb
index 9cbfefd..08aed3b7 100644
--- a/chrome/app/resources/chromium_strings_es.xtb
+++ b/chrome/app/resources/chromium_strings_es.xtb
@@ -9,6 +9,7 @@
 <translation id="1098170124587656448">Chromium puede protegerte frente a quiebras de seguridad de datos, extensiones dañinas y mucho más</translation>
 <translation id="1104942323762546749">Chromium quiere exportar tus contraseñas. Escribe tu contraseña de Windows para permitirlo.</translation>
 <translation id="113122355610423240">Chromium es tu navegador predeterminado</translation>
+<translation id="1131805035311359397">Para comprobar si tus contraseñas han sufrido quiebras de seguridad de datos u otros problemas de seguridad, <ph name="BEGIN_LINK" />inicia sesión en Chromium<ph name="END_LINK" />.</translation>
 <translation id="1185134272377778587">Información de Chromium</translation>
 <translation id="1315551408014407711">Configura tu nuevo perfil de Chromium</translation>
 <translation id="1396446129537741364">Chromium está intentando mostrar contraseñas.</translation>
@@ -26,10 +27,12 @@
 <translation id="1929939181775079593">Chromium no responde. ¿Quieres reiniciarlo ahora?</translation>
 <translation id="1966382378801805537">Chromium no puede determinar ni establecer el navegador predeterminado</translation>
 <translation id="2008474315282236005">Se eliminará un elemento de este dispositivo. Para recuperar tus datos en otro momento, inicia sesión en Chromium como <ph name="USER_EMAIL" />.</translation>
+<translation id="2020032459870799438">Para comprobar si tus otras contraseñas han sufrido quiebras de seguridad de datos u otros problemas de seguridad, <ph name="BEGIN_LINK" />inicia sesión en Chromium<ph name="END_LINK" />.</translation>
 <translation id="2185166961232948079">Chromium, inicio de sesión en la red, <ph name="PAGE_TITLE" /></translation>
 <translation id="2225696941839557119">Chromium OS no ha podido sincronizar las contraseñas.</translation>
 <translation id="2241627712206172106">Si compartes un ordenador, tus amigos y familiares pueden navegar de forma independiente y configurar Chromium a su gusto.</translation>
 <translation id="2294245788148774212">Opcional: Envía datos de uso y diagnóstico automáticamente a Google para ayudarnos a mejorar las funciones y el rendimiento de Chromium OS.</translation>
+<translation id="2343156876103232566">Para enviar un número desde aquí a tu teléfono Android, inicia sesión en Chromium con ambos dispositivos.</translation>
 <translation id="2347108572062610441">Esta extensión ha cambiado la página que se muestra al iniciar Chromium.</translation>
 <translation id="2396765026452590966">La extensión <ph name="EXTENSION_NAME" /> ha cambiado la página que se muestra al iniciar Chromium.</translation>
 <translation id="2483889755041906834">En Chromium</translation>
@@ -75,6 +78,7 @@
 <translation id="3575459661164320785">Se ha detectado software dañino en tu ordenador. Chromium puede eliminarlo, restaurar tu configuración y desactivar las extensiones para que el navegador vuelva a funcionar con normalidad.</translation>
 <translation id="3639635944603682591">Los datos de navegación de este usuario se eliminarán del dispositivo. Para recuperar tus datos, inicia sesión en Chromium como <ph name="USER_EMAIL" />.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{Hay una nueva actualización de Chromium disponible que se aplicará cuando reinicies el dispositivo.}=1{Hay una nueva actualización de Chromium disponible que se aplicará cuando reinicies el dispositivo. La ventana de incógnito no se volverá a abrir.}other{Hay una nueva actualización de Chromium disponible que se aplicará cuando reinicies el dispositivo. Las # ventanas de incógnito no se volverán a abrir.}}</translation>
+<translation id="3651803019964686660">Para enviar un número desde <ph name="ORIGIN" /> a tu teléfono Android, inicia sesión en Chromium con ambos dispositivos.</translation>
 <translation id="3685209450716071127">Chromium no puede comprobar tus contraseñas. Revisa tu conexión a Internet.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{Tu administrador pide que reinicies Chromium para aplicar esta actualización}=1{Tu administrador pide que reinicies Chromium para aplicar esta actualización La ventana de incógnito no se volverá a abrir.}other{Tu administrador pide que reinicies Chromium para aplicar esta actualización Las # ventanas de incógnito no se volverán a abrir.}}</translation>
 <translation id="3713809861844741608">Abrir enlace en una pes&amp;taña nueva de Chromium</translation>
@@ -145,6 +149,7 @@
 <translation id="6120345080069858279">Chromium guardará esta contraseña en tu cuenta de Google para que no tengas que recordarla.</translation>
 <translation id="6129621093834146363"><ph name="FILE_NAME" /> es peligroso, por lo que Chromium lo ha bloqueado.</translation>
 <translation id="6134968993075716475">La función Navegación segura está desactivada. Chromium recomienda activarla.</translation>
+<translation id="6183079672144801177">Comprueba que hayas iniciado sesión en Chromium con <ph name="TARGET_DEVICE_NAME" /> y, después, intenta enviarlo de nuevo.</translation>
 <translation id="6212496753309875659">Este ordenador ya cuenta con una versión más reciente de Chromium. Si el software no funciona, desinstala Chromium y vuelve a intentarlo.</translation>
 <translation id="6219195342503754812">{0,plural, =0{Chromium se reiniciará ahora}=1{Chromium se reiniciará dentro de 1 segundo}other{Chromium se reiniciará dentro de # segundos}}</translation>
 <translation id="623836266260425961">Chromium OS no ha podido sincronizar los datos.</translation>
diff --git a/chrome/app/resources/chromium_strings_hi.xtb b/chrome/app/resources/chromium_strings_hi.xtb
index d83396e..817f1fd 100644
--- a/chrome/app/resources/chromium_strings_hi.xtb
+++ b/chrome/app/resources/chromium_strings_hi.xtb
@@ -7,6 +7,7 @@
 <translation id="1098170124587656448">क्रोमियम, आपको डेटा के गलत इस्तेमाल से बचाता है. साथ ही, इससे आप नुकसान पहुंचाने वाले एक्सटेंशन जैसी कई चीज़ाें से सुरक्षित रह पाएंगे</translation>
 <translation id="1104942323762546749">क्रोमियम आपके पासवर्ड निर्यात करना चाहता है. इसकी मंज़ूरी देने के लिए अपना Windows पासवर्ड लिखें.</translation>
 <translation id="113122355610423240">क्रोमियम आपका डिफ़ॉल्ट ब्राउज़र है</translation>
+<translation id="1131805035311359397">डेटा के गलत इस्तेमाल और सुरक्षा की अन्य समस्याओं से आपके पासवर्ड सुरक्षित हैं या नहीं, इसकी जांच करने के लिए, <ph name="BEGIN_LINK" />क्रोमियम में साइन इन करें<ph name="END_LINK" />.</translation>
 <translation id="1185134272377778587">क्रोमियम के बारे में</translation>
 <translation id="1315551408014407711">क्रोमियम पर अपनी नई प्रोफ़ाइल सेट अप करें</translation>
 <translation id="1396446129537741364">क्रोमियम पासवर्ड दिखाने का प्रयास कर रहा है.</translation>
@@ -24,10 +25,12 @@
 <translation id="1929939181775079593">क्रोमियम अनुत्तरदायी है. अभी रीलॉन्‍च करें?</translation>
 <translation id="1966382378801805537">क्रोमियम, डिफ़ॉल्ट ब्राउज़र को तय या सेट नहीं कर सकता</translation>
 <translation id="2008474315282236005">ऐसा करने से इस डिवाइस से 1 आइटम मिट जाएगा. बाद में अपना डेटा पाने के लिए, Chromium में <ph name="USER_EMAIL" /> के रूप में साइन इन करें.</translation>
+<translation id="2020032459870799438">डेटा के गलत इस्तेमाल और सुरक्षा की अन्य समस्याओं से आपके दूसरे पासवर्ड सुरक्षित हैं या नहीं, इसकी जांच करने के लिए, <ph name="BEGIN_LINK" />क्रोमियम में साइन इन करें<ph name="END_LINK" />.</translation>
 <translation id="2185166961232948079">क्रोमियम - नेटवर्क में साइन इन करें - <ph name="PAGE_TITLE" /></translation>
 <translation id="2225696941839557119">क्रोमियम ओएस आपके पासवर्ड सिंक नहीं कर सका.</translation>
 <translation id="2241627712206172106">अगर आप किसी कंप्यूटर को शेयर करते हैं, तो दोस्त और परिवार अलग-अलग ब्राउज़ कर सकते हैं और क्रोमियम को जैसा चाहें सेट कर सकते हैं.</translation>
 <translation id="2294245788148774212">आप चाहें, तो: क्रोमियम ओएस को यह अनुमति दे सकते हैं कि वह गड़बड़ी की जानकारी और इस्तेमाल से जुड़ा डेटा Google को अपने-आप भेज सके. ऐसा करके आप क्रोमियम ओएस की सुविधाओं और परफ़ॉर्मेंस को बेहतर बनाने में मदद कर सकते हैं.</translation>
+<translation id="2343156876103232566">यहां से अपने Android फ़ोन पर नंबर भेजने के लिए, दोनों डिवाइस पर क्रोमियम में साइन इन करें.</translation>
 <translation id="2347108572062610441">इस एक्सटेंशन ने यह बदल दिया है कि जब आप क्रोमियम प्रारंभ करते हैं तब कौन सा पृष्‍ठ दिखाया जाए.</translation>
 <translation id="2396765026452590966">एक्सटेंशन "<ph name="EXTENSION_NAME" />" ने यह बदल दिया है कि जब आप क्रोमियम प्रारंभ करते हैं तब कौन सा पृष्‍ठ दिखाया जाए.</translation>
 <translation id="2483889755041906834">क्रोमियम में</translation>
@@ -73,6 +76,7 @@
 <translation id="3575459661164320785">आपके कंप्यूटर पर नुकसान पहुंचाने वाला सॉफ़्टवेयर है. क्रोमियम उसे हटा सकता है, आपकी सेटिंग को बहाल कर सकता है, और एक्सटेंशन को बंद कर सकता है, ताकि आपका ब्राउज़र फिर सामान्य रूप से काम करने लगे.</translation>
 <translation id="3639635944603682591">इस व्यक्ति का ब्राउज़िंग डेटा इस डिवाइस से मिटा दिया जाएगा. डेटा वापस पाने के लिए, क्रोमियम में <ph name="USER_EMAIL" /> के रूप में साइन इन करें.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{क्रोमियम के लिए एक नया अपडेट उपलब्ध है और जैसे ही आप फिर से लॉन्च करेंगे, अपडेट लागू कर दिया जाएगा.}=1{क्रोमियम के लिए एक नया अपडेट उपलब्ध है और जैसे ही आप फिर से लॉन्च करेंगे, अपडेट लागू कर दिया जाएगा. आपकी गुप्त विंडो फिर से नहीं खुलेगी.}one{क्रोमियम के लिए एक नया अपडेट उपलब्ध है और जैसे ही आप फिर से लॉन्च करेंगे, अपडेट लागू कर दिया जाएगा. आपकी # गुप्त विंडो फिर से नहीं खुलेंगी.}other{क्रोमियम के लिए एक नया अपडेट उपलब्ध है और जैसे ही आप फिर से लॉन्च करेंगे, अपडेट लागू कर दिया जाएगा. आपकी # गुप्त विंडो फिर से नहीं खुलेंगी.}}</translation>
+<translation id="3651803019964686660"><ph name="ORIGIN" /> से अपने Android फ़ोन पर नंबर भेजने के लिए, दोनों डिवाइस पर क्रोमियम में साइन इन करें.</translation>
 <translation id="3685209450716071127">क्रोमियम आपके पासवर्ड की जांच नहीं कर सकता. अपने इंटरनेट कनेक्शन की जांच करें.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{आपके एडमिन का कहना है कि आप यह अपडेट लागू करने के लिए क्रोमियम को फिर से लॉन्च करें}=1{आपके एडमिन का कहना है कि आप यह अपडेट लागू करने के लिए क्रोमियम को फिर से लॉन्च करें. आपकी गुप्त विंडो फिर से नहीं खुलेगी.}one{आपके एडमिन का कहना है कि आप यह अपडेट लागू करने के लिए क्रोमियम को फिर से लॉन्च करें. आपकी # गुप्त विंडो फिर से नहीं खुलेंगी.}other{आपके एडमिन का कहना है कि आप यह अपडेट लागू करने के लिए क्रोमियम को फिर से लॉन्च करें. आपकी # गुप्त विंडो फिर से नहीं खुलेंगी.}}</translation>
 <translation id="3713809861844741608">नए क्रोमियम &amp;टैब में लिंक खोलें</translation>
@@ -143,6 +147,7 @@
 <translation id="6120345080069858279">क्रोमियम इस पासवर्ड को आपके Google खाते में सेव कर लेगा. आपको इसे याद रखने की ज़रूरत नहीं है.</translation>
 <translation id="6129621093834146363"><ph name="FILE_NAME" /> खतरनाक है, इसलिए क्रोमियम ने उसे अवरोधित कर दिया है.</translation>
 <translation id="6134968993075716475">सुरक्षित ब्राउज़िंग की सुविधा बंद है. 'क्रोमियम' इसे चालू करने का सुझाव देता है.</translation>
+<translation id="6183079672144801177">पक्का करें कि आपने <ph name="TARGET_DEVICE_NAME" /> पर क्रोमियम में साइन इन किया है. इसके बाद, फिर से भेजने की कोशिश करें.</translation>
 <translation id="6212496753309875659">इस कंप्‍यूटर में पहले से क्रोमियम का ज़्यादा नया वर्शन है. अगर सॉफ़्टवेयर काम नहीं कर रहा है, तो कृपया क्रोमियम अनइंस्‍टॉल करें और फिर से प्रयास करें.</translation>
 <translation id="6219195342503754812">{0,plural, =0{क्रोमियम अभी फिर से लॉन्च होगा}=1{क्रोमियम 1 सेकंड में फिर से लॉन्च होगा}one{क्रोमियम # सेकंड में फिर से लॉन्च होगा}other{क्रोमियम # सेकंड में फिर से लॉन्च होगा}}</translation>
 <translation id="623836266260425961">क्रोमियम ओएस आपका डेटा सिंक नहीं कर सका.</translation>
diff --git a/chrome/app/resources/chromium_strings_hr.xtb b/chrome/app/resources/chromium_strings_hr.xtb
index 4cf3069..cb82751 100644
--- a/chrome/app/resources/chromium_strings_hr.xtb
+++ b/chrome/app/resources/chromium_strings_hr.xtb
@@ -147,7 +147,7 @@
 <translation id="6120345080069858279">Chromium će spremiti tu zaporku na vaš Google račun. Ne morate je pamtiti.</translation>
 <translation id="6129621093834146363">Datoteka <ph name="FILE_NAME" /> opasna je, pa ju je Chromium blokirao.</translation>
 <translation id="6134968993075716475">Sigurno je pregledavanje isključeno. Chromium preporučuje da ga uključite.</translation>
-<translation id="6183079672144801177">Obavezno se prijavite na Chromium na uređaju <ph name="TARGET_DEVICE_NAME" /> i nakon toga ponovno pokušajte poslati.</translation>
+<translation id="6183079672144801177">Obavezno se prijavite na Chromium na uređaju <ph name="TARGET_DEVICE_NAME" /> i nakon toga ponovno pokušajte sa slanjem.</translation>
 <translation id="6212496753309875659">Ovo računalo već ima noviju verziju Chromiuma. Ako softver ne funkcionira, deinstalirajte Chromium i pokušajte ponovo.</translation>
 <translation id="6219195342503754812">{0,plural, =0{Chromium će se sada ponovo pokrenuti}=1{Chromium će se ponovo pokrenuti za jednu sekundu}one{Chromium će se ponovo pokrenuti za # sekundu}few{Chromium će se ponovo pokrenuti za # sekunde}other{Chromium će se ponovo pokrenuti za # sekundi}}</translation>
 <translation id="623836266260425961">OS Chromium nije mogao sinkronizirati vaše podatke.</translation>
diff --git a/chrome/app/resources/chromium_strings_hu.xtb b/chrome/app/resources/chromium_strings_hu.xtb
index 2e458f4..b8af408 100644
--- a/chrome/app/resources/chromium_strings_hu.xtb
+++ b/chrome/app/resources/chromium_strings_hu.xtb
@@ -7,6 +7,7 @@
 <translation id="1098170124587656448">A Chromium segíthet az adatvédelmi incidensek, nem biztonságos bővítmények és egyebek elleni védekezésben</translation>
 <translation id="1104942323762546749">A Chromium exportálni szeretné a jelszavakat. Ennek engedélyezéséhez írja be Windows-jelszavát.</translation>
 <translation id="113122355610423240">A Chromium az alapértelmezett böngésző</translation>
+<translation id="1131805035311359397">Ha ellenőrizni szeretné, hogy jelszavai biztonságban vannak-e az adatvédelmi incidensektől és más biztonsági problémáktól, <ph name="BEGIN_LINK" />jelentkezzen be a Chromiumba<ph name="END_LINK" />.</translation>
 <translation id="1185134272377778587">A Chromium névjegye</translation>
 <translation id="1315551408014407711">Új Chromium-profil beállítása</translation>
 <translation id="1396446129537741364">A Chromium megpróbálja megjeleníteni a jelszavakat.</translation>
@@ -24,10 +25,12 @@
 <translation id="1929939181775079593">A Chromium nem válaszol. Újraindítja most?</translation>
 <translation id="1966382378801805537">A Chromium problémába ütközött az alapértelmezett böngésző megállapításakor vagy beállításakor</translation>
 <translation id="2008474315282236005">Ezzel egyetlen elemet töröl erről az eszközről. Az adatok későbbi lekéréséhez jelentkezzen be a Chromiumba a következő e-mail-címmel: <ph name="USER_EMAIL" />.</translation>
+<translation id="2020032459870799438">Ha ellenőrizni szeretné, hogy többi jelszava biztonságban van-e az adatvédelmi incidensektől és más biztonsági problémáktól, <ph name="BEGIN_LINK" />jelentkezzen be a Chromiumba<ph name="END_LINK" />.</translation>
 <translation id="2185166961232948079">Chromium – Hálózati bejelentkezés – <ph name="PAGE_TITLE" /></translation>
 <translation id="2225696941839557119">A Chromium OS nem tudta szinkronizálni az Ön jelszavait.</translation>
 <translation id="2241627712206172106">Ha megoszt egy számítógépet, ismerősei és családtagjai külön fiókokban internetezve a saját kívánságaik szerint állíthatják be a Chromiumot.</translation>
 <translation id="2294245788148774212">Nem kötelező: segítse a Chromium OS funkcióinak és teljesítményének javítását azzal, hogy automatikusan elküldi a diagnosztikai és használati adatokat a Google-nak.</translation>
+<translation id="2343156876103232566">Ha innen szeretne számot küldeni Android-telefonjára, jelentkezzen be a Chromiumba mindkét eszközén.</translation>
 <translation id="2347108572062610441">Ez a bővítmény módosította, hogy melyik oldal jelenjen meg a Chromium indításakor.</translation>
 <translation id="2396765026452590966">A(z) <ph name="EXTENSION_NAME" /> bővítmény módosította, hogy melyik oldal jelenjen meg a Chromium indításakor.</translation>
 <translation id="2483889755041906834">A Chromiumban</translation>
@@ -73,6 +76,7 @@
 <translation id="3575459661164320785">A számítógépen kártékony szoftver található. A Chromium képes a kártékony szoftver eltávolítására, a beállítások visszaállítására és a bővítmények letiltására, hogy a böngésző újra a szokásos módon működhessen.</translation>
 <translation id="3639635944603682591">A személy böngészési adatai törlődnek az eszközről. Az adatok visszaállításához jelentkezzen be a Chromiumba a következő felhasználóként: <ph name="USER_EMAIL" />.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{Új Chromium-frissítés jelent meg, amely az újraindítás után azonnal érvénybe lép.}=1{Új Chromium-frissítés jelent meg, amely az újraindítás után azonnal érvénybe lép. Az inkognitó ablak nem fog újra megnyílni.}other{Új Chromium-frissítés jelent meg, amely az újraindítás után azonnal érvénybe lép. A(z) # inkognitó ablak nem fog újra megnyílni.}}</translation>
+<translation id="3651803019964686660">Ha innen: <ph name="ORIGIN" /> szeretne számot küldeni Android-telefonjára, jelentkezzen be a Chromiumba mindkét eszközén.</translation>
 <translation id="3685209450716071127">A Chromium nem tudja ellenőrizni a jelszavakat. Ellenőrizze az internetkapcsolatot.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{Rendszergazdája arra kéri, hogy indítsa újra a Chromiumot a frissítés alkalmazásához.}=1{Rendszergazdája arra kéri, hogy indítsa újra a Chromiumot a frissítés alkalmazásához. Az inkognitó ablak nem fog újra megnyílni.}other{Rendszergazdája arra kéri, hogy indítsa újra a Chromiumot a frissítés alkalmazásához. A(z) # inkognitó ablak nem fog újra megnyílni.}}</translation>
 <translation id="3713809861844741608">Link megnyi&amp;tása új Chromium-lapon</translation>
@@ -143,6 +147,7 @@
 <translation id="6120345080069858279">A Chromium ezt a jelszót Google-fiókjába menti. Nem kell megjegyeznie.</translation>
 <translation id="6129621093834146363">A(z) <ph name="FILE_NAME" /> veszélyes, ezért a Chromium letiltotta.</translation>
 <translation id="6134968993075716475">A Biztonságos Böngészés ki van kapcsolva. A Chromium a szolgáltatás bekapcsolását javasolja.</translation>
+<translation id="6183079672144801177">Ellenőrizze, hogy bejelentkezett-e a Chromiumba <ph name="TARGET_DEVICE_NAME" /> eszközén, majd próbálja meg újraküldeni.</translation>
 <translation id="6212496753309875659">A számítógépen már megtalálható a Chromium újabb verziója. Ha a szoftver nem működik, kérjük, távolítsa el a Chromiumot, majd próbálkozzon újra.</translation>
 <translation id="6219195342503754812">{0,plural, =0{A Chromium most újraindul}=1{A Chromium 1 másodpercen belül újraindul}other{A Chromium # másodpercen belül újraindul}}</translation>
 <translation id="623836266260425961">A Chromium OS nem tudta szinkronizálni az adatait.</translation>
diff --git a/chrome/app/resources/chromium_strings_it.xtb b/chrome/app/resources/chromium_strings_it.xtb
index 1c08f1e..380a4ef 100644
--- a/chrome/app/resources/chromium_strings_it.xtb
+++ b/chrome/app/resources/chromium_strings_it.xtb
@@ -7,6 +7,7 @@
 <translation id="1098170124587656448">Chromium può contribuire a proteggerti da violazioni dei dati, estensioni non valide e non solo</translation>
 <translation id="1104942323762546749">Chromium vuole esportare le password. Per consentire l'esportazione, digita la tua password Windows.</translation>
 <translation id="113122355610423240">Chromium è il tuo browser predefinito</translation>
+<translation id="1131805035311359397">Per controllare che le tue password siano protette da violazioni dei dati e altri problemi di sicurezza, <ph name="BEGIN_LINK" />accedi a Chromium<ph name="END_LINK" />.</translation>
 <translation id="1185134272377778587">Informazioni su Chromium</translation>
 <translation id="1315551408014407711">Configura il tuo nuovo profilo di Chromium</translation>
 <translation id="1396446129537741364">Chromium sta cercando di visualizzare le password.</translation>
@@ -24,10 +25,12 @@
 <translation id="1929939181775079593">Chromium non risponde. Riavviarlo ora?</translation>
 <translation id="1966382378801805537">Chromium non è in grado di determinare o impostare il browser predefinito</translation>
 <translation id="2008474315282236005">Verrà eliminato 1 elemento da questo dispositivo. Per recuperare i dati in un secondo momento, accedi a Chromium come <ph name="USER_EMAIL" />.</translation>
+<translation id="2020032459870799438">Per controllare che le tue altre password siano protette da violazioni dei dati e altri problemi di sicurezza, <ph name="BEGIN_LINK" />accedi a Chromium<ph name="END_LINK" />.</translation>
 <translation id="2185166961232948079">Chromium - Accesso rete - <ph name="PAGE_TITLE" /></translation>
 <translation id="2225696941839557119">Impossibile sincronizzare le password in Chromium OS.</translation>
 <translation id="2241627712206172106">Se condividi un computer, i tuoi amici e la tua famiglia possono navigare separatamente e configurare Chromium in base alle proprie esigenze.</translation>
 <translation id="2294245788148774212">(Facoltativo) Contribuisci a migliorare le funzionalità e le prestazioni di Chromium OS inviando automaticamente a Google dati diagnostici e sull'utilizzo.</translation>
+<translation id="2343156876103232566">Per inviare un numero da questo dispositivo al tuo telefono Android, accedi a Chromium su entrambi i dispositivi.</translation>
 <translation id="2347108572062610441">Questa estensione ha cambiato la pagina mostrata all'avvio di Chromium.</translation>
 <translation id="2396765026452590966">L'estensione "<ph name="EXTENSION_NAME" />" ha cambiato la pagina mostrata all'avvio di Chromium.</translation>
 <translation id="2483889755041906834">In Chromium</translation>
@@ -73,6 +76,7 @@
 <translation id="3575459661164320785">È stato rilevato software dannoso sul tuo computer. Chromium può rimuoverlo, ripristinare le tue impostazioni e disattivare le estensioni per ristabilire il normale funzionamento del browser.</translation>
 <translation id="3639635944603682591">I dati di navigazione di questa persona verranno eliminati dal dispositivo. Per recuperare i dati, accedi a Chromium con il nome utente <ph name="USER_EMAIL" />.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{È disponibile un nuovo aggiornamento di Chromium che verrà installato appena eseguirai il riavvio.}=1{È disponibile un nuovo aggiornamento di Chromium che verrà installato appena eseguirai il riavvio. La finestra di navigazione in incognito non verrà riaperta.}other{È disponibile un nuovo aggiornamento di Chromium che verrà installato appena eseguirai il riavvio. Le # finestre di navigazione in incognito non verranno riaperte.}}</translation>
+<translation id="3651803019964686660">Per inviare un numero da <ph name="ORIGIN" /> al tuo telefono Android, accedi a Chromium su entrambi i dispositivi.</translation>
 <translation id="3685209450716071127">Chromium non può controllare le tue password. Prova a controllare la connessione a Internet.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{L'amministratore richiede il riavvio di Chromium per installare questo aggiornamento}=1{L'amministratore richiede il riavvio di Chromium per installare questo aggiornamento. La finestra di navigazione in incognito non verrà riaperta.}other{L'amministratore richiede il riavvio di Chromium per installare questo aggiornamento. Le # finestre di navigazione in incognito non verranno riaperte.}}</translation>
 <translation id="3713809861844741608">Apri link in una nuova &amp;scheda di Chromium</translation>
@@ -143,6 +147,7 @@
 <translation id="6120345080069858279">Chromium salverà la password nel tuo Account Google affinché tu non debba memorizzarla.</translation>
 <translation id="6129621093834146363"><ph name="FILE_NAME" /> è pericoloso, pertanto è stato bloccato da Chromium.</translation>
 <translation id="6134968993075716475">Navigazione sicura è disattivata. Chromium consiglia di attivarla.</translation>
+<translation id="6183079672144801177">Assicurati di aver effettuato l'accesso a Chromium sul tuo dispositivo <ph name="TARGET_DEVICE_NAME" /> e prova a inviare di nuovo.</translation>
 <translation id="6212496753309875659">Questo computer ha già una versione più recente di Chromium. Se il software non funziona, disinstalla Chromium e riprova.</translation>
 <translation id="6219195342503754812">{0,plural, =0{Chromium verrà riavviato ora}=1{Chromium verrà riavviato tra 1 secondo}other{Chromium verrà riavviato tra # secondi}}</translation>
 <translation id="623836266260425961">Impossibile sincronizzare i dati in Chromium OS.</translation>
diff --git a/chrome/app/resources/chromium_strings_ml.xtb b/chrome/app/resources/chromium_strings_ml.xtb
index d55b8b6..3de79dc 100644
--- a/chrome/app/resources/chromium_strings_ml.xtb
+++ b/chrome/app/resources/chromium_strings_ml.xtb
@@ -9,6 +9,7 @@
 <translation id="1098170124587656448">ഡാറ്റാ ലംഘനങ്ങൾ, മോശം വിപുലീകരണങ്ങൾ എന്നിവയിൽ നിന്നും മറ്റും നിങ്ങളെ സുരക്ഷിതമായി നിലനിർത്താൻ Chromium സഹായിക്കും</translation>
 <translation id="1104942323762546749">നിങ്ങളുടെ പാസ്‌വേഡുകൾ എക്‌സ്‌പോർട്ട് ചെയ്യാൻ Chromium ആഗ്രഹിക്കുന്നു. ഇത് അനുവദിക്കാൻ നിങ്ങളുടെ Windows പാസ്‌വേഡ് നൽകുക.</translation>
 <translation id="113122355610423240">Chromium നിങ്ങളുടെ ഡിഫോൾട്ട് ബ്രൗസറാണ്</translation>
+<translation id="1131805035311359397">ഡാറ്റാ ലംഘനങ്ങളിൽ നിന്നും മറ്റ് സുരക്ഷാ പ്രശ്‌നങ്ങളിൽ നിന്നും നിങ്ങളുടെ പാസ്‌വേഡുകൾ സുരക്ഷിതമാണോ എന്ന് പരിശോധിക്കാൻ, <ph name="BEGIN_LINK" />Chromium-ൽ സൈൻ ഇൻ ചെയ്യുക<ph name="END_LINK" />.</translation>
 <translation id="1185134272377778587">Chromium-ത്തിനെക്കുറിച്ച്</translation>
 <translation id="1315551408014407711">നിങ്ങളുടെ പുതിയ Chromium പ്രൊഫൈൽ സജ്ജീകരിക്കുക</translation>
 <translation id="1396446129537741364">Chromium പാസ്‌വേഡുകൾ ദൃശ്യമാക്കാൻ ശ്രമിക്കുന്നു.</translation>
@@ -26,10 +27,12 @@
 <translation id="1929939181775079593">Chromium പ്രതികരിക്കുന്നില്ല. ഇപ്പോൾ വീണ്ടും സമാരംഭിക്കണോ?</translation>
 <translation id="1966382378801805537">Chromium-ത്തിന് ഡിഫോൾട്ട് ബ്രൗസർ നിർണ്ണയിക്കാനോ സജ്ജമാക്കാനോ കഴിയില്ല</translation>
 <translation id="2008474315282236005">ഇത് ഈ ഉപകരണത്തിൽ നിന്നും ഒരിനം ഇല്ലാതാക്കും. പിന്നീട് നിങ്ങളുടെ വിവരങ്ങൾ വീണ്ടെടുക്കാൻ, <ph name="USER_EMAIL" /> എന്നയാളായി Chromium-ൽ സൈൻ ഇൻ ചെയ്യുക.</translation>
+<translation id="2020032459870799438">ഡാറ്റാ ലംഘനങ്ങളിൽ നിന്നും മറ്റ് സുരക്ഷാ പ്രശ്‌നങ്ങളിൽ നിന്നും നിങ്ങളുടെ മറ്റ് പാസ്‌വേഡുകൾ സുരക്ഷിതമാണോ എന്ന് പരിശോധിക്കാൻ, <ph name="BEGIN_LINK" />Chromium-ൽ സൈൻ ഇൻ ചെയ്യുക<ph name="END_LINK" />.</translation>
 <translation id="2185166961232948079">Chromium - നെറ്റ്‌വർക്ക് സൈൻ ഇൻ - <ph name="PAGE_TITLE" /></translation>
 <translation id="2225696941839557119">Chromium OS-ന് നിങ്ങളുടെ പാസ്‌വേഡുകൾ സമന്വയിപ്പിക്കാനായില്ല.</translation>
 <translation id="2241627712206172106">നിങ്ങളൊരു കമ്പ്യൂട്ടർ പങ്കിടുകയാണെങ്കിൽ, സുഹൃത്തുക്കൾക്കും കുടുബാംഗങ്ങൾക്കും വെവ്വേറെ ബ്രൗസ് ചെയ്യാനും അവർക്ക് ആവശ്യമുള്ള രീതിയിൽ Chromium സജ്ജീകരിക്കാനുമാകും.</translation>
 <translation id="2294245788148774212">ഓപ്ഷണൽ: പ്രശ്‍നനിർണ്ണയ, ഉപയോഗ വിവരങ്ങൾ Google-ന് സ്വയമേവ അയച്ചുകൊണ്ട് Chromium OS ഫീച്ചറുകളും പ്രകടനവും മെച്ചപ്പെടുത്താൻ സഹായിക്കുക.</translation>
+<translation id="2343156876103232566">ഇവിടെ നിന്ന് നിങ്ങളുടെ Android ഫോണിലേക്ക് ഒരു നമ്പർ അയയ്‌ക്കാൻ, രണ്ട് ഉപകരണങ്ങളിൽ നിന്നും Chromium-ൽ സൈൻ ഇൻ ചെയ്യുക.</translation>
 <translation id="2347108572062610441">നിങ്ങൾ Chromium ആരംഭിക്കുമ്പോൾ ദൃശ്യമാകുന്ന പേജിനെ ഈ വിപുലീകരണം മാറ്റി.</translation>
 <translation id="2396765026452590966">നിങ്ങൾ Chromium ആരംഭിക്കുമ്പോൾ ദൃശ്യമാകുന്ന പേജിനെ "<ph name="EXTENSION_NAME" />" വിപുലീകരണം മാറ്റി.</translation>
 <translation id="2483889755041906834">Chromium-ത്തിൽ</translation>
@@ -75,6 +78,7 @@
 <translation id="3575459661164320785">നിങ്ങളുടെ കമ്പ്യൂട്ടറിൽ ദോഷകരമായ സോഫ്‌റ്റ്‌വെയറുണ്ട്. നിങ്ങളുടെ ബ്രൗസർ വീണ്ടും സാധാരണ രീതിയിൽ പ്രവർത്തിക്കാൻ, Chromium-ന് ഇത് നീക്കം ചെയ്യാനും ക്രമീകരണം പുനഃസ്ഥാപിക്കാനും വിപുലീകരണം പ്രവർത്തനരഹിതമാക്കാനുമാവും.</translation>
 <translation id="3639635944603682591">ഈ ഉപകരണത്തിൽ നിന്ന് ഈ വ്യക്തിയുടെ ബ്രൗസിംഗ് ഡാറ്റ ഇല്ലാതാക്കും. ഡാറ്റ വീണ്ടെടുക്കാൻ, <ph name="USER_EMAIL" /> എന്നതായി Chromium-ത്തിലേക്ക് സൈൻ ഇൻ ചെയ്യുക.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{Chromium-നുള്ള പുതിയൊരു അപ്ഡേറ്റ് ലഭ്യമാണ്, നിങ്ങൾ വീണ്ടും ആരംഭിച്ച ഉടൻ തന്നെ അത് ബാധകമാക്കും.}=1{Chromium-നുള്ള പുതിയൊരു അപ്ഡേറ്റ് ലഭ്യമാണ്, നിങ്ങൾ വീണ്ടും ആരംഭിച്ച ഉടൻ തന്നെ അത് ബാധകമാക്കും. നിങ്ങളുടെ അദൃശ്യ വിൻഡോ വീണ്ടും തുറക്കില്ല.}other{Chromium-നുള്ള പുതിയൊരു അപ്ഡേറ്റ് ലഭ്യമാണ്, നിങ്ങൾ വീണ്ടും ആരംഭിച്ച ഉടൻ തന്നെ അത് ബാധകമാക്കും. നിങ്ങളുടെ # അദൃശ്യ വിൻഡോകൾ വീണ്ടും തുറക്കില്ല.}}</translation>
+<translation id="3651803019964686660"><ph name="ORIGIN" /> എന്നതിൽ നിന്ന് നിങ്ങളുടെ Android ഫോണിലേക്ക് ഒരു നമ്പർ അയയ്‌ക്കാൻ, രണ്ട് ഉപകരണങ്ങളിൽ നിന്നും Chromium-ൽ സൈൻ ഇൻ ചെയ്യുക.</translation>
 <translation id="3685209450716071127">Chromium-ന് നിങ്ങളുടെ പാസ്‌വേഡുകൾ പരിശോധിക്കാനാവില്ല. നിങ്ങളുടെ ഇന്റർനെറ്റ് കണക്ഷൻ പരിശോധിക്കുക.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{ഈ അപ്‌ഡേറ്റ് പ്രയോഗിക്കുന്നതിന് Chromium വീണ്ടും ആരംഭിക്കാൻ നിങ്ങളുടെ അഡ്‌മിൻ ആവശ്യപ്പെടുന്നു}=1{ഈ അപ്‌ഡേറ്റ് പ്രയോഗിക്കുന്നതിന് Chromium വീണ്ടും ആരംഭിക്കാൻ നിങ്ങളുടെ അഡ്‌മിൻ ആവശ്യപ്പെടുന്നു. നിങ്ങളുടെ അദൃശ്യ വിൻഡോ വീണ്ടും തുറക്കില്ല.}other{ഈ അപ്‌ഡേറ്റ് പ്രയോഗിക്കുന്നതിന് Chromium വീണ്ടും ആരംഭിക്കാൻ നിങ്ങളുടെ അഡ്‌മിൻ ആവശ്യപ്പെടുന്നു. നിങ്ങളുടെ # അദൃശ്യ വിൻഡോകൾ വീണ്ടും തുറക്കില്ല.}}</translation>
 <translation id="3713809861844741608">Chromium അദൃശ്യ വിൻഡോയിൽ ലിങ്ക് തുറക്കുക</translation>
@@ -145,6 +149,7 @@
 <translation id="6120345080069858279">നിങ്ങളുടെ Google അക്കൗണ്ടിൽ Chromium ഈ പാസ്‌വേഡ് സംരക്ഷിക്കും. നിങ്ങൾ അത് ഓർത്ത് വയ്ക്കേണ്ടതില്ല.</translation>
 <translation id="6129621093834146363"><ph name="FILE_NAME" /> അപകടകരമായതിനാൽ, Chromium ഇതിനെ ബ്ലോക്കുചെയ്‌തു.</translation>
 <translation id="6134968993075716475">സുരക്ഷിത ബ്രൗസിംഗ് ഓഫാണ്. ഇത് ഓണാക്കാൻ Chromium നിർദ്ദേശിക്കുന്നു.</translation>
+<translation id="6183079672144801177">നിങ്ങൾ <ph name="TARGET_DEVICE_NAME" /> ഉപകരണത്തിൽ Chromium-ലാണ് സൈൻ ഇൻ ചെയ്‌തിരിക്കുന്നതെന്ന് ഉറപ്പാക്കുക, തുടർന്ന് വീണ്ടും അയയ്‌ക്കാൻ ശ്രമിക്കുക.</translation>
 <translation id="6212496753309875659">Chromium-ത്തിന്റെ ഏറ്റവും പുതിയ പതിപ്പ് ഈ കമ്പ്യൂട്ടറില്‍ ഇപ്പോൾ തന്നെയുണ്ട്. സോഫ്റ്റ്‌വെയര്‍ പ്രവര്‍ത്തിക്കുന്നില്ലെങ്കില്‍, Chromium അൺഇൻസ്റ്റാൾ ചെയ്‌ത് വീണ്ടും ശ്രമിക്കുക.</translation>
 <translation id="6219195342503754812">{0,plural, =0{Chromium ഇപ്പോൾ വീണ്ടും സമാരംഭിക്കും}=1{ഒരു സെക്കൻഡിൽ Chromium വീണ്ടും സമാരംഭിക്കും}other{# സെക്കൻഡിൽ Chromium വീണ്ടും സമാരംഭിക്കും}}</translation>
 <translation id="623836266260425961">Chromium OS-ന് നിങ്ങളുടെ ഡാറ്റ സമന്വയിപ്പിക്കാനായില്ല.</translation>
diff --git a/chrome/app/resources/chromium_strings_no.xtb b/chrome/app/resources/chromium_strings_no.xtb
index 978d099..566e955 100644
--- a/chrome/app/resources/chromium_strings_no.xtb
+++ b/chrome/app/resources/chromium_strings_no.xtb
@@ -7,6 +7,7 @@
 <translation id="1098170124587656448">Chromium kan beskytte deg mot databrudd, ondsinnede utvidelser med mer</translation>
 <translation id="1104942323762546749">Chromium forsøker å eksportere passordene dine. Skriv inn Windows-passordet ditt for å tillate dette.</translation>
 <translation id="113122355610423240">Chromium er standardnettleseren din</translation>
+<translation id="1131805035311359397">For å sjekke om passordene dine er trygge mot databrudd og andre sikkerhetsproblemer, <ph name="BEGIN_LINK" />logg på Chromium<ph name="END_LINK" />.</translation>
 <translation id="1185134272377778587">Om Chromium</translation>
 <translation id="1315551408014407711">Konfigurer den nye Chromium-profilen din</translation>
 <translation id="1396446129537741364">Chromium prøver å vise passord.</translation>
@@ -24,10 +25,12 @@
 <translation id="1929939181775079593">Chromium svarer ikke. Vil du starte den på nytt nå?</translation>
 <translation id="1966382378801805537">Chromium kan ikke fastslå eller angi standardnettleseren</translation>
 <translation id="2008474315282236005">Dette sletter 1 element fra denne enheten. For å hente dataene dine igjen senere må du logge på Chromium som <ph name="USER_EMAIL" />.</translation>
+<translation id="2020032459870799438">For å sjekke om de andre passordene dine er trygge mot databrudd og andre sikkerhetsproblemer, <ph name="BEGIN_LINK" />logg på Chromium<ph name="END_LINK" />.</translation>
 <translation id="2185166961232948079">Chromium – nettverkspålogging – <ph name="PAGE_TITLE" /></translation>
 <translation id="2225696941839557119">Chromium OS kunne ikke synkronisere passordene dine.</translation>
 <translation id="2241627712206172106">Hvis du deler en datamaskin med andre, kan venner og familie surfe hver for seg og konfigurere Chromium akkurat slik de vil.</translation>
 <translation id="2294245788148774212">Valgfritt: Bidra til å gjøre funksjonene og ytelsen til Chromium OS bedre ved å sende diagnostikk og bruksdata automatisk til Google.</translation>
+<translation id="2343156876103232566">For å sende numre herfra til Android-telefonen din, logg på Chromium på begge enhetene.</translation>
 <translation id="2347108572062610441">Denne utvidelsen har endret hvilken side som vises når du starter Chromium.</translation>
 <translation id="2396765026452590966">Utvidelsen «<ph name="EXTENSION_NAME" />» har endret hvilken side som vises når du starter Chromium.</translation>
 <translation id="2483889755041906834">I Chromium</translation>
@@ -73,6 +76,7 @@
 <translation id="3575459661164320785">Det finnes skadelig programvare på datamaskinen din. Chromium kan fjerne den, gjenopprette innstillingene dine og deaktivere utvidelser for å få nettleseren til å fungere som normalt igjen.</translation>
 <translation id="3639635944603682591">Denne personens nettlesingsdata slettes fra denne enheten. For å gjenopprette dataene, logg på Chromium som <ph name="USER_EMAIL" />.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{En ny oppdatering for Chromium er tilgjengelig og tas i bruk når du starter Chromium på nytt.}=1{En ny oppdatering for Chromium er tilgjengelig og tas i bruk når du starter Chromium på nytt. Inkognitovinduet ditt blir ikke gjenåpnet.}other{En ny oppdatering for Chromium er tilgjengelig og tas i bruk når du starter Chromium på nytt. De # inkognitovinduene dine blir ikke gjenåpnet.}}</translation>
+<translation id="3651803019964686660">For å sende numre fra <ph name="ORIGIN" /> til Android-telefonen din, logg på Chromium på begge enhetene.</translation>
 <translation id="3685209450716071127">Chromium kan ikke sjekke passordene dine. Prøv å kontrollere internettilkoblingen.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{Administratoren din ber deg om å starte Chromium på nytt for å ta i bruk denne oppdateringen}=1{Administratoren din ber deg om å starte Chromium på nytt for å ta i bruk denne oppdateringen. Inkognitovinduet ditt blir ikke gjenåpnet.}other{Administratoren din ber deg om å starte Chromium på nytt for å ta i bruk denne oppdateringen. De # inkognitovinduene dine blir ikke gjenåpnet.}}</translation>
 <translation id="3713809861844741608">Åpne linken i en ny fane i Chromium</translation>
@@ -143,6 +147,7 @@
 <translation id="6120345080069858279">Chromium lagrer dette passordet i Google-kontoen din, så du trenger ikke å huske det.</translation>
 <translation id="6129621093834146363"><ph name="FILE_NAME" /> er farlig, så Chromium har blokkert den.</translation>
 <translation id="6134968993075716475">Safe Browsing er slått av. Chromium anbefaler at du slår det på.</translation>
+<translation id="6183079672144801177">Sørg for at du er logget på Chromium på <ph name="TARGET_DEVICE_NAME" />, og prøv å sende på nytt.</translation>
 <translation id="6212496753309875659">Denne datamaskinen har allerede en nyere versjon av Chromium. Hvis programvaren ikke fungerer, må du avinstallere Chromium og prøve på nytt.</translation>
 <translation id="6219195342503754812">{0,plural, =0{Chromium startes på nytt nå}=1{Chromium startes på nytt om 1 sekund}other{Chromium startes på nytt om # sekunder}}</translation>
 <translation id="623836266260425961">Chromium OS kunne ikke synkronisere dataene dine.</translation>
diff --git a/chrome/app/resources/chromium_strings_pl.xtb b/chrome/app/resources/chromium_strings_pl.xtb
index e0393659..884d3fddd 100644
--- a/chrome/app/resources/chromium_strings_pl.xtb
+++ b/chrome/app/resources/chromium_strings_pl.xtb
@@ -7,6 +7,7 @@
 <translation id="1098170124587656448">Chromium pomaga chronić Cię przed naruszeniami bezpieczeństwa danych, niebezpiecznymi rozszerzeniami i innymi zagrożeniami.</translation>
 <translation id="1104942323762546749">Chromium chce wyeksportować Twoje hasła. Wpisz swoje hasło do Windows, by na to zezwolić.</translation>
 <translation id="113122355610423240">Chromium jest domyślną przeglądarką</translation>
+<translation id="1131805035311359397">Aby sprawdzić, czy Twoje hasła są chronione przed naruszeniami bezpieczeństwa danych i innymi zagrożeniami tego typu, <ph name="BEGIN_LINK" />zaloguj się w Chromium<ph name="END_LINK" />.</translation>
 <translation id="1185134272377778587">Chromium – informacje</translation>
 <translation id="1315551408014407711">Skonfiguruj nowy profil w Chromium</translation>
 <translation id="1396446129537741364">Chromium próbuje pokazać hasła.</translation>
@@ -24,10 +25,12 @@
 <translation id="1929939181775079593">Chromium nie odpowiada. Uruchomić go teraz ponownie?</translation>
 <translation id="1966382378801805537">Chromium nie może określić ani ustawić domyślnej przeglądarki</translation>
 <translation id="2008474315282236005">Spowoduje to usunięcie 1 elementu z tego urządzenia. Aby później odzyskać dane, zaloguj się w Chromium jako <ph name="USER_EMAIL" />.</translation>
+<translation id="2020032459870799438">Aby sprawdzić, czy Twoje pozostałe hasła są chronione przed naruszeniami bezpieczeństwa danych i innymi zagrożeniami tego typu, <ph name="BEGIN_LINK" />zaloguj się w Chromium<ph name="END_LINK" />.</translation>
 <translation id="2185166961232948079">Chromium – logowanie do sieci – <ph name="PAGE_TITLE" /></translation>
 <translation id="2225696941839557119">System operacyjny Chromium nie może zsynchronizować haseł.</translation>
 <translation id="2241627712206172106">Jeśli dzielisz się komputerem ze znajomymi lub rodziną, wszyscy możecie niezależnie przeglądać internet i po swojemu skonfigurować Chromium.</translation>
 <translation id="2294245788148774212">Opcjonalnie: pomóż ulepszyć funkcje i działanie Systemu operacyjnego Chromium, automatycznie wysyłając do Google dane diagnostyczne i dane o korzystaniu.</translation>
+<translation id="2343156876103232566">Aby wysłać stąd numer na swój telefon z Androidem, zaloguj się w Chromium na obu urządzeniach.</translation>
 <translation id="2347108572062610441">To rozszerzenie ustawiło inną stronę wyświetlaną po uruchomieniu Chromium.</translation>
 <translation id="2396765026452590966">Rozszerzenie „<ph name="EXTENSION_NAME" />” ustawiło inną stronę wyświetlaną po uruchomieniu Chromium.</translation>
 <translation id="2483889755041906834">W Chromium</translation>
@@ -71,6 +74,7 @@
 <translation id="3575459661164320785">Masz na komputerze szkodliwe oprogramowanie. Chromium może je usunąć, przywrócić Twoje ustawienia i wyłączyć rozszerzenia, by przeglądarka znów działała normalnie.</translation>
 <translation id="3639635944603682591">Dane przeglądania tej osoby zostaną usunięte z tego urządzenia. Aby je odzyskać, zaloguj się w Chromium jako <ph name="USER_EMAIL" />.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{Dostępna jest aktualizacja Chromium, która zostanie zastosowana natychmiast po ponownym uruchomieniu aplikacji.}=1{Dostępna jest aktualizacja Chromium, która zostanie zastosowana natychmiast po ponownym uruchomieniu aplikacji. Okno incognito nie otworzy się ponownie.}few{Dostępna jest aktualizacja Chromium, która zostanie zastosowana natychmiast po ponownym uruchomieniu aplikacji. # okna incognito nie otworzą się ponownie.}many{Dostępna jest aktualizacja Chromium, która zostanie zastosowana natychmiast po ponownym uruchomieniu aplikacji. # okien incognito nie otworzy się ponownie.}other{Dostępna jest aktualizacja Chromium, która zostanie zastosowana natychmiast po ponownym uruchomieniu aplikacji. # okna incognito nie otworzy się ponownie.}}</translation>
+<translation id="3651803019964686660">Aby wysłać numer z <ph name="ORIGIN" /> na swój telefon z Androidem, zaloguj się w Chromium na obu urządzeniach.</translation>
 <translation id="3685209450716071127">Chromium nie może sprawdzić Twoich haseł. Sprawdź połączenie z internetem.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{Administrator prosi o ponowne uruchomienie Chromium, by przeglądarka mogła zainstalować tę aktualizację}=1{Administrator prosi o ponowne uruchomienie Chromium, by przeglądarka mogła zainstalować tę aktualizację. Okno incognito nie otworzy się ponownie.}few{Administrator prosi o ponowne uruchomienie Chromium, by przeglądarka mogła zainstalować tę aktualizację. # okna incognito nie otworzą się ponownie.}many{Administrator prosi o ponowne uruchomienie Chromium, by przeglądarka mogła zainstalować tę aktualizację. # okien incognito nie otworzy się ponownie.}other{Administrator prosi o ponowne uruchomienie Chromium, by przeglądarka mogła zainstalować tę aktualizację. # okna incognito nie otworzy się ponownie.}}</translation>
 <translation id="3713809861844741608">O&amp;twórz link w nowej karcie Chromium</translation>
@@ -141,6 +145,7 @@
 <translation id="6120345080069858279">Chromium zapisze to hasło na Twoim koncie Google. Nie musisz go pamiętać.</translation>
 <translation id="6129621093834146363">Plik <ph name="FILE_NAME" /> jest niebezpieczny, dlatego został zablokowany przez Chromium.</translation>
 <translation id="6134968993075716475">Bezpieczne przeglądanie jest wyłączone. Chromium zaleca jego włączenie.</translation>
+<translation id="6183079672144801177">Najpierw zaloguj się w Chromium na swoim urządzeniu <ph name="TARGET_DEVICE_NAME" />, a potem ponów próbę wysyłania.</translation>
 <translation id="6212496753309875659">Na tym komputerze jest już zainstalowana nowsza wersja Chromium. Jeśli program nie działa, odinstaluj go i spróbuj ponownie.</translation>
 <translation id="6219195342503754812">{0,plural, =0{Chromium uruchomi się ponownie teraz}=1{Chromium uruchomi się ponownie za 1 sekundę}few{Chromium uruchomi się ponownie za # sekundy}many{Chromium uruchomi się ponownie za # sekund}other{Chromium uruchomi się ponownie za # sekundy}}</translation>
 <translation id="623836266260425961">System operacyjny Chromium nie może zsynchronizować danych.</translation>
diff --git a/chrome/app/resources/chromium_strings_pt-BR.xtb b/chrome/app/resources/chromium_strings_pt-BR.xtb
index 24f6759c..8100d3c 100644
--- a/chrome/app/resources/chromium_strings_pt-BR.xtb
+++ b/chrome/app/resources/chromium_strings_pt-BR.xtb
@@ -7,6 +7,7 @@
 <translation id="1098170124587656448">O Chromium pode ajudar a proteger você de violações de dados, extensões maliciosas e muito mais</translation>
 <translation id="1104942323762546749">O Chromium quer exportar suas senhas. Digite sua senha do Windows para permitir isso.</translation>
 <translation id="113122355610423240">O Chromium é seu navegador padrão</translation>
+<translation id="1131805035311359397">Para verificar se suas senhas estão protegidas contra violações de dados e outros problemas de segurança, <ph name="BEGIN_LINK" />faça login no Chromium<ph name="END_LINK" />.</translation>
 <translation id="1185134272377778587">Sobre o Chromium</translation>
 <translation id="1315551408014407711">Configure seu novo perfil do Chromium</translation>
 <translation id="1396446129537741364">O Chromium está tentando mostrar senhas.</translation>
@@ -24,10 +25,12 @@
 <translation id="1929939181775079593">O Chromium não está respondendo. Reiniciar agora?</translation>
 <translation id="1966382378801805537">O Chromium não pode determinar ou definir o navegador padrão</translation>
 <translation id="2008474315282236005">Essa ação excluirá 1 item deste dispositivo. Para recuperar seus dados mais tarde, faça login no Chromium como <ph name="USER_EMAIL" />.</translation>
+<translation id="2020032459870799438">Para verificar se suas outras senhas estão protegidas contra violações de dados e outros problemas de segurança, <ph name="BEGIN_LINK" />faça login no Chromium<ph name="END_LINK" />.</translation>
 <translation id="2185166961232948079">Chromium - Login na rede - <ph name="PAGE_TITLE" /></translation>
 <translation id="2225696941839557119">Não foi possível sincronizar suas senhas no Chromium OS.</translation>
 <translation id="2241627712206172106">Se você usa um computador compartilhado, seus amigos e familiares podem navegar separadamente e configurar o Chromium da maneira que desejarem.</translation>
 <translation id="2294245788148774212">Opcional: ajude a melhorar os recursos e o desempenho do Chromium OS enviando automaticamente dados de uso e diagnóstico ao Google.</translation>
+<translation id="2343156876103232566">Para enviar um número daqui para seu smartphone Android, faça login no Chromium nos dois dispositivos.</translation>
 <translation id="2347108572062610441">Esta extensão alterou a página que é exibida quando você inicia o Chromium.</translation>
 <translation id="2396765026452590966">A extensão "<ph name="EXTENSION_NAME" />" alterou a página que é exibida quando você inicia o Chromium.</translation>
 <translation id="2483889755041906834">No Chromium</translation>
@@ -71,6 +74,7 @@
 <translation id="3575459661164320785">Há um software nocivo no seu computador. O Chromium pode removê-lo, restaurar as configurações e desativar as extensões para que o navegador volte a funcionar normalmente.</translation>
 <translation id="3639635944603682591">Os dados de navegação dessa pessoa serão excluídos deste dispositivo. Para recuperar os dados, faça login no Chromium como <ph name="USER_EMAIL" />.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{Uma nova atualização está disponível para o Chromium e será feita assim que você reiniciá-lo.}=1{Uma nova atualização está disponível para o Chromium e será feita assim que você reiniciá-lo. Sua janela anônima não será aberta novamente.}one{Uma nova atualização está disponível para o Chromium e será feita assim que você reiniciá-lo. Sua janela anônima não será aberta novamente.}other{Uma nova atualização está disponível para o Chromium e será feita assim que você reiniciá-lo. Suas # janelas anônimas não serão abertas novamente.}}</translation>
+<translation id="3651803019964686660">Para enviar um número de <ph name="ORIGIN" /> ao seu smartphone Android, faça login no Chromium nos dois dispositivos.</translation>
 <translation id="3685209450716071127">O Chromium não pode verificar suas senhas. Verifique sua conexão com a Internet.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{Seu administrador pede que você reinicie o Chromium para que esta atualização seja feita.}=1{Seu administrador pede que você reinicie o Chromium para que esta atualização seja feita. Sua janela anônima não será aberta novamente.}one{Seu administrador pede que você reinicie o Chromium para que esta atualização seja feita. Sua janela anônima não será aberta novamente.}other{Seu administrador pede que você reinicie o Chromium para que esta atualização seja feita. Suas # janelas anônimas não serão abertas novamente.}}</translation>
 <translation id="3713809861844741608">Abrir link em nova &amp;guia do Chromium</translation>
@@ -141,6 +145,7 @@
 <translation id="6120345080069858279">O Chromium salvará essa senha na sua Conta do Google. Você não precisará se lembrar dela.</translation>
 <translation id="6129621093834146363">O arquivo <ph name="FILE_NAME" /> é perigoso. Por isso ele foi bloqueado pelo Chromium.</translation>
 <translation id="6134968993075716475">O "Navegação segura" está desativado. O Chromium recomenda ativá-lo.</translation>
+<translation id="6183079672144801177">Verifique se sua conta está conectada ao Chromium no <ph name="TARGET_DEVICE_NAME" /> e tente fazer o envio novamente.</translation>
 <translation id="6212496753309875659">Este computador já tem uma versão mais recente do Chromium. Se o software não estiver funcionando, desinstale o Chromium e tente novamente.</translation>
 <translation id="6219195342503754812">{0,plural, =0{O Chromium será reiniciado agora}=1{O Chromium será reiniciado em 1 segundo}one{O Chromium será reiniciado em # segundo}other{O Chromium será reiniciado em # segundos}}</translation>
 <translation id="623836266260425961">Não foi possível sincronizar seus dados no Chromium OS.</translation>
diff --git a/chrome/app/resources/chromium_strings_pt-PT.xtb b/chrome/app/resources/chromium_strings_pt-PT.xtb
index a11e27a..fea8d1f8 100644
--- a/chrome/app/resources/chromium_strings_pt-PT.xtb
+++ b/chrome/app/resources/chromium_strings_pt-PT.xtb
@@ -7,6 +7,7 @@
 <translation id="1098170124587656448">O Chromium pode ajudar a proteger contra violações de dados, extensões prejudiciais e muito mais.</translation>
 <translation id="1104942323762546749">O Chromium pretende exportar as suas palavras-passe. Escreva a sua palavra-passe do Windows para permitir esta ação.</translation>
 <translation id="113122355610423240">O Chromium é o seu navegador predefinido</translation>
+<translation id="1131805035311359397">Para verificar se as suas palavras-passe estão protegidas contra violação de dados e outros problemas de segurança, <ph name="BEGIN_LINK" />inicie sessão no Chromium<ph name="END_LINK" />.</translation>
 <translation id="1185134272377778587">Acerca do Chromium</translation>
 <translation id="1315551408014407711">Configure o seu novo perfil do Chromium</translation>
 <translation id="1396446129537741364">O Chromium está a tentar mostrar palavras-passe.</translation>
@@ -24,10 +25,12 @@
 <translation id="1929939181775079593">O Chromium não responde. Reiniciar agora?</translation>
 <translation id="1966382378801805537">O Chromium não consegue determinar ou definir o navegador predefinido</translation>
 <translation id="2008474315282236005">Esta ação elimina 1 item deste dispositivo. Para recuperar os dados mais tarde, inicie sessão no Chromium como <ph name="USER_EMAIL" />.</translation>
+<translation id="2020032459870799438">Para verificar se as suas outras palavras-passe estão protegidas contra violação de dados e outros problemas de segurança, <ph name="BEGIN_LINK" />inicie sessão no Chromium<ph name="END_LINK" />.</translation>
 <translation id="2185166961232948079">Chromium – Início de sessão na rede – <ph name="PAGE_TITLE" /></translation>
 <translation id="2225696941839557119">O Chromium OS não conseguiu sincronizar as suas palavras-passe.</translation>
 <translation id="2241627712206172106">Se partilhar um computador, os amigos e os familiares podem navegar separadamente e configurar o Chromium da forma que quiserem.</translation>
 <translation id="2294245788148774212">Opcional: ajudar a melhorar as funcionalidades e o desempenho do Chromium OS ao enviar automaticamente dados de diagnóstico e de utilização para a Google.</translation>
+<translation id="2343156876103232566">Para enviar um número daqui para o seu telemóvel Android, inicie sessão no Chromium em ambos os dispositivos.</translation>
 <translation id="2347108572062610441">Esta extensão alterou a página apresentada quando inicia o Chromium.</translation>
 <translation id="2396765026452590966">A extensão "<ph name="EXTENSION_NAME" />" alterou a página apresentada quando inicia o Chromium.</translation>
 <translation id="2483889755041906834">No Chromium</translation>
@@ -73,6 +76,7 @@
 <translation id="3575459661164320785">Existe software prejudicial no seu computador. O Chromium pode removê-lo, restaurar as suas definições e desativar as extensões para que o navegador volte a funcionar normalmente.</translation>
 <translation id="3639635944603682591">Os dados de navegação desta pessoa serão eliminados deste dispositivo. Para recuperar os dados, inicie sessão no Chromium como <ph name="USER_EMAIL" />.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{Está disponível uma atualização para o Chromium que será aplicada logo que o reinicie.}=1{Está disponível uma atualização para o Chromium que será aplicada logo que o reinicie. Não é possível reabrir a sua janela de navegação anónima.}other{Está disponível uma atualização para o Chromium que será aplicada logo que o reinicie. Não é possível reabrir as suas # janelas de navegação anónima.}}</translation>
+<translation id="3651803019964686660">Para enviar um número de <ph name="ORIGIN" /> para o seu telemóvel Android, inicie sessão no Chromium em ambos os dispositivos.</translation>
 <translation id="3685209450716071127">O Chromium não consegue verificar as suas palavras-passe. Experimente verificar a sua ligação à Internet.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{O seu administrador solicita-lhe que reinicie o Chromium para aplicar esta atualização.}=1{O seu administrador solicita-lhe que reinicie o Chromium para aplicar esta atualização. Não é possível reabrir a sua janela de navegação anónima.}other{O seu administrador solicita-lhe que reinicie o Chromium para aplicar esta atualização. Não é possível reabrir as suas # janelas de navegação anónima.}}</translation>
 <translation id="3713809861844741608">Abrir link num novo &amp;separador do Chromium</translation>
@@ -143,6 +147,7 @@
 <translation id="6120345080069858279">O Chromium vai guardar esta palavra-passe na sua Conta Google. Não tem de a memorizar.</translation>
 <translation id="6129621093834146363"><ph name="FILE_NAME" /> é perigoso, por isso o Chromium bloqueou-o.</translation>
 <translation id="6134968993075716475">A Navegação segura está desativada. O Chromium recomenda que a ative.</translation>
+<translation id="6183079672144801177">Certifique-se de que tem sessão iniciada no Chromium no seu <ph name="TARGET_DEVICE_NAME" /> e, em seguida, tente enviar novamente.</translation>
 <translation id="6212496753309875659">Este computador já tem uma versão mais recente do Chromium. Se o software não estiver a funcionar, desinstale o Chromium e tente novamente.</translation>
 <translation id="6219195342503754812">{0,plural, =0{O Chromium será reiniciado agora}=1{O Chromium será reiniciado dentro de 1 segundo}other{O Chromium será reiniciado dentro de # segundos}}</translation>
 <translation id="623836266260425961">O Chromium OS não conseguiu sincronizar os dados.</translation>
diff --git a/chrome/app/resources/chromium_strings_sl.xtb b/chrome/app/resources/chromium_strings_sl.xtb
index e7fc35b0..0a79041 100644
--- a/chrome/app/resources/chromium_strings_sl.xtb
+++ b/chrome/app/resources/chromium_strings_sl.xtb
@@ -9,6 +9,7 @@
 <translation id="1098170124587656448">Chromium vas lahko varuje pred podatkovnimi kršitvami, zlonamernimi razširitvami in drugim</translation>
 <translation id="1104942323762546749">Chromium želi izvoziti gesla. Če želite omogočiti to, vnesite geslo za Windows.</translation>
 <translation id="113122355610423240">Chromium je privzeti brskalnik</translation>
+<translation id="1131805035311359397">Če želite preveriti, ali so gesla varna pred podatkovnimi kršitvami in drugimi varnostnimi težavami, <ph name="BEGIN_LINK" />se prijavite v Chromium<ph name="END_LINK" />.</translation>
 <translation id="1185134272377778587">O Chromiumu</translation>
 <translation id="1315551408014407711">Nastavitev novega profila v Chromiumu</translation>
 <translation id="1396446129537741364">Chromium poskuša prikazati gesla.</translation>
@@ -26,10 +27,12 @@
 <translation id="1929939181775079593">Chromium se ne odziva. Ga želite znova zagnati?</translation>
 <translation id="1966382378801805537">Chromium ne more določiti ali nastaviti privzetega brskalnika</translation>
 <translation id="2008474315282236005">S tem bo iz te naprave izbrisan 1 element. Če želite pozneje prenesti podatke, se v Chromium prijavite kot <ph name="USER_EMAIL" />.</translation>
+<translation id="2020032459870799438">Če želite preveriti, ali so druga gesla varna pred podatkovnimi kršitvami in drugimi varnostnimi težavami, <ph name="BEGIN_LINK" />se prijavite v Chromium<ph name="END_LINK" />.</translation>
 <translation id="2185166961232948079">Chromium – Prijava v omrežje – <ph name="PAGE_TITLE" /></translation>
 <translation id="2225696941839557119">Chromium OS ni mogel sinhronizirati gesel.</translation>
 <translation id="2241627712206172106">Če računalnik souporabljate z drugimi, lahko prijatelji in sorodniki ločeno brskajo ter nastavijo Chromium tako, kot ga želijo.</translation>
 <translation id="2294245788148774212">Izbirno: Pomagajte izboljšati funkcije sistema Chromium OS in njegovo delovanje s samodejnim pošiljanjem diagnostičnih podatkov in podatkov o uporabi Googlu.</translation>
+<translation id="2343156876103232566">Če želite poslati telefonsko številko iz te naprave v telefon Android, se prijavite v Chromium v obeh napravah.</translation>
 <translation id="2347108572062610441">Zaradi te razširitve se je spremenila stran, ki je prikazana, ko zaženete Chromium.</translation>
 <translation id="2396765026452590966">Zaradi razširitve »<ph name="EXTENSION_NAME" />« se je spremenila stran, ki je prikazana, ko zaženete Chromium.</translation>
 <translation id="2483889755041906834">V Chromiumu</translation>
@@ -75,6 +78,7 @@
 <translation id="3575459661164320785">V računalniku je nameščena škodljiva programska oprema. Chromium jo lahko odstrani, obnovi vaše nastavitve in onemogoči razširitve, da bo brskalnik spet normalno deloval.</translation>
 <translation id="3639635944603682591">Podatki brskanja te osebe bodo izbrisani iz te naprave. Če želite podatke obnoviti, se prijavite v Chromium kot <ph name="USER_EMAIL" />.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{Na voljo je nova posodobitev za Chromium, ki bo nameščena, takoj ko ga znova zaženete.}=1{Na voljo je nova posodobitev za Chromium, ki bo nameščena, takoj ko ga znova zaženete. Okno brez beleženja zgodovine se ne bo znova odprlo.}one{Na voljo je nova posodobitev za Chromium, ki bo nameščena, takoj ko ga znova zaženete. # okno brez beleženja zgodovine se ne bo znova odprlo.}two{Na voljo je nova posodobitev za Chromium, ki bo nameščena, takoj ko ga znova zaženete. # okni brez beleženja zgodovine se ne bosta znova odprli.}few{Na voljo je nova posodobitev za Chromium, ki bo nameščena, takoj ko ga znova zaženete. # okna brez beleženja zgodovine se ne bodo znova odprla.}other{Na voljo je nova posodobitev za Chromium, ki bo nameščena, takoj ko ga znova zaženete. # oken brez beleženja zgodovine se ne bo znova odprlo.}}</translation>
+<translation id="3651803019964686660">Če želite telefonsko številko iz naprave <ph name="ORIGIN" /> poslati v telefon Android, se prijavite v Chromium v obeh napravah.</translation>
 <translation id="3685209450716071127">Chromium ne more preveriti gesel. Poskusite preveriti internetno povezavo.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{Skrbnik prosi, da za uveljavitev te posodobitve znova zaženete Chromium.}=1{Skrbnik prosi, da za uveljavitev te posodobitve znova zaženete Chromium. Okno brez beleženja zgodovine se ne bo znova odprlo.}one{Skrbnik prosi, da za uveljavitev te posodobitve znova zaženete Chromium. # okno brez beleženja zgodovine se ne bo znova odprlo.}two{Skrbnik prosi, da za uveljavitev te posodobitve znova zaženete Chromium. # okni brez beleženja zgodovine se ne bosta znova odprli.}few{Skrbnik prosi, da za uveljavitev te posodobitve znova zaženete Chromium. # okna brez beleženja zgodovine se ne bodo znova odprla.}other{Skrbnik prosi, da za uveljavitev te posodobitve znova zaženete Chromium. # oken brez beleženja zgodovine se ne bo znova odprlo.}}</translation>
 <translation id="3713809861844741608">Odpiranje povezave na novem &amp;zavihku v Chromiumu</translation>
@@ -145,6 +149,7 @@
 <translation id="6120345080069858279">Chromium bo shranil to geslo v Google Računu. Ni si vam ga treba zapomniti.</translation>
 <translation id="6129621093834146363">Datoteka <ph name="FILE_NAME" /> je nevarna, zato jo je Chromium blokiral.</translation>
 <translation id="6134968993075716475">Varno brskanje je izklopljeno. Chromium priporoča, da ga vklopite.</translation>
+<translation id="6183079672144801177">Preverite, ali ste v napravi <ph name="TARGET_DEVICE_NAME" /> prijavljeni v Chromium, nato poskusite znova poslati.</translation>
 <translation id="6212496753309875659">Ta računalnik že ima novejšo različico Chromiuma. Če programska oprema ne deluje, odstranite Chromium in poskusite znova.</translation>
 <translation id="6219195342503754812">{0,plural, =0{Chromium se bo zdaj znova zagnal}=1{Chromium se bo znova zagnal čez eno sekundo}one{Chromium se bo znova zagnal čez # sekundo}two{Chromium se bo znova zagnal čez # sekundi}few{Chromium se bo znova zagnal čez # sekunde}other{Chromium se bo znova zagnal čez # sekund}}</translation>
 <translation id="623836266260425961">Chromium OS ni mogel sinhronizirati podatkov.</translation>
diff --git a/chrome/app/resources/chromium_strings_sr-Latn.xtb b/chrome/app/resources/chromium_strings_sr-Latn.xtb
index 32f78e7..110bb7c 100644
--- a/chrome/app/resources/chromium_strings_sr-Latn.xtb
+++ b/chrome/app/resources/chromium_strings_sr-Latn.xtb
@@ -9,6 +9,7 @@
 <translation id="1098170124587656448">Chromium može da vas štiti od upada u podatke, neispravnih dodataka i drugih problema</translation>
 <translation id="1104942323762546749">Chromium želi da izveze lozinke. Unesite lozinku za Windows da biste to omogućili.</translation>
 <translation id="113122355610423240">Chromium je podrazumevani pregledač</translation>
+<translation id="1131805035311359397">Da biste proverili da li su lozinke bezbedne od upada u podatke i drugih bezbednosnih problema, <ph name="BEGIN_LINK" />prijavite se u Chromium<ph name="END_LINK" />.</translation>
 <translation id="1185134272377778587">O Chromium-u</translation>
 <translation id="1315551408014407711">Podesite nov Chromium profil</translation>
 <translation id="1396446129537741364">Chromium pokušava da prikaže lozinke.</translation>
@@ -26,10 +27,12 @@
 <translation id="1929939181775079593">Chromium ne reaguje. Želite li da ga odmah ponovo pokrenete?</translation>
 <translation id="1966382378801805537">Chromium ne može da odredi ni da podesi podrazumevani pregledač</translation>
 <translation id="2008474315282236005">Ovim ćete izbrisati 1 stavku sa ovog uređaja. Da biste kasnije vratili podatke, prijavite se u Chromium kao <ph name="USER_EMAIL" />.</translation>
+<translation id="2020032459870799438">Da biste proverili da li su ostale lozinke bezbedne od upada u podatke i drugih bezbednosnih problema, <ph name="BEGIN_LINK" />prijavite se u Chromium<ph name="END_LINK" />.</translation>
 <translation id="2185166961232948079">Chromium – prijavljivanje na mrežu – <ph name="PAGE_TITLE" /></translation>
 <translation id="2225696941839557119">Chromium OS nije uspeo da sinhronizuje lozinke.</translation>
 <translation id="2241627712206172106">Ako delite računar, prijatelji i porodica mogu zasebno da pregledaju i da podese Chromium baš onako kako žele.</translation>
 <translation id="2294245788148774212">Opcionalno: Automatski šaljite Google-u dijagnostiku i podatke o korišćenju da biste nam pomogli da poboljšamo funkcije i učinak Chromium OS-a.</translation>
+<translation id="2343156876103232566">Da biste poslali broj sa ovog uređaja na Android telefon, prijavite se u Chromium na oba uređaja.</translation>
 <translation id="2347108572062610441">Ovaj dodatak je promenio stranicu koja se prikazuje kada pokrenete Chromium.</translation>
 <translation id="2396765026452590966">Dodatak „<ph name="EXTENSION_NAME" />“ je promenio stranicu koja se prikazuje kada pokrenete Chromium.</translation>
 <translation id="2483889755041906834">U Chromium-u</translation>
@@ -75,6 +78,7 @@
 <translation id="3575459661164320785">Na računaru postoji štetan softver. Chromium može da ga ukloni, vrati podešavanja i onemogući dodatke da bi pregledač mogao ponovo da radi uobičajeno.</translation>
 <translation id="3639635944603682591">Podaci pregledanja ove osobe će biti izbrisani sa ovog uređaja. Da biste vratili podatke, prijavite se u Chromium kao <ph name="USER_EMAIL" />.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{Novo ažuriranje za Chromium je dostupno i primeniće se čim ga ponovo pokrenete.}=1{Novo ažuriranje za Chromium je dostupno i primeniće se čim ga ponovo pokrenete. Prozor bez arhiviranja se neće ponovo otvoriti.}one{Novo ažuriranje za Chromium je dostupno i primeniće se čim ga ponovo pokrenete. # prozor bez arhiviranja se neće ponovo otvoriti.}few{Novo ažuriranje za Chromium je dostupno i primeniće se čim ga ponovo pokrenete. # prozora bez arhiviranja se neće ponovo otvoriti.}other{Novo ažuriranje za Chromium je dostupno i primeniće se čim ga ponovo pokrenete. # prozora bez arhiviranja se neće ponovo otvoriti.}}</translation>
+<translation id="3651803019964686660">Da biste poslali broj sa <ph name="ORIGIN" /> na Android telefon, prijavite se u Chromium na oba uređaja.</translation>
 <translation id="3685209450716071127">Chromium ne može da vam proverava lozinke. Proverite internet vezu.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{Administrator traži da ponovo pokrenete Chromium da biste primenili ovo ažuriranje}=1{Administrator traži da ponovo pokrenete Chromium da biste primenili ovo ažuriranje. Prozor bez arhiviranja se neće ponovo otvoriti.}one{Administrator traži da ponovo pokrenete Chromium da biste primenili ovo ažuriranje. # prozor bez arhiviranja se neće ponovo otvoriti.}few{Administrator traži da ponovo pokrenete Chromium da biste primenili ovo ažuriranje. # prozora bez arhiviranja se neće ponovo otvoriti.}other{Administrator traži da ponovo pokrenete Chromium da biste primenili ovo ažuriranje. # prozora bez arhiviranja se neće ponovo otvoriti.}}</translation>
 <translation id="3713809861844741608">Otvori link u novoj Chromium &amp;kartici</translation>
@@ -145,6 +149,7 @@
 <translation id="6120345080069858279">Chromium će sačuvati ovu lozinku na Google nalogu. Nećete morati da je pamtite.</translation>
 <translation id="6129621093834146363">Datoteka <ph name="FILE_NAME" /> je opasna, pa ju je Chromium blokirao.</translation>
 <translation id="6134968993075716475">Bezbedno pregledanje je isključeno. Chromium preporučuje da ga uključite.</translation>
+<translation id="6183079672144801177">Uverite se da ste prijavljeni u Chromium na uređaju <ph name="TARGET_DEVICE_NAME" /> i probajte da pošaljete ponovo.</translation>
 <translation id="6212496753309875659">Ovaj računar već ima noviju verziju Chromium-a. Ako softver ne funkcioniše, deinstalirajte Chromium i pokušajte ponovo.</translation>
 <translation id="6219195342503754812">{0,plural, =0{Ponovo ćemo pokrenuti Chromium}=1{Ponovo ćemo pokrenuti Chromium za 1 sekundu}one{Ponovo ćemo pokrenuti Chromium za # sekundu}few{Ponovo ćemo pokrenuti Chromium za # sekunde}other{Ponovo ćemo pokrenuti Chromium za # sekundi}}</translation>
 <translation id="623836266260425961">Chromium OS nije uspeo da sinhronizuje podatke.</translation>
diff --git a/chrome/app/resources/chromium_strings_sr.xtb b/chrome/app/resources/chromium_strings_sr.xtb
index 24f8a06..f95aad6b 100644
--- a/chrome/app/resources/chromium_strings_sr.xtb
+++ b/chrome/app/resources/chromium_strings_sr.xtb
@@ -9,6 +9,7 @@
 <translation id="1098170124587656448">Chromium може да вас штити од упада у податке, неисправних додатака и других проблема</translation>
 <translation id="1104942323762546749">Chromium жели да извезе лозинке. Унесите лозинку за Windows да бисте то омогућили.</translation>
 <translation id="113122355610423240">Chromium је подразумевани прегледач</translation>
+<translation id="1131805035311359397">Да бисте проверили да ли су лозинке безбедне од упада у податке и других безбедносних проблема, <ph name="BEGIN_LINK" />пријавите се у Chromium<ph name="END_LINK" />.</translation>
 <translation id="1185134272377778587">О Chromium-у</translation>
 <translation id="1315551408014407711">Подесите нов Chromium профил</translation>
 <translation id="1396446129537741364">Chromium покушава да прикаже лозинке.</translation>
@@ -26,10 +27,12 @@
 <translation id="1929939181775079593">Chromium не реагује. Желите ли да га одмах поново покренете?</translation>
 <translation id="1966382378801805537">Chromium не може да одреди ни да подеси подразумевани прегледач</translation>
 <translation id="2008474315282236005">Овим ћете избрисати 1 ставку са овог уређаја. Да бисте касније вратили податке, пријавите се у Chromium као <ph name="USER_EMAIL" />.</translation>
+<translation id="2020032459870799438">Да бисте проверили да ли су остале лозинке безбедне од упада у податке и других безбедносних проблема, <ph name="BEGIN_LINK" />пријавите се у Chromium<ph name="END_LINK" />.</translation>
 <translation id="2185166961232948079">Chromium – пријављивање на мрежу – <ph name="PAGE_TITLE" /></translation>
 <translation id="2225696941839557119">Chromium ОС није успео да синхронизује лозинке.</translation>
 <translation id="2241627712206172106">Ако делите рачунар, пријатељи и породица могу засебно да прегледају и да подесе Chromium баш онако како желе.</translation>
 <translation id="2294245788148774212">Опционално: Аутоматски шаљите Google-у дијагностику и податке о коришћењу да бисте нам помогли да побољшамо функције и учинак Chromium ОС-а.</translation>
+<translation id="2343156876103232566">Да бисте послали број са овог уређаја на Android телефон, пријавите се у Chromium на оба уређаја.</translation>
 <translation id="2347108572062610441">Овај додатак је променио страницу која се приказује када покренете Chromium.</translation>
 <translation id="2396765026452590966">Додатак „<ph name="EXTENSION_NAME" />“ је променио страницу која се приказује када покренете Chromium.</translation>
 <translation id="2483889755041906834">У Chromium-у</translation>
@@ -75,6 +78,7 @@
 <translation id="3575459661164320785">На рачунару постоји штетан софтвер. Chromium може да га уклони, врати подешавања и онемогући додатке да би прегледач могао поново да ради уобичајено.</translation>
 <translation id="3639635944603682591">Подаци прегледања ове особе ће бити избрисани са овог уређаја. Да бисте вратили податке, пријавите се у Chromium као <ph name="USER_EMAIL" />.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{Ново ажурирање за Chromium је доступно и примениће се чим га поново покренете.}=1{Ново ажурирање за Chromium је доступно и примениће се чим га поново покренете. Прозор без архивирања се неће поново отворити.}one{Ново ажурирање за Chromium је доступно и примениће се чим га поново покренете. # прозор без архивирања се неће поново отворити.}few{Ново ажурирање за Chromium је доступно и примениће се чим га поново покренете. # прозора без архивирања се неће поново отворити.}other{Ново ажурирање за Chromium је доступно и примениће се чим га поново покренете. # прозора без архивирања се неће поново отворити.}}</translation>
+<translation id="3651803019964686660">Да бисте послали број са <ph name="ORIGIN" /> на Android телефон, пријавите се у Chromium на оба уређаја.</translation>
 <translation id="3685209450716071127">Chromium не може да вам проверава лозинке. Проверите интернет везу.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{Администратор тражи да поново покренете Chromium да бисте применили ово ажурирање}=1{Администратор тражи да поново покренете Chromium да бисте применили ово ажурирање. Прозор без архивирања се неће поново отворити.}one{Администратор тражи да поново покренете Chromium да бисте применили ово ажурирање. # прозор без архивирања се неће поново отворити.}few{Администратор тражи да поново покренете Chromium да бисте применили ово ажурирање. # прозора без архивирања се неће поново отворити.}other{Администратор тражи да поново покренете Chromium да бисте применили ово ажурирање. # прозора без архивирања се неће поново отворити.}}</translation>
 <translation id="3713809861844741608">Отвори линк у новој Chromium &amp;картици</translation>
@@ -145,6 +149,7 @@
 <translation id="6120345080069858279">Chromium ће сачувати ову лозинку на Google налогу. Нећете морати да је памтите.</translation>
 <translation id="6129621093834146363">Датотека <ph name="FILE_NAME" /> је опасна, па ју је Chromium блокирао.</translation>
 <translation id="6134968993075716475">Безбедно прегледање је искључено. Chromium препоручује да га укључите.</translation>
+<translation id="6183079672144801177">Уверите се да сте пријављени у Chromium на уређају <ph name="TARGET_DEVICE_NAME" /> и пробајте да пошаљете поново.</translation>
 <translation id="6212496753309875659">Овај рачунар већ има новију верзију Chromium-а. Ако софтвер не функционише, деинсталирајте Chromium и покушајте поново.</translation>
 <translation id="6219195342503754812">{0,plural, =0{Поново ћемо покренути Chromium}=1{Поново ћемо покренути Chromium за 1 секунду}one{Поново ћемо покренути Chromium за # секунду}few{Поново ћемо покренути Chromium за # секунде}other{Поново ћемо покренути Chromium за # секунди}}</translation>
 <translation id="623836266260425961">Chromium ОС није успео да синхронизује податке.</translation>
diff --git a/chrome/app/resources/chromium_strings_sv.xtb b/chrome/app/resources/chromium_strings_sv.xtb
index 9dbb671f..ddf9572 100644
--- a/chrome/app/resources/chromium_strings_sv.xtb
+++ b/chrome/app/resources/chromium_strings_sv.xtb
@@ -9,6 +9,7 @@
 <translation id="1098170124587656448">Chromium kan skydda dig från dataintrång, olämpliga tillägg med mera</translation>
 <translation id="1104942323762546749">Lösenorden exporteras från Chromium. Skriv ditt Windows-lösenord om du tillåter detta.</translation>
 <translation id="113122355610423240">Chromium är din standardwebbläsare</translation>
+<translation id="1131805035311359397"><ph name="BEGIN_LINK" />Logga in i Chromium<ph name="END_LINK" /> om du vill kontrollera att dina lösenord skyddas från dataintrång och andra säkerhetsproblem.</translation>
 <translation id="1185134272377778587">Om Chromium</translation>
 <translation id="1315551408014407711">Konfigurera din nya profil i Chromium</translation>
 <translation id="1396446129537741364">Chromium försöker visa lösenord.</translation>
@@ -26,10 +27,12 @@
 <translation id="1929939181775079593">Chromium svarar inte. Vill du starta om?</translation>
 <translation id="1966382378801805537">Chromium kan inte fastställa eller ange standardwebbläsaren</translation>
 <translation id="2008474315282236005">Ett objekt tas bort från enheten. Logga in i Chromium som <ph name="USER_EMAIL" /> om du vill kunna återställa datan senare.</translation>
+<translation id="2020032459870799438"><ph name="BEGIN_LINK" />Logga in i Chromium<ph name="END_LINK" /> om du vill kontrollera att dina andra lösenord skyddas från dataintrång och andra säkerhetsproblem.</translation>
 <translation id="2185166961232948079">Chromium – nätverksinloggning – <ph name="PAGE_TITLE" /></translation>
 <translation id="2225696941839557119">Det gick inte att synkronisera lösenord i Chromium OS.</translation>
 <translation id="2241627712206172106">Om du delar en dator med vänner och familj kan de konfigurera Chromium precis som de vill och surfa separat.</translation>
 <translation id="2294245788148774212">Valfritt: Skicka diagnostik- och användningsdata automatiskt till Google och hjälp oss att förbättra funktioner och prestanda i Chromium OS.</translation>
+<translation id="2343156876103232566">Logga in på Chromium på båda enheterna om du vill skicka ett nummer från Android-telefonen.</translation>
 <translation id="2347108572062610441">Det här tillägget har ändrat vilken sida som visas när du startar Chromium.</translation>
 <translation id="2396765026452590966">Tillägget <ph name="EXTENSION_NAME" /> har ändrat vilken sida som visas när du startar Chromium.</translation>
 <translation id="2483889755041906834">I Chromium</translation>
@@ -75,6 +78,7 @@
 <translation id="3575459661164320785">Det finns skadlig programvara på datorn. Den skadliga programvaran kan tas bort, inställningarna återställas och tillägg inaktiveras så att webbläsaren fungerar som den ska igen.</translation>
 <translation id="3639635944603682591">Den här personens webbläsardata tas bort från enheten. Logga in i Chromium som <ph name="USER_EMAIL" /> om du vill återställa data.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{Det finns en ny Chromium-uppdatering som tillämpas så snart du startar om.}=1{Det finns en ny Chromium-uppdatering som tillämpas så snart du startar om. Inkognitofönstret öppnas inte igen.}other{Det finns en ny Chromium-uppdatering som tillämpas så snart du startar om. De # inkognitofönstren öppnas inte igen.}}</translation>
+<translation id="3651803019964686660">Logga in på Chromium på båda enheterna om du vill skicka ett nummer från <ph name="ORIGIN" /> till Android-telefonen.</translation>
 <translation id="3685209450716071127">Chromium kan inte kontrollera dina lösenord. Testa att kontrollera internetanslutningen.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{Administratören meddelar att du bör starta om Chromium så att uppdateringen tillämpas}=1{Administratören meddelar att du bör starta om Chromium så att uppdateringen tillämpas. Inkognitofönstret öppnas inte igen.}other{Administratören meddelar att du bör starta om Chromium så att uppdateringen tillämpas. De # inkognitofönstren öppnas inte igen.}}</translation>
 <translation id="3713809861844741608">Öppna länken i en ny &amp;flik i Chromium</translation>
@@ -145,6 +149,7 @@
 <translation id="6120345080069858279">Det här lösenordet sparas i ditt Google-konto. Du behöver inte komma ihåg det.</translation>
 <translation id="6129621093834146363"><ph name="FILE_NAME" /> är skadlig och har blockerats av Chromium.</translation>
 <translation id="6134968993075716475">Säker webbsökning har inaktiverats. Du rekommenderas att aktivera funktionen i Chromium.</translation>
+<translation id="6183079672144801177">Se till att du är inloggad i Chromium på <ph name="TARGET_DEVICE_NAME" /> och försök skicka igen.</translation>
 <translation id="6212496753309875659">Det finns redan en nyare version av Chromium på den här datorn. Avinstallera Chromium och försök igen om programvaran inte fungerar.</translation>
 <translation id="6219195342503754812">{0,plural, =0{Chromium startas om nu}=1{Om en sekund startas Chromium om}other{Om # sekunder startas Chromium om}}</translation>
 <translation id="623836266260425961">Det gick inte att synkronisera data i Chromium OS.</translation>
diff --git a/chrome/app/resources/chromium_strings_te.xtb b/chrome/app/resources/chromium_strings_te.xtb
index b085001..df294356 100644
--- a/chrome/app/resources/chromium_strings_te.xtb
+++ b/chrome/app/resources/chromium_strings_te.xtb
@@ -7,6 +7,7 @@
 <translation id="1098170124587656448">డేటా ఉల్లంఘనలు, చెడు ఎక్స్‌టెన్షన్‌లు మొదలైన వాటి నుండి మిమ్మల్ని సురక్షితంగా ఉంచడంలో Chromium సహాయపడగలదు</translation>
 <translation id="1104942323762546749">Chromium మీ పాస్‌వర్డ్‌లను ఎగుమతి చేయాలనుకుంటోంది. దీనిని అనుమతించడం కోసం మీ Windows పాస్‌వర్డ్‌ని టైప్ చేయండి.</translation>
 <translation id="113122355610423240">మీ డిఫాల్ట్ బ్రౌజర్ Chromium</translation>
+<translation id="1131805035311359397">డేటా ఉల్లంఘనల నుండి, ఇతర భద్రతా సమస్యల నుండి మీ పాస్‌వర్డ్‌లు సురక్షితంగా ఉన్నాయో లేదో చెక్ చేయడానికి, <ph name="BEGIN_LINK" />Chromiumకు సైన్ ఇన్ చేయండి<ph name="END_LINK" />.</translation>
 <translation id="1185134272377778587">Chromium గురించి</translation>
 <translation id="1315551408014407711">మీ కొత్త Chromium ప్రొఫైల్‍ను సెట్ అప్ చేయండి</translation>
 <translation id="1396446129537741364">Chromium పాస్‌వర్డ్‌లను చూపడానికి ప్రయత్నిస్తోంది.</translation>
@@ -24,10 +25,12 @@
 <translation id="1929939181775079593">Chromium ప్రతిస్పందించడం లేదు. ఇప్పుడు మళ్లీ ప్రారంభించాలా?</translation>
 <translation id="1966382378801805537">Chromium డిఫాల్ట్ బ్రౌజర్‌ను నిశ్చయించలేదు లేదా సెట్ చేయలేదు</translation>
 <translation id="2008474315282236005">ఇది ఈ పరికరం నుండి 1 అంశాన్ని తొలగిస్తుంది. మీ డేటాను తర్వాత తిరిగి పొందడానికి, Chromiumకు <ph name="USER_EMAIL" /> లాగా సైన్ ఇన్ చేయండి.</translation>
+<translation id="2020032459870799438">డేటా ఉల్లంఘనల నుండి, ఇతర భద్రతా సమస్యల నుండి మీ ఇతర పాస్‌వర్డ్‌లు సురక్షితంగా ఉన్నాయో లేదో చెక్ చేయడానికి, <ph name="BEGIN_LINK" />Chromiumకు సైన్ ఇన్ చేయండి<ph name="END_LINK" />.</translation>
 <translation id="2185166961232948079">Chromium - నెట్‌వర్క్ సైన్ ఇన్ - <ph name="PAGE_TITLE" /></translation>
 <translation id="2225696941839557119">Chromium OS మీ పాస్‌వర్డ్‌లను సింక్ చేయలేకపోయింది.</translation>
 <translation id="2241627712206172106">మీరు కంప్యూటర్‌ను షేర్‌ చేస్తే, స్నేహితులు, కుటుంబ సభ్యులు విడివిడిగా బ్రౌజ్ చేయవచ్చు. Chromiumను వారికి నచ్చిన రీతిలో సెటప్ చేసుకోవచ్చు.</translation>
 <translation id="2294245788148774212">ఆప్షనల్: విశ్లేషణ మరియు వినియోగ డేటాను ఆటోమేటిక్‌గా Googleకు పంపడం ద్వారా Chromium OS ఫీచర్‌లు మరియు పనితీరును మెరుగుపరచడంలో సహాయపడండి.</translation>
+<translation id="2343156876103232566">ఇక్కడి నుండి మీ Android ఫోన్‌కు నంబర్‌ను పంపడానికి, రెండు పరికరాలలోని Chromiumకు సైన్ ఇన్ చేయండి.</translation>
 <translation id="2347108572062610441">ఈ పొడిగింపు మీరు Chromiumని ప్రారంభించినప్పుడు చూపబడే పేజీని మార్చింది.</translation>
 <translation id="2396765026452590966"><ph name="EXTENSION_NAME" /> పొడిగింపు మీరు Chromiumని ప్రారంభించినప్పుడు చూపబడే పేజీని మార్చింది.</translation>
 <translation id="2483889755041906834">Chromiumలో</translation>
@@ -71,6 +74,7 @@
 <translation id="3575459661164320785">మీ కంప్యూటర్‌లో మీ భద్రతకు హాని కలిగించే సాఫ్ట్‌వేర్‌ ఉంది. మీ బ్రౌజర్‌ని మళ్లీ సాధారణంగా పని చేసేలా చేయడానికి Chromium దానిని తీసివేసి, మీ సెట్టింగ్‌లను పునరుద్ధరించి, ఎక్స్‌టెన్షన్‌లను నిలిపివేయగలదు.</translation>
 <translation id="3639635944603682591">ఈ వ్యక్తి బ్రౌజింగ్ డేటా‌ ఈ పరికరం నుండి తొలగించబడుతుంది. డేటాను పునరుద్ధరించడానికి, <ph name="USER_EMAIL" />గా Chromiumకు సైన్ ఇన్ చేయండి.</translation>
 <translation id="364817392622123556">{COUNT,plural, =0{Chromiumకు కొత్త అప్‌డేట్ అందుబాటులో ఉంది, మీరు పునఃప్రారంభించిన వెంటనే వర్తింపజేయబడుతుంది.}=1{Chromiumకు కొత్త అప్‌డేట్ అందుబాటులో ఉంది, మీరు పునఃప్రారంభించిన వెంటనే వర్తింపజేయబడుతుంది. మీ అజ్ఞాత విండో మళ్లీ తెరవబడదు.}other{Chromiumకు కొత్త అప్‌డేట్ అందుబాటులో ఉంది, మీరు పునఃప్రారంభించిన వెంటనే వర్తింపజేయబడుతుంది. మీ # అజ్ఞాత విండోలు మళ్లీ తెరవబడవు.}}</translation>
+<translation id="3651803019964686660"><ph name="ORIGIN" /> నుండి మీ Android ఫోన్‌కు నంబర్‌ను పంపడానికి, రెండు పరికరాలలోని Chromiumకు సైన్ ఇన్ చేయండి.</translation>
 <translation id="3685209450716071127">Chromium మీ పాస్‌వర్డ్‌లను చెక్ చేయలేకపోయింది. మీ ఇంటర్నెట్ కనెక్షన్ సరిచూసుకుని, తర్వాత ట్రై చేయండి.</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{ఈ అప్‌డేట్‌ను వర్తింపజేయడం కోసం మీరు Chromiumను పునఃప్రారంభించాలని మీ నిర్వాహకుడు కోరుతున్నారు}=1{ఈ అప్‌డేట్‌ను వర్తింపజేయడం కోసం మీరు Chromiumను పునఃప్రారంభించాలని మీ నిర్వాహకుడు కోరుతున్నారు. మీ అజ్ఞాత విండో మళ్లీ తెరవబడదు.}other{ఈ అప్‌డేట్‌ను వర్తింపజేయడం కోసం మీరు Chromiumను పునఃప్రారంభించాలని మీ నిర్వాహకుడు కోరుతున్నారు. మీ # అజ్ఞాత విండోలు మళ్లీ తెరవబడవు.}}</translation>
 <translation id="3713809861844741608">కొత్త Chromium &amp;ట్యాబ్‌లో లింక్‌ని తెరువు</translation>
@@ -141,6 +145,7 @@
 <translation id="6120345080069858279">Chromium ఈ పాస్‌వర్డ్‌ను మీ Google ఖాతాలో సేవ్ చేస్తుంది. మీరు దీనిని గుర్తుంచుకోవాల్సిన అవసరం లేదు.</translation>
 <translation id="6129621093834146363"><ph name="FILE_NAME" /> హానికరం, కావున Chromium దాన్ని బ్లాక్ చేసింది.</translation>
 <translation id="6134968993075716475">సురక్షిత బ్రౌజింగ్ ఆఫ్ చేయబడింది. దాన్ని ఆన్ చేయమని Chromium సిఫార్సు చేస్తోంది.</translation>
+<translation id="6183079672144801177">మీ <ph name="TARGET_DEVICE_NAME" />లో మీరు Chromiumకు సైన్ ఇన్ చేశారని నిర్ధారించుకుని, ఆపై మళ్లీ పంపడానికి ట్రై చేయండి.</translation>
 <translation id="6212496753309875659">ఈ కంప్యూటర్‌లో ఇప్పటికే మరింత తాజాదైన Chromium వెర్షన్ ఉంది. సాఫ్ట్‌వేర్ పని చేయకపోతే, దయచేసి Chromiumను అన్ఇన్‌స్టాల్ చేసి, మళ్లీ ప్రయత్నించండి.</translation>
 <translation id="6219195342503754812">{0,plural, =0{Chromium ఇప్పుడు తిరిగి ప్రారంభించబడుతుంది}=1{1 సెకనులో Chromium తిరిగి ప్రారంభించబడుతుంది}other{# సెకన్లలో Chromium తిరిగి ప్రారంభించబడుతుంది}}</translation>
 <translation id="623836266260425961">Chromium OS మీ డేటాను సింక్ చేయలేకపోయింది.</translation>
diff --git a/chrome/app/resources/chromium_strings_th.xtb b/chrome/app/resources/chromium_strings_th.xtb
index 3961461..032ac41 100644
--- a/chrome/app/resources/chromium_strings_th.xtb
+++ b/chrome/app/resources/chromium_strings_th.xtb
@@ -7,6 +7,7 @@
 <translation id="1098170124587656448">Chromium ช่วยให้คุณปลอดภัยจากการละเมิดข้อมูล ส่วนขยายที่ไม่ปลอดภัย และอื่นๆ ได้</translation>
 <translation id="1104942323762546749">Chromium ต้องการส่งออกรหัสผ่านของคุณ พิมพ์รหัสผ่าน Windows เพื่ออนุญาตให้ดำเนินการ</translation>
 <translation id="113122355610423240">Chromium เป็นเบราว์เซอร์เริ่มต้นของคุณ</translation>
+<translation id="1131805035311359397"><ph name="BEGIN_LINK" />ลงชื่อเข้าใช้ Chromium<ph name="END_LINK" /> เพื่อตรวจสอบว่ารหัสผ่านของคุณไม่ได้รับผลกระทบจากการละเมิดข้อมูลและปัญหาด้านความปลอดภัยอื่นๆ</translation>
 <translation id="1185134272377778587">เกี่ยวกับ Chromium</translation>
 <translation id="1315551408014407711">ตั้งค่าโปรไฟล์ Chromium ใหม่</translation>
 <translation id="1396446129537741364">Chromium กำลังพยายามแสดงรหัสผ่าน</translation>
@@ -24,10 +25,12 @@
 <translation id="1929939181775079593">Chromium ไม่ตอบสนอง เปิดใหม่เลยหรือไม่</translation>
 <translation id="1966382378801805537">Chromium ไม่สามารถกำหนดหรือตั้งค่าเบราว์เซอร์เริ่มต้น</translation>
 <translation id="2008474315282236005">การดำเนินการนี้จะลบ 1 รายการออกจากอุปกรณ์นี้ หากต้องการดึงข้อมูลภายหลัง ให้ลงชื่อเข้าใช้ Chromium ด้วย <ph name="USER_EMAIL" /></translation>
+<translation id="2020032459870799438"><ph name="BEGIN_LINK" />ลงชื่อเข้าใช้ Chromium<ph name="END_LINK" /> เพื่อตรวจสอบว่ารหัสผ่านรายการอื่นไม่ได้รับผลกระทบจากการละเมิดข้อมูลและปัญหาด้านความปลอดภัยอื่นๆ</translation>
 <translation id="2185166961232948079">Chromium - หน้าลงชื่อเข้าใช้ของเครือข่าย - <ph name="PAGE_TITLE" /></translation>
 <translation id="2225696941839557119">Chromium OS ซิงค์รหัสผ่านของคุณไม่ได้</translation>
 <translation id="2241627712206172106">ถ้าคุณให้ผู้อื่นใช้คอมพิวเตอร์ร่วมด้วย เพื่อนๆ และครอบครัวของคุณสามารถท่องเว็บแยกกันได้และตั้งค่า Chromium ได้ตามที่พวกเขาต้องการ</translation>
 <translation id="2294245788148774212">ไม่บังคับ: ช่วยปรับปรุงฟีเจอร์และประสิทธิภาพของ Chromium OS โดยการส่งข้อมูลการวินิจฉัยและการใช้งานให้ Google โดยอัตโนมัติ</translation>
+<translation id="2343156876103232566">หากต้องการส่งหมายเลขจากที่นี่ไปยังโทรศัพท์ Android ให้ลงชื่อเข้าใช้ Chromium ในอุปกรณ์ทั้งสองเครื่อง</translation>
 <translation id="2347108572062610441">ส่วนขยายนี้ได้เปลี่ยนหน้าที่จะแสดงเมื่อคุณเริ่มต้น Chromium</translation>
 <translation id="2396765026452590966">ส่วนขยาย "<ph name="EXTENSION_NAME" />" ได้เปลี่ยนหน้าที่จะแสดงเมื่อคุณเริ่มต้น Chromium</translation>
 <translation id="2483889755041906834">ใน Chromium</translation>
@@ -73,6 +76,7 @@
 <translation id="3575459661164320785">มีซอฟต์แวร์อันตรายในคอมพิวเตอร์ของคุณ Chromium ช่วยนำซอฟต์แวร์ดังกล่าวออก คืนการตั้งค่า และปิดใช้ส่วนขยายให้คุณได้ เพื่อให้เบราว์เซอร์กลับมาทำงานเป็นปกติอีกครั้ง</translation>
 <translation id="3639635944603682591">ระบบจะลบข้อมูลการท่องเว็บของบุคคลนี้ออกจากอุปกรณ์นี้ หากต้องการกู้ข้อมูลคืน ให้ลงชื่อเข้าใช้ Chromium ในชื่อ <ph name="USER_EMAIL" /></translation>
 <translation id="364817392622123556">{COUNT,plural, =0{อัปเดตใหม่ของ Chromium พร้อมให้ใช้งานแล้วและระบบจะใช้อัปเดตดังกล่าวเมื่อคุณเปิด Chromium ขึ้นมาใหม่}=1{อัปเดตใหม่ของ Chromium พร้อมให้ใช้งานแล้วและระบบจะใช้อัปเดตดังกล่าวเมื่อคุณเปิด Chromium ขึ้นมาใหม่ หน้าต่างที่ไม่ระบุตัวตนจะไม่เปิดให้อีก}other{อัปเดตใหม่ของ Chromium พร้อมให้ใช้งานแล้วและระบบจะใช้อัปเดตดังกล่าวเมื่อคุณเปิด Chromium ขึ้นมาใหม่ หน้าต่างที่ไม่ระบุตัวตนจำนวน # หน้าต่างจะไม่เปิดให้อีก}}</translation>
+<translation id="3651803019964686660">หากต้องการส่งหมายเลขจาก <ph name="ORIGIN" /> ไปยังโทรศัพท์ Android ให้ลงชื่อเข้าใช้ Chromium ในอุปกรณ์ทั้งสองเครื่อง</translation>
 <translation id="3685209450716071127">Chromium ตรวจสอบรหัสผ่านของคุณไม่ได้ โปรดลองตรวจสอบการเชื่อมต่ออินเทอร์เน็ต</translation>
 <translation id="370962675267501463">{COUNT,plural, =0{ผู้ดูแลระบบขอให้คุณเปิด Chromium ขึ้นมาใหม่เพื่อใช้การอัปเดตนี้}=1{ผู้ดูแลระบบขอให้คุณเปิด Chromium ขึ้นมาใหม่เพื่อใช้การอัปเดตนี้ หน้าต่างที่ไม่ระบุตัวตนจะไม่เปิดให้อีก}other{ผู้ดูแลระบบขอให้คุณเปิด Chromium ขึ้นมาใหม่เพื่อใช้การอัปเดตนี้ หน้าต่างที่ไม่ระบุตัวตนจำนวน # หน้าต่างจะไม่เปิดให้อีก}}</translation>
 <translation id="3713809861844741608">เปิดลิงก์ใน Chromium แท็บใหม่</translation>
@@ -143,6 +147,7 @@
 <translation id="6120345080069858279">Chromium จะบันทึกรหัสผ่านนี้ในบัญชี Google คุณจะได้ไม่ต้องจำรหัสผ่านเอง</translation>
 <translation id="6129621093834146363"><ph name="FILE_NAME" /> เป็นอันตราย Chromium จึงบล็อกไว้</translation>
 <translation id="6134968993075716475">Google Safe Browsing ปิดอยู่ Chromium ขอแนะนำให้เปิด</translation>
+<translation id="6183079672144801177">ตรวจสอบว่าคุณลงชื่อเข้าใช้ Chromium ใน <ph name="TARGET_DEVICE_NAME" /> แล้วลองส่งอีกครั้ง</translation>
 <translation id="6212496753309875659">คอมพิวเตอร์เครื่องนี้ติดตั้ง Chromium รุ่นที่ใหม่กว่าอยู่แล้ว ถ้าซอฟต์แวร์ไม่ทำงาน โปรดถอนการติดตั้ง Chromium และลองอีกครั้ง</translation>
 <translation id="6219195342503754812">{0,plural, =0{Chromium จะเปิดขึ้นมาใหม่ตอนนี้}=1{Chromium จะเปิดขึ้นมาใหม่ใน 1 วินาที}other{Chromium จะเปิดขึ้นมาใหม่ใน # วินาที}}</translation>
 <translation id="623836266260425961">Chromium OS ซิงค์ข้อมูลของคุณไม่ได้</translation>
diff --git a/chrome/app/resources/generated_resources_bs.xtb b/chrome/app/resources/generated_resources_bs.xtb
index 48b8946..ab2d0ba 100644
--- a/chrome/app/resources/generated_resources_bs.xtb
+++ b/chrome/app/resources/generated_resources_bs.xtb
@@ -983,7 +983,7 @@
 <translation id="2131077480075264">Nije moguće instalirati aplikaciju "<ph name="APP_NAME" />" jer to ne dozvoljava "<ph name="IMPORT_NAME" />"</translation>
 <translation id="21354425047973905">Sakrij PIN-ove</translation>
 <translation id="2135456203358955318">Priključeno povećalo</translation>
-<translation id="2135468118189259524">Na stranici <ph name="BEGIN_LINK" />policies.google.com<ph name="END_LINK" /> saznajte više o podacima koje Google prikuplja i razlozima zašto to čini.</translation>
+<translation id="2135468118189259524">Saznajte više o podacima koje Google prikuplja i zbog čega to čini na <ph name="BEGIN_LINK" />policies.google.com<ph name="END_LINK" />.</translation>
 <translation id="2135787500304447609">&amp;Nastavi</translation>
 <translation id="2136372518715274136">Unesite novu lozinku</translation>
 <translation id="2136476978468204130">Pristupni izraz koji ste unijeli nije ispravan</translation>
@@ -3640,7 +3640,7 @@
 <translation id="5307030433605830021">Izvor nije podržan</translation>
 <translation id="5308380583665731573">Poveži</translation>
 <translation id="5310281978693206542">Pošaljite link na svoje uređaje</translation>
-<translation id="531118851858162334">Ta vam se stavka prikazuje na temelju vaše prethodne aktivnosti na Googleovim uslugama. Na stranici <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> možete pogledati svoje podatke, izbrisati ih i promijeniti postavke.</translation>
+<translation id="531118851858162334">Ova stavka vam se prikazuje na osnovu vaše prethodne aktivnosti dok ste koristili Googleove usluge. Možete pogledati svoje podatke, izbrisati ih te promijeniti postavke na <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
 <translation id="5311304534597152726">Prijavljivanje kao</translation>
 <translation id="5311565231560644461">Nemoj dozvoliti web lokacijama da koriste moje uređaje i podatke virtuelne realnosti</translation>
 <translation id="5314381603623123224">Chromeovi Uslovi korištenja usluge će se promijeniti 31. marta</translation>
@@ -6391,7 +6391,7 @@
 <translation id="8592141010104017453">Uopšte ne prikazuj obavještenja</translation>
 <translation id="859246725979739260">Ovoj web lokaciji je blokiran pristup vašoj lokaciji.</translation>
 <translation id="8593121833493516339">Šaljite podatke o korištenju i dijagnostici. Poboljšajte iskustvo korištenja Androida svog djeteta automatskim slanjem podataka o dijagnostici, uređaju i korištenju aplikacija Googleu. Ovo se neće koristiti za identifikaciju vašeg djeteta, a pomoći će stabilnosti sistema i aplikacija, kao i drugim poboljšanjima. Neki zbirni podaci će također pomoći Googleovim aplikacijama i partnerima, kao što su programeri za Android. Ako je za vaše dijete uključena dodatna Aktivnost na webu i u aplikacijama, ovi podaci se mogu pohranjivati na njegov Google račun. <ph name="BEGIN_LINK1" />Saznajte više<ph name="END_LINK1" /></translation>
-<translation id="8593735906501637689">Uklonjeni filtar: <ph name="MODULE_TITLE" /></translation>
+<translation id="8593735906501637689">Uklonjeno: <ph name="MODULE_TITLE" /></translation>
 <translation id="8594908476761052472">Snimi videozapis</translation>
 <translation id="8596540852772265699">Prilagođeni fajlovi</translation>
 <translation id="8597845839771543242">Format atributa:</translation>
diff --git a/chrome/app/resources/generated_resources_ca.xtb b/chrome/app/resources/generated_resources_ca.xtb
index 1cdaa96..2f1f5e8 100644
--- a/chrome/app/resources/generated_resources_ca.xtb
+++ b/chrome/app/resources/generated_resources_ca.xtb
@@ -5403,7 +5403,7 @@
 <translation id="7434969625063495310">No s'ha pogut afegir el servidor d'impressió. Comprova'n la configuració i torna-ho a provar.</translation>
 <translation id="7436921188514130341">S'ha produït un error durant el canvi de nom.</translation>
 <translation id="7438976808740265764">Flash Player ja no s'admetrà a partir de desembre de 2020.</translation>
-<translation id="7439519621174723623">Afegeix el nom d'un dispositiu per continuar</translation>
+<translation id="7439519621174723623">Posa un nom al dispositiu per continuar</translation>
 <translation id="7441736921018636843">Si vols canviar aquesta opció, <ph name="BEGIN_LINK" />restableix la sincronització<ph name="END_LINK" /> perquè se suprimeixi la frase de contrasenya de sincronització</translation>
 <translation id="7441830548568730290">Altres usuaris</translation>
 <translation id="7442465037756169001">El programari de Hangouts Meet ja es pot configurar.</translation>
diff --git a/chrome/app/resources/generated_resources_de.xtb b/chrome/app/resources/generated_resources_de.xtb
index a9eada0..9f0de1f 100644
--- a/chrome/app/resources/generated_resources_de.xtb
+++ b/chrome/app/resources/generated_resources_de.xtb
@@ -227,6 +227,7 @@
 <translation id="1249643471736608405">Das Plug-in <ph name="PLUGIN_NAME" /> wurde blockiert, weil es eingestellt wurde</translation>
 <translation id="1251366534849411931">Erwartete öffnende geschweifte Klammer: <ph name="ERROR_LINE" /></translation>
 <translation id="1251480783646955802">Dadurch werden <ph name="TOTAL_USAGE" /> an von Websites oder installierten Apps gespeicherten Daten gelöscht</translation>
+<translation id="125220115284141797">Standard</translation>
 <translation id="1252987234827889034">Profilfehler aufgetreten</translation>
 <translation id="1254593899333212300">Direkte Internetverbindung</translation>
 <translation id="1259152067760398571">Der Sicherheitscheck wurde gestern durchgeführt</translation>
@@ -318,6 +319,7 @@
 <translation id="1361872463926621533">Ton beim Start abspielen</translation>
 <translation id="1362865166188278099">Mechanischer Fehler. Drucker prüfen.</translation>
 <translation id="1363585519747660921">USB-Drucker muss konfiguriert werden</translation>
+<translation id="1364664799726141130">Das bestätigte Konto ist nicht berechtigt, auf dieses Gerät zuzugreifen. Prüfen Sie bitte, dass Sie <ph name="ACCOUNT" /> bestätigen, um die Sitzung zu entsperren.</translation>
 <translation id="1365180424462182382"><ph name="BEGIN_LINK" />Ihr Browser wird von <ph name="ENROLLMENT_DOMAIN" /> verwaltet<ph name="END_LINK" /></translation>
 <translation id="1367951781824006909">Datei auswählen</translation>
 <translation id="1369149969991017342">Schalterzugriff (zum Steuern des Computers mit nur einem oder zwei Schaltern)</translation>
@@ -426,6 +428,7 @@
 <translation id="1486096554574027028">Passwörter suchen</translation>
 <translation id="1487335504823219454">An – benutzerdefinierte Einstellungen</translation>
 <translation id="1489664337021920575">Andere Option auswählen</translation>
+<translation id="1492417797159476138">Sie haben diesen Nutzernamen für diese Website bereits gespeichert</translation>
 <translation id="1493892686965953381">Warten auf <ph name="LOAD_STATE_PARAMETER" />...</translation>
 <translation id="1495486559005647033"><ph name="NUM_PRINTERS" /> weitere Geräte verfügbar</translation>
 <translation id="1495677929897281669">Zurück zum Tab</translation>
@@ -648,6 +651,7 @@
 <translation id="173628468822554835">Ok. Standardmäßig senden Ihnen neue Websites, die Sie besuchen, keine Benachrichtigungen.</translation>
 <translation id="1736419249208073774">Entdecken</translation>
 <translation id="1737968601308870607">Fehler melden</translation>
+<translation id="174123615272205933">Benutzerdefiniert</translation>
 <translation id="1741314857973421784">Weiter</translation>
 <translation id="1743570585616704562">Nicht erkannt</translation>
 <translation id="1743970419083351269">Downloadleiste schließen</translation>
@@ -682,6 +686,7 @@
 <translation id="1776712937009046120">Nutzer hinzufügen</translation>
 <translation id="1776883657531386793"><ph name="OID" />: <ph name="INFO" /></translation>
 <translation id="1778457539567749232">Als ungelesen markieren</translation>
+<translation id="1779468444204342338">Minimum</translation>
 <translation id="1779652936965200207">Bitte geben Sie diesen Zugangscode auf "<ph name="DEVICE_NAME" />" ein:</translation>
 <translation id="177989070088644880">App (<ph name="ANDROID_PACKAGE_NAME" />)</translation>
 <translation id="1780152987505130652">Gruppe schließen</translation>
@@ -1454,6 +1459,7 @@
 <translation id="2688196195245426394">Fehler bei der Registrierung des Geräts auf dem Server: <ph name="CLIENT_ERROR" />.</translation>
 <translation id="2690024944919328218">Sprachoptionen anzeigen</translation>
 <translation id="2691385045260836588">Modell</translation>
+<translation id="2691440343905273290">Eingabeeinstellungen ändern</translation>
 <translation id="2693176596243495071">Hoppla! Ein unbekannter Fehler ist aufgetreten. Bitte versuchen Sie es später noch einmal oder wenden Sie sich an Ihren Administrator, wenn das Problem weiterhin besteht.</translation>
 <translation id="2695749433451188613">Internet Printing Protocol (HTTPS)</translation>
 <translation id="2699911226086014512">Fehler beim Festlegen der PIN. Fehlercode: <ph name="RETRIES" />.</translation>
@@ -2070,6 +2076,7 @@
 <translation id="3440663250074896476">Weitere Aktionen für <ph name="BOOKMARK_NAME" /></translation>
 <translation id="3440761377721825626">Nachfragen, wenn eine Website ein Plug-in für den Zugriff auf meinen Computer verwenden möchte</translation>
 <translation id="3441653493275994384">Bildschirm</translation>
+<translation id="3441663102605358937">Melden Sie sich noch einmal bei <ph name="ACCOUNT" /> an, um dieses Konto zu bestätigen</translation>
 <translation id="3445047461171030979">Schnelle Antworten bei Google Assistant</translation>
 <translation id="3445925074670675829">USB-C-Gerät</translation>
 <translation id="3446274660183028131">Bitte Parallels Desktop starten, um Windows zu installieren.</translation>
@@ -2821,6 +2828,7 @@
 <translation id="4312866146174492540">Blockieren (Standard)</translation>
 <translation id="4314815835985389558">Synchronisierung verwalten</translation>
 <translation id="4316850752623536204">Website des Entwicklers</translation>
+<translation id="4317820549299924617">Bestätigung fehlgeschlagen</translation>
 <translation id="4320177379694898372">Keine Internetverbindung</translation>
 <translation id="4322394346347055525">Andere Tabs schließen</translation>
 <translation id="4324577459193912240">Datei unvollständig</translation>
@@ -3666,6 +3674,7 @@
 <translation id="5362741141255528695">Datei mit privatem Schlüssel wählen</translation>
 <translation id="5363109466694494651">Powerwash durchführen und zurücksetzen</translation>
 <translation id="5365881113273618889">Der ausgewählte Ordner enthält vertrauliche Dateien. Möchten Sie <ph name="APP_NAME" /> wirklich dauerhaft Schreibzugriff auf diesen Ordner gewähren?</translation>
+<translation id="536638840841140142">Keine</translation>
 <translation id="5368720394188453070">Ihr Telefon ist gesperrt. Entsperren Sie es, um fortzufahren.</translation>
 <translation id="5368779022775404937">Anmelden bei <ph name="REALM" /></translation>
 <translation id="5369491905435686894">Mausbeschleunigung aktivieren</translation>
@@ -4819,6 +4828,7 @@
 <translation id="6748465660675848252">Sie können den Vorgang fortsetzen, allerdings werden nur Ihre synchronisierten Daten und Einstellungen wiederhergestellt. Alle lokalen Daten gehen verloren.</translation>
 <translation id="6749006854028927059">Websites können Ihre Cookies nicht verwenden, um Ihre Browseraktivitäten auf anderen Websites zu sehen und beispielsweise zur Personalisierung von Werbung zu nutzen. Einige Websites funktionieren dann möglicherweise nicht mehr richtig.</translation>
 <translation id="6750757184909117990">Mobilfunknetz deaktivieren</translation>
+<translation id="6750946710563435348">Anderen Nutzernamen verwenden</translation>
 <translation id="6751344591405861699"><ph name="WINDOW_TITLE" /> (anonym)</translation>
 <translation id="6757101664402245801">URL kopiert</translation>
 <translation id="6758056191028427665">Teilen Sie uns mit, wie zufrieden Sie mit uns sind.</translation>
@@ -5337,6 +5347,7 @@
 <translation id="7377451353532943397">Zugriff auf den Sensor weiterhin blockieren</translation>
 <translation id="73786666777299047">Chrome Web Store öffnen</translation>
 <translation id="7378812711085314936">Datenverbindung nutzen</translation>
+<translation id="7380622428988553498">Gerätename enthält ungültige Zeichen</translation>
 <translation id="7380768571499464492"><ph name="PRINTER_NAME" /> aktualisiert</translation>
 <translation id="7384687527486377545">Automatische Wiederholung für Tastatur</translation>
 <translation id="7385854874724088939">Beim Drucken ist ein Fehler aufgetreten. Bitte überprüfen Sie Ihren Drucker und versuchen Sie es erneut.</translation>
@@ -5385,6 +5396,7 @@
 <translation id="7434969625063495310">Der Druckerserver konnte nicht hinzugefügt werden. Prüfen Sie die Konfiguration des Servers und versuchen Sie es noch einmal.</translation>
 <translation id="7436921188514130341">Oh nein! Beim Umbenennen ist ein Fehler aufgetreten.</translation>
 <translation id="7438976808740265764">Flash Player wird ab Dezember 2020 nicht mehr unterstützt.</translation>
+<translation id="7439519621174723623">Geben Sie einen Gerätenamen ein, um fortzufahren</translation>
 <translation id="7441736921018636843">Wenn Sie diese Einstellung ändern möchten, müssen Sie die <ph name="BEGIN_LINK" />Synchronisierung zurücksetzen<ph name="END_LINK" />, um die Synchronisierungspassphrase zu entfernen</translation>
 <translation id="7441830548568730290">Andere Nutzer</translation>
 <translation id="7442465037756169001">Sie können Ihre Hangouts Meet-Hardware jetzt einrichten.</translation>
@@ -5626,6 +5638,7 @@
 <translation id="7717134585801378441">Websites dürfen nach meinem Standort fragen (empfohlen)</translation>
 <translation id="7717845620320228976">Nach Updates suchen</translation>
 <translation id="7719367874908701697">Seitenzoom</translation>
+<translation id="7719588063158526969">Gerätename zu lang</translation>
 <translation id="7721179060400456005">Fenster können sich über mehrere Bildschirme erstrecken</translation>
 <translation id="7722040605881499779">Für Update benötigt: <ph name="NECESSARY_SPACE" /></translation>
 <translation id="7724603315864178912">Ausschneiden</translation>
@@ -5930,6 +5943,7 @@
 <translation id="8049705080247101012">"<ph name="EXTENSION_NAME" />" wurde von Google als schädlich eingestuft und die Installation wurde blockiert</translation>
 <translation id="8049948037269924837">Gegenläufiges Scrollen für Touchpad</translation>
 <translation id="8050038245906040378">Kommerzielle Microsoft-Codesignatur</translation>
+<translation id="8050191834453426339">Erneut bestätigen</translation>
 <translation id="8051193500142930381">Funktionen, die eine Kamera benötigen, funktionieren dann nicht</translation>
 <translation id="8051390370038326517"><ph name="HOST" /> immer die vollständige Kontrolle über MIDI-Geräte erlauben</translation>
 <translation id="8053278772142718589">PKCS #12-Dateien</translation>
diff --git a/chrome/app/resources/generated_resources_es-419.xtb b/chrome/app/resources/generated_resources_es-419.xtb
index fdf1c48..b5f72530 100644
--- a/chrome/app/resources/generated_resources_es-419.xtb
+++ b/chrome/app/resources/generated_resources_es-419.xtb
@@ -122,6 +122,7 @@
 <translation id="1134009406053225289">Abrir en una ventana de incógnito</translation>
 <translation id="1136179794690960030"><ph name="EMOJI_NAME" />. <ph name="EMOJI_INDEX" /> de <ph name="EMOJI_COUNT" />.</translation>
 <translation id="1136712381129578788">Se ingresó el PIN de forma incorrecta demasiadas veces; por lo tanto, se bloqueó la llave de seguridad. Para desbloquearla, quítala y vuelve a insertarla.</translation>
+<translation id="1137589305610962734">datos temporales</translation>
 <translation id="1137673463384776352">Abrir vínculo en <ph name="APP" /></translation>
 <translation id="1139343347646843679">Se produjo un error al configurar Linux. Comunícate con el administrador.</translation>
 <translation id="1140351953533677694">Acceder a los dispositivos en serie y Bluetooth</translation>
@@ -227,6 +228,7 @@
 <translation id="1249643471736608405">Se bloqueó <ph name="PLUGIN_NAME" /> porque dejó de estar disponible</translation>
 <translation id="1251366534849411931">Llave de apertura esperada: <ph name="ERROR_LINE" /></translation>
 <translation id="1251480783646955802">Esta acción borrará <ph name="TOTAL_USAGE" /> de datos almacenados por sitios y apps instaladas</translation>
+<translation id="125220115284141797">Predeterminado</translation>
 <translation id="1252987234827889034">Se produjo un error en el perfil</translation>
 <translation id="1254593899333212300">Conexión directa a Internet</translation>
 <translation id="1259152067760398571">Ayer se ejecutó la verificación de seguridad</translation>
@@ -318,6 +320,7 @@
 <translation id="1361872463926621533">Reproducir sonidos en el inicio</translation>
 <translation id="1362865166188278099">Hubo un problema mecánico. Verifica la impresora.</translation>
 <translation id="1363585519747660921">La impresora USB debe configurarse</translation>
+<translation id="1364664799726141130">La cuenta que verificaste no tiene autorización para acceder a este dispositivo. Para desbloquear la sesión, asegúrate de verificar <ph name="ACCOUNT" />.</translation>
 <translation id="1365180424462182382"><ph name="ENROLLMENT_DOMAIN" /> administra tu <ph name="BEGIN_LINK" />navegador<ph name="END_LINK" /></translation>
 <translation id="1367951781824006909">Selecciona un archivo</translation>
 <translation id="1369149969991017342">Accesibilidad con interruptores (controlar la computadora con solo uno o dos cambios)</translation>
@@ -426,6 +429,7 @@
 <translation id="1486096554574027028">Buscar contraseñas</translation>
 <translation id="1487335504823219454">Activado: Configuración personalizada</translation>
 <translation id="1489664337021920575">Elegir otra opción</translation>
+<translation id="1492417797159476138">Ya guardaste este nombre de usuario para este sitio</translation>
 <translation id="1493892686965953381">Esperando <ph name="LOAD_STATE_PARAMETER" />...</translation>
 <translation id="1495486559005647033">Hay otros <ph name="NUM_PRINTERS" /> dispositivos disponibles.</translation>
 <translation id="1495677929897281669">Volver a la pestaña</translation>
@@ -648,6 +652,7 @@
 <translation id="173628468822554835">Entendido. De forma predeterminada, los nuevos sitios que visites no te enviarán notificaciones.</translation>
 <translation id="1736419249208073774">Explorar</translation>
 <translation id="1737968601308870607">Incluir error</translation>
+<translation id="174123615272205933">Personalizado</translation>
 <translation id="1741314857973421784">Continuar</translation>
 <translation id="1743570585616704562">No se reconoció</translation>
 <translation id="1743970419083351269">Cerrar la barra de descargas</translation>
@@ -682,6 +687,7 @@
 <translation id="1776712937009046120">Agregar usuario</translation>
 <translation id="1776883657531386793"><ph name="OID" />: <ph name="INFO" /></translation>
 <translation id="1778457539567749232">Marcar como no leído</translation>
+<translation id="1779468444204342338">Mínima</translation>
 <translation id="1779652936965200207">Ingresa esta clave de acceso en "<ph name="DEVICE_NAME" />":</translation>
 <translation id="177989070088644880">App (<ph name="ANDROID_PACKAGE_NAME" />)</translation>
 <translation id="1780152987505130652">Cerrar grupo</translation>
@@ -974,6 +980,7 @@
 <translation id="2131077480075264">No se pudo instalar "<ph name="APP_NAME" />" porque no tiene permisos de "<ph name="IMPORT_NAME" />".</translation>
 <translation id="21354425047973905">Oculta los PIN</translation>
 <translation id="2135456203358955318">Lupa con vista acoplada</translation>
+<translation id="2135468118189259524">Obtén más información sobre la información que Google recopila (y los motivos para ello) en <ph name="BEGIN_LINK" />policies.google.com<ph name="END_LINK" />.</translation>
 <translation id="2135787500304447609">&amp;Reanudar</translation>
 <translation id="2136372518715274136">Ingresa la nueva contraseña</translation>
 <translation id="2136476978468204130">La frase de contraseña que ingresaste es incorrecta</translation>
@@ -1455,6 +1462,7 @@
 <translation id="2688196195245426394">Se produjo un error al registrar el dispositivo en el servidor: <ph name="CLIENT_ERROR" />.</translation>
 <translation id="2690024944919328218">Mostrar opciones de idioma</translation>
 <translation id="2691385045260836588">Modelo</translation>
+<translation id="2691440343905273290">Cambiar la configuración de entrada</translation>
 <translation id="2693176596243495071">Se produjo un error desconocido. Vuelve a intentarlo más tarde o comunícate con tu administrador si el problema persiste.</translation>
 <translation id="2695749433451188613">Protocolo de impresión por Internet (HTTPS)</translation>
 <translation id="2699911226086014512">No se pudo realizar la operación del PIN con el código <ph name="RETRIES" />.</translation>
@@ -2071,6 +2079,7 @@
 <translation id="3440663250074896476">Más acciones para <ph name="BOOKMARK_NAME" /></translation>
 <translation id="3440761377721825626">Preguntarme cuando un sitio intente usar un complemento para acceder a mi computadora</translation>
 <translation id="3441653493275994384">Pantalla</translation>
+<translation id="3441663102605358937">Vuelve a acceder a <ph name="ACCOUNT" /> para verificar esta cuenta</translation>
 <translation id="3445047461171030979">Respuestas rápidas del Asistente de Google</translation>
 <translation id="3445925074670675829">Dispositivo USB-C</translation>
 <translation id="3446274660183028131">Inicia Parallels Desktop para instalar Windows.</translation>
@@ -2822,6 +2831,7 @@
 <translation id="4312866146174492540">Bloquear (predeterminado)</translation>
 <translation id="4314815835985389558">Administrar la sincronización</translation>
 <translation id="4316850752623536204">Sitio web del programador</translation>
+<translation id="4317820549299924617">No se completó la verificación</translation>
 <translation id="4320177379694898372">Sin conexión a Internet</translation>
 <translation id="4322394346347055525">Cerrar las demás pestañas</translation>
 <translation id="4324577459193912240">El archivo está incompleto</translation>
@@ -3627,6 +3637,7 @@
 <translation id="5307030433605830021">No se admite la fuente</translation>
 <translation id="5308380583665731573">Conectar</translation>
 <translation id="5310281978693206542">Enviar vínculo a tus dispositivos</translation>
+<translation id="531118851858162334">Te mostramos este elemento en función de tu actividad previa en los servicios de Google. Puedes ver tus datos, borrarlos y cambiar la configuración en <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
 <translation id="5311304534597152726">Accediendo como</translation>
 <translation id="5311565231560644461">No permitir que los sitios utilicen tus datos y dispositivos de realidad virtual</translation>
 <translation id="5314381603623123224">El 31 de marzo, cambiarán las Condiciones del Servicio de Chrome</translation>
@@ -3667,6 +3678,7 @@
 <translation id="5362741141255528695">Seleccionar archivo de clave privada.</translation>
 <translation id="5363109466694494651">Utilizar la función Powerwash y revertir</translation>
 <translation id="5365881113273618889">La carpeta seleccionada contiene archivos confidenciales. ¿Confirmas que deseas otorgar a "<ph name="APP_NAME" />" acceso de escritura permanente a esta carpeta?</translation>
+<translation id="536638840841140142">Ninguna</translation>
 <translation id="5368720394188453070">El teléfono está bloqueado. Desbloquéalo para ingresar.</translation>
 <translation id="5368779022775404937">Acceder a <ph name="REALM" /></translation>
 <translation id="5369491905435686894">Habilitar la aceleración del mouse</translation>
@@ -4820,6 +4832,7 @@
 <translation id="6748465660675848252">Puedes continuar, pero se restaurarán únicamente la configuración y los datos sincronizados. Se perderán todos los datos locales.</translation>
 <translation id="6749006854028927059">Los sitios no pueden usar tus cookies para ver la actividad de navegación en diferentes sitios, por ejemplo, con el fin de personalizar anuncios. Es posible que las características de algunos sitios no funcionen de forma adecuada.</translation>
 <translation id="6750757184909117990">Inhabilitar la red móvil</translation>
+<translation id="6750946710563435348">Usar otro nombre de usuario</translation>
 <translation id="6751344591405861699"><ph name="WINDOW_TITLE" /> (Incógnito)</translation>
 <translation id="6757101664402245801">URL copiada</translation>
 <translation id="6758056191028427665">Danos tu opinión sobre nuestro trabajo.</translation>
@@ -5338,6 +5351,7 @@
 <translation id="7377451353532943397">Seguir bloqueando el acceso a los sensores</translation>
 <translation id="73786666777299047">Abrir Chrome Web Store</translation>
 <translation id="7378812711085314936">Obtener conexión de datos</translation>
+<translation id="7380622428988553498">El nombre del dispositivo incluye caracteres no válidos</translation>
 <translation id="7380768571499464492">Se actualizó <ph name="PRINTER_NAME" /></translation>
 <translation id="7384687527486377545">Repetición automática del teclado</translation>
 <translation id="7385854874724088939">Algo falló al intentar imprimir. Comprueba tu impresora e inténtalo nuevamente.</translation>
@@ -5386,6 +5400,7 @@
 <translation id="7434969625063495310">No se pudo agregar el servidor de impresión. Revisa la configuración del servidor y vuelve a intentarlo.</translation>
 <translation id="7436921188514130341">Se produjo un error al cambiar el nombre.</translation>
 <translation id="7438976808740265764">Flash Player dejará de ser compatible a partir de diciembre de 2020.</translation>
+<translation id="7439519621174723623">Agregar un nombre de dispositivo para continuar</translation>
 <translation id="7441736921018636843">A fin de cambiar esta configuración, <ph name="BEGIN_LINK" />restablece la sincronización<ph name="END_LINK" /> para quitar la frase de contraseña de sincronización</translation>
 <translation id="7441830548568730290">Otros usuarios</translation>
 <translation id="7442465037756169001">El hardware de Hangouts Meet ya está listo para su configuración.</translation>
@@ -5627,6 +5642,7 @@
 <translation id="7717134585801378441">Permitir que los sitios soliciten tu ubicación (recomendado)</translation>
 <translation id="7717845620320228976">Comprobar actualizaciones</translation>
 <translation id="7719367874908701697">Zoom de página</translation>
+<translation id="7719588063158526969">El nombre del dispositivo es demasiado largo</translation>
 <translation id="7721179060400456005">Permitir que las ventanas abarquen las pantallas</translation>
 <translation id="7722040605881499779">Espacio necesario para la actualización: <ph name="NECESSARY_SPACE" /></translation>
 <translation id="7724603315864178912">Cortar</translation>
@@ -5931,6 +5947,7 @@
 <translation id="8049705080247101012">Google marcó <ph name="EXTENSION_NAME" /> como extensión maliciosa y se canceló la instalación</translation>
 <translation id="8049948037269924837">Desplazamiento invertido del panel táctil</translation>
 <translation id="8050038245906040378">Firma de código comercial de Microsoft</translation>
+<translation id="8050191834453426339">Verificar de nuevo</translation>
 <translation id="8051193500142930381">No se habilitarán las funciones que necesitan una cámara.</translation>
 <translation id="8051390370038326517">Siempre permitir que <ph name="HOST" /> controle totalmente los dispositivos MIDI</translation>
 <translation id="8053278772142718589">Archivos PKCS #12</translation>
@@ -6206,6 +6223,7 @@
 <translation id="8378714024927312812">Administrado por tu organización</translation>
 <translation id="8379878387931047019">Este dispositivo no es compatible con el tipo de llave de seguridad que se solicita en este sitio web</translation>
 <translation id="8379991678458444070">Para regresar aquí rápidamente, agrega esta pestaña a favoritos</translation>
+<translation id="8380266723152870797">Nombre de la ventana</translation>
 <translation id="8382384117483909115">{NUM_TABS,plural, =1{Leer la pestaña más tarde}other{Leer las pestañas más tarde}}</translation>
 <translation id="8382913212082956454">Copiar dir&amp;ección de correo electrónico</translation>
 <translation id="8386091599636877289">No se encontró la política.</translation>
@@ -6370,6 +6388,7 @@
 <translation id="8592141010104017453">No mostrar ninguna notificación</translation>
 <translation id="859246725979739260">Este sitio no tiene permiso para acceder a tu ubicación.</translation>
 <translation id="8593121833493516339">Envía datos de uso y diagnóstico. Para ayudar a mejorar la experiencia de Android de tu hijo, envía a Google datos de diagnóstico y uso de dispositivos y apps de forma automática. Esta información no se usará para identificar a tu hijo y ayudará a lograr la estabilidad de las apps y el sistema, entre otras mejoras. Algunos datos agregados también ayudarán a las apps y los socios de Google, como los desarrolladores de Android. Si habilitaste la "Actividad de web y de aplicaciones adicional" en la Cuenta de Google de tu hijo, es posible que se almacenen estos datos en esa cuenta. <ph name="BEGIN_LINK1" />Más información<ph name="END_LINK1" /></translation>
+<translation id="8593735906501637689">Se quitó <ph name="MODULE_TITLE" /></translation>
 <translation id="8594908476761052472">Capturar video</translation>
 <translation id="8596540852772265699">Archivos personalizados</translation>
 <translation id="8597845839771543242">Formato de la propiedad:</translation>
diff --git a/chrome/app/resources/generated_resources_es.xtb b/chrome/app/resources/generated_resources_es.xtb
index 0ec07b0..a305261 100644
--- a/chrome/app/resources/generated_resources_es.xtb
+++ b/chrome/app/resources/generated_resources_es.xtb
@@ -122,6 +122,7 @@
 <translation id="1134009406053225289">Abrir en una ventana de incógnito</translation>
 <translation id="1136179794690960030"><ph name="EMOJI_NAME" />. <ph name="EMOJI_INDEX" /> de <ph name="EMOJI_COUNT" />.</translation>
 <translation id="1136712381129578788">La llave de seguridad está bloqueada porque se ha introducido el PIN de forma incorrecta demasiadas veces. Para desbloquearla, quítala y vuelve a introducirla.</translation>
+<translation id="1137589305610962734">datos temporales</translation>
 <translation id="1137673463384776352">Abrir enlace en <ph name="APP" /></translation>
 <translation id="1139343347646843679">No se ha podido configurar Linux. Ponte en contacto con tu administrador.</translation>
 <translation id="1140351953533677694">Acceder a tus dispositivos en serie y Bluetooth</translation>
@@ -982,6 +983,7 @@
 <translation id="2131077480075264">No se puede instalar la extensión "<ph name="APP_NAME" />" porque no tiene permiso de "<ph name="IMPORT_NAME" />".</translation>
 <translation id="21354425047973905">Ocultar PINs</translation>
 <translation id="2135456203358955318">Lupa fijada</translation>
+<translation id="2135468118189259524">Si quieres saber qué datos recoge Google y por qué lo hace, visita <ph name="BEGIN_LINK" />policies.google.com<ph name="END_LINK" />.</translation>
 <translation id="2135787500304447609">&amp;Reanudar</translation>
 <translation id="2136372518715274136">Escribe una contraseña nueva</translation>
 <translation id="2136476978468204130">La frase de contraseña que has introducido no es correcta</translation>
@@ -3637,6 +3639,7 @@
 <translation id="5307030433605830021">Fuente no admitida</translation>
 <translation id="5308380583665731573">Conectar</translation>
 <translation id="5310281978693206542">Enviar el enlace a tus dispositivos</translation>
+<translation id="531118851858162334">Se te muestra este elemento debido a tu actividad anterior en los servicios de Google. Puedes consultar tus datos, eliminarlos y cambiar la configuración en <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
 <translation id="5311304534597152726">Iniciando sesión como</translation>
 <translation id="5311565231560644461">No permitir que los sitios web usen tus dispositivos y datos de realidad virtual</translation>
 <translation id="5314381603623123224">Los Términos del Servicio de Chrome cambiarán el 31 de marzo</translation>
@@ -6222,6 +6225,7 @@
 <translation id="8378714024927312812">Gestionado por tu organización</translation>
 <translation id="8379878387931047019">Este dispositivo no es compatible con el tipo de llave de seguridad solicitado por el sitio web</translation>
 <translation id="8379991678458444070">Para volver aquí rápidamente, añade esta pestaña a marcadores</translation>
+<translation id="8380266723152870797">Nombre de ventana</translation>
 <translation id="8382384117483909115">{NUM_TABS,plural, =1{Leer pestaña más tarde}other{Leer pestañas más tarde}}</translation>
 <translation id="8382913212082956454">Copiar dir&amp;ección de correo electrónico</translation>
 <translation id="8386091599636877289">No se ha encontrado la política.</translation>
@@ -6386,6 +6390,7 @@
 <translation id="8592141010104017453">No mostrar notificaciones</translation>
 <translation id="859246725979739260">Este sitio web no tiene permiso para acceder a tu ubicación.</translation>
 <translation id="8593121833493516339">Enviar datos de uso y diagnóstico. Contribuye a mejorar la experiencia de Android de tu hijo enviando automáticamente a Google datos de diagnóstico, del dispositivo y del uso de las aplicaciones. Los datos no se usarán para identificar a tu hijo, sino para aumentar la estabilidad de las aplicaciones y del sistema y realizar otras mejoras. Parte de los datos recogidos también ayudarán a las aplicaciones y los colaboradores de Google, como los desarrolladores de Android. Si la opción Actividad en la Web y en Aplicaciones Adicional está activada, es posible que estos datos se guarden en la cuenta de Google de tu hijo. <ph name="BEGIN_LINK1" />Más información<ph name="END_LINK1" /></translation>
+<translation id="8593735906501637689"><ph name="MODULE_TITLE" /> quitado</translation>
 <translation id="8594908476761052472">Grabar vídeo</translation>
 <translation id="8596540852772265699">Archivos personalizados</translation>
 <translation id="8597845839771543242">Formato de propiedad:</translation>
diff --git a/chrome/app/resources/generated_resources_fa.xtb b/chrome/app/resources/generated_resources_fa.xtb
index cab2ee6b..175eea7 100644
--- a/chrome/app/resources/generated_resources_fa.xtb
+++ b/chrome/app/resources/generated_resources_fa.xtb
@@ -4004,7 +4004,7 @@
 <translation id="5763751966069581670">‏هیچ دستگاه USB پیدا نشد</translation>
 <translation id="5764483294734785780">ذ&amp;خیره فایل صوتی به‌عنوان...</translation>
 <translation id="57646104491463491">تاریخ تغییر</translation>
-<translation id="5764797882307050727">لطفاً کمی از فضای دستگاهتان را آزاد کنید.</translation>
+<translation id="5764797882307050727">لطفاً در دستگاهتان کمی فضا آزاد کنید.</translation>
 <translation id="5765425701854290211">متأسفیم، بعضی از فایل‌ها آسیب دیده بودند و به‌روزرسانی موفق نبود. فایل‌های همگام‌سازی شده‌تان امن هستند.</translation>
 <translation id="5765491088802881382">شبکه‌ای در دسترس نیست</translation>
 <translation id="5769519078756170258">میزبان یا دامنه برای استثنا</translation>
diff --git a/chrome/app/resources/generated_resources_fr.xtb b/chrome/app/resources/generated_resources_fr.xtb
index 2d0f644e..66321e7 100644
--- a/chrome/app/resources/generated_resources_fr.xtb
+++ b/chrome/app/resources/generated_resources_fr.xtb
@@ -227,6 +227,7 @@
 <translation id="1249643471736608405">Le plug-in "<ph name="PLUGIN_NAME" />" a été bloqué, car il est obsolète</translation>
 <translation id="1251366534849411931">Accolade ouvrante attendue : <ph name="ERROR_LINE" /></translation>
 <translation id="1251480783646955802">Cette action effacera <ph name="TOTAL_USAGE" /> des données stockées par les sites et les applications installées</translation>
+<translation id="125220115284141797">Par défaut</translation>
 <translation id="1252987234827889034">Erreur au niveau du profil</translation>
 <translation id="1254593899333212300">Connexion directe à Internet</translation>
 <translation id="1259152067760398571">Contrôle de sécurité effectué hier</translation>
@@ -318,6 +319,7 @@
 <translation id="1361872463926621533">Jouer un son au démarrage</translation>
 <translation id="1362865166188278099">Problème mécanique. Vérifiez l'imprimante</translation>
 <translation id="1363585519747660921">L'imprimante USB n'est pas configurée</translation>
+<translation id="1364664799726141130">Le compte que vous avez validé n'est pas autorisé à accéder à cet appareil. Pour déverrouiller la session, vérifiez que vous êtes bien en train de valider le compte <ph name="ACCOUNT" />.</translation>
 <translation id="1365180424462182382">Votre <ph name="BEGIN_LINK" />navigateur est géré<ph name="END_LINK" /> par <ph name="ENROLLMENT_DOMAIN" /></translation>
 <translation id="1367951781824006909">Choisir un fichier</translation>
 <translation id="1369149969991017342">Switch Access (contrôler l'ordinateur avec un ou deux contacteurs seulement)</translation>
@@ -426,6 +428,7 @@
 <translation id="1486096554574027028">Rechercher</translation>
 <translation id="1487335504823219454">Activée – Paramètres personnalisés</translation>
 <translation id="1489664337021920575">Sélectionner une autre option</translation>
+<translation id="1492417797159476138">Vous avez déjà enregistré ce nom d'utilisateur pour ce site</translation>
 <translation id="1493892686965953381">En attente de <ph name="LOAD_STATE_PARAMETER" />...</translation>
 <translation id="1495486559005647033"><ph name="NUM_PRINTERS" /> autres périphériques disponibles</translation>
 <translation id="1495677929897281669">Retour à l'onglet</translation>
@@ -651,6 +654,7 @@
 <translation id="173628468822554835">OK. Par défaut, les nouveaux sites que vous consultez ne vous enverront pas de notifications.</translation>
 <translation id="1736419249208073774">Découvrir</translation>
 <translation id="1737968601308870607">Signaler un problème</translation>
+<translation id="174123615272205933">Personnalisé</translation>
 <translation id="1741314857973421784">Continuer</translation>
 <translation id="1743570585616704562">Non reconnu</translation>
 <translation id="1743970419083351269">Fermer la barre de téléchargements</translation>
@@ -685,6 +689,7 @@
 <translation id="1776712937009046120">Ajouter un utilisateur</translation>
 <translation id="1776883657531386793"><ph name="OID" /> : <ph name="INFO" /></translation>
 <translation id="1778457539567749232">Marquer comme non lu</translation>
+<translation id="1779468444204342338">Minimum</translation>
 <translation id="1779652936965200207">Saisissez cette clé d'accès sur "<ph name="DEVICE_NAME" />" :</translation>
 <translation id="177989070088644880">Application (<ph name="ANDROID_PACKAGE_NAME" />)</translation>
 <translation id="1780152987505130652">Fermer le groupe</translation>
@@ -1458,6 +1463,7 @@
 <translation id="2688196195245426394">Erreur survenue lors de l'enregistrement de l'appareil avec le serveur : <ph name="CLIENT_ERROR" />.</translation>
 <translation id="2690024944919328218">Afficher les options linguistiques</translation>
 <translation id="2691385045260836588">Modèle</translation>
+<translation id="2691440343905273290">Modifier les paramètres de saisie</translation>
 <translation id="2693176596243495071">Petit problème… Une erreur inconnue s'est produite. Veuillez réessayer plus tard ou contacter votre administrateur si le problème persiste.</translation>
 <translation id="2695749433451188613">Protocole d'impression Internet (HTTPS)</translation>
 <translation id="2699911226086014512">Échec de l'opération. Code <ph name="RETRIES" />.</translation>
@@ -2074,6 +2080,7 @@
 <translation id="3440663250074896476">Autres actions pour <ph name="BOOKMARK_NAME" /></translation>
 <translation id="3440761377721825626">Me demander lorsqu'un site essaie d'utiliser un plug-in pour accéder à mon ordinateur</translation>
 <translation id="3441653493275994384">Écran</translation>
+<translation id="3441663102605358937">Connectez-vous de nouveau à <ph name="ACCOUNT" /> pour valider ce compte</translation>
 <translation id="3445047461171030979">Réponses rapides sur l'Assistant Google</translation>
 <translation id="3445925074670675829">Appareil USB de type C</translation>
 <translation id="3446274660183028131">Veuillez lancer Parallels Desktop pour installer Windows.</translation>
@@ -2825,6 +2832,7 @@
 <translation id="4312866146174492540">Bloquer (par défaut)</translation>
 <translation id="4314815835985389558">Gérer la synchronisation</translation>
 <translation id="4316850752623536204">Site Web du développeur</translation>
+<translation id="4317820549299924617">Échec de la validation</translation>
 <translation id="4320177379694898372">Aucune connexion Internet.</translation>
 <translation id="4322394346347055525">Fermer les autres onglets</translation>
 <translation id="4324577459193912240">Fichier incomplet</translation>
@@ -3670,6 +3678,7 @@
 <translation id="5362741141255528695">Sélectionnez le fichier de clé privée.</translation>
 <translation id="5363109466694494651">Powerwash et rétablir</translation>
 <translation id="5365881113273618889">Le dossier que vous avez sélectionné contient des fichiers sensibles. Voulez-vous vraiment accorder à "<ph name="APP_NAME" />" un accès en écriture permanent à ce dossier ?</translation>
+<translation id="536638840841140142">Aucune</translation>
 <translation id="5368720394188453070">Votre téléphone est verrouillé. Déverrouillez-le pour y accéder.</translation>
 <translation id="5368779022775404937">Se connecter à <ph name="REALM" /></translation>
 <translation id="5369491905435686894">Activer l'accélération du curseur</translation>
@@ -4824,6 +4833,7 @@
 <translation id="6748465660675848252">Vous pouvez continuer, mais seules les données que vous avez synchronisées seront restaurées (de même que vos paramètres). Toutes les données stockées en local seront perdues.</translation>
 <translation id="6749006854028927059">Les sites ne peuvent pas utiliser vos cookies pour voir votre activité de navigation sur l'ensemble des différents sites (par exemple, pour personnaliser les annonces). Les fonctionnalités de certains sites peuvent être bloquées.</translation>
 <translation id="6750757184909117990">Désactiver le réseau mobile</translation>
+<translation id="6750946710563435348">Utiliser un autre nom d'utilisateur</translation>
 <translation id="6751344591405861699"><ph name="WINDOW_TITLE" /> (Navigation privée)</translation>
 <translation id="6757101664402245801">URL copiée</translation>
 <translation id="6758056191028427665">Faites-nous part de vos commentaires.</translation>
@@ -5342,6 +5352,7 @@
 <translation id="7377451353532943397">Continuer de bloquer l'accès aux capteurs</translation>
 <translation id="73786666777299047">Ouvrir le Chrome Web Store</translation>
 <translation id="7378812711085314936">Obtenir une connexion de données</translation>
+<translation id="7380622428988553498">Le nom de l'appareil comporte des caractères non valides</translation>
 <translation id="7380768571499464492">L'imprimante "<ph name="PRINTER_NAME" />" a bien été mise à jour</translation>
 <translation id="7384687527486377545">Répétition automatique du clavier</translation>
 <translation id="7385854874724088939">Erreur lors de la tentative d'impression. Vérifiez votre imprimante et réessayez.</translation>
@@ -5390,6 +5401,7 @@
 <translation id="7434969625063495310">Impossible d'ajouter le serveur d'impression. Veuillez vérifier la configuration du serveur, puis réessayer.</translation>
 <translation id="7436921188514130341">Aïe, aïe, aïe ! Une erreur s'est produite lors du changement du nom.</translation>
 <translation id="7438976808740265764">Flash Player ne sera plus accepté après décembre 2020.</translation>
+<translation id="7439519621174723623">Attribuez un nom à l'appareil pour continuer</translation>
 <translation id="7441736921018636843">Pour modifier ce paramètre, <ph name="BEGIN_LINK" />réinitialisez la synchronisation<ph name="END_LINK" /> pour supprimer votre phrase secrète de synchronisation</translation>
 <translation id="7441830548568730290">Autres utilisateurs</translation>
 <translation id="7442465037756169001">Votre matériel Hangouts Meet est prêt à être configuré.</translation>
@@ -5631,6 +5643,7 @@
 <translation id="7717134585801378441">Les sites peuvent demander votre position (recommandé)</translation>
 <translation id="7717845620320228976">Rechercher des mises à jour</translation>
 <translation id="7719367874908701697">Zoom de la page</translation>
+<translation id="7719588063158526969">Nom d'appareil trop long</translation>
 <translation id="7721179060400456005">Autoriser les fenêtres à occuper plusieurs écrans</translation>
 <translation id="7722040605881499779">Espace nécessaire pour la mise à jour : <ph name="NECESSARY_SPACE" /></translation>
 <translation id="7724603315864178912">Couper</translation>
@@ -5935,6 +5948,7 @@
 <translation id="8049705080247101012">Google a signalé l'extension <ph name="EXTENSION_NAME" /> comme malveillante et a bloqué son installation</translation>
 <translation id="8049948037269924837">Défilement inversé avec le pavé tactile</translation>
 <translation id="8050038245906040378">Signature du code commercial Microsoft</translation>
+<translation id="8050191834453426339">Valider de nouveau</translation>
 <translation id="8051193500142930381">Les fonctionnalités qui nécessitent une caméra ne seront pas disponibles</translation>
 <translation id="8051390370038326517">Toujours autoriser le contrôle total des appareils MIDI pour <ph name="HOST" /></translation>
 <translation id="8053278772142718589">Fichiers PKCS #12</translation>
diff --git a/chrome/app/resources/generated_resources_hi.xtb b/chrome/app/resources/generated_resources_hi.xtb
index 40b228a..ade9ea0 100644
--- a/chrome/app/resources/generated_resources_hi.xtb
+++ b/chrome/app/resources/generated_resources_hi.xtb
@@ -122,6 +122,7 @@
 <translation id="1134009406053225289">गुप्त विंडो में खोलें</translation>
 <translation id="1136179794690960030"><ph name="EMOJI_NAME" />. <ph name="EMOJI_COUNT" /> में से <ph name="EMOJI_INDEX" />.</translation>
 <translation id="1136712381129578788">सुरक्षा कुंजी लॉक कर दी गई है क्योंकि गलत पिन कई बार डाला गया है. सुरक्षा कुंजी को अनलॉक करने के लिए, इसे हटाएं और फिर से लगाएं.</translation>
+<translation id="1137589305610962734">यह डेटा कुछ समय के लिए है</translation>
 <translation id="1137673463384776352"><ph name="APP" /> में लिंक खोलें</translation>
 <translation id="1139343347646843679">Linux को कॉन्फ़िगर करने में गड़बड़ी हुई. कृपया अपने एडमिन से संपर्क करें.</translation>
 <translation id="1140351953533677694">अपने ब्लूटूथ और Serial डिवाइस एक्सेस करें</translation>
@@ -982,6 +983,7 @@
 <translation id="2131077480075264">"<ph name="APP_NAME" />" इंस्‍टॉल करने में असमर्थ क्‍योंकि "<ph name="IMPORT_NAME" />" द्वारा इसकी अनुमति नहीं है</translation>
 <translation id="21354425047973905">पिन छिपाएं</translation>
 <translation id="2135456203358955318">सामग्री को बड़ा दिखाने की डॉक की गई सुविधा</translation>
+<translation id="2135468118189259524"><ph name="BEGIN_LINK" />policies.google.com<ph name="END_LINK" /> पर जाएं और उस डेटा के बारे में जानें जिसे Google इकट्ठा करता है. डेटा इकट्ठा करने की वजह के बारे में भी जानें.</translation>
 <translation id="2135787500304447609">&amp;फिर से शुरू करें</translation>
 <translation id="2136372518715274136">नया पासवर्ड डालें</translation>
 <translation id="2136476978468204130">आपने जो 'पासफ़्रेज़' डाला है, वह गलत है</translation>
@@ -3637,6 +3639,7 @@
 <translation id="5307030433605830021">स्रोत काम नहीं करता है</translation>
 <translation id="5308380583665731573">कनेक्ट करें</translation>
 <translation id="5310281978693206542">अपने डिवाइस पर लिंक भेजें</translation>
+<translation id="531118851858162334">आपने Google की सेवाओं पर हाल ही में क्या-क्या खोजा, देखा, और किया है, इसके आधार पर आपको यह आइटम दिख रहा है. आप <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> पर जाकर, अपना डेटा देख सकते हैं, मिटा सकते हैं, और सेटिंग में बदलाव कर सकते हैं.</translation>
 <translation id="5311304534597152726">इसके रूप में प्रवेश हो रहा है</translation>
 <translation id="5311565231560644461">साइटों को अपने वर्चुअल रिएलिटी वाले डिवाइस और डेटा का इस्तेमाल करने की अनुमति न दें</translation>
 <translation id="5314381603623123224">Chrome की सेवा की शर्तें 31 मार्च से बदलने वाली हैं</translation>
@@ -6221,6 +6224,7 @@
 <translation id="8378714024927312812">आपके संगठन की ओर से प्रबंधित</translation>
 <translation id="8379878387931047019">इस डिवाइस पर इस तरह की 'सुरक्षा चाबी' काम नहीं करती है जिसका इस वेबसाइट में अनुरोध किया गया है</translation>
 <translation id="8379991678458444070">इस टैब को बुकमार्क करके यहां जल्दी वापस आएं</translation>
+<translation id="8380266723152870797">विंडो का नाम</translation>
 <translation id="8382384117483909115">{NUM_TABS,plural, =1{टैब को बाद में पढ़ें}one{टैब को बाद में पढ़ें}other{टैब को बाद में पढ़ें}}</translation>
 <translation id="8382913212082956454">ईमेल पते की कॉपी बनाएं</translation>
 <translation id="8386091599636877289">नीति नहीं मिली.</translation>
@@ -6385,6 +6389,7 @@
 <translation id="8592141010104017453">सूचनाएं बिल्कुल न दिखाएं</translation>
 <translation id="859246725979739260">इस साइट को, आपकी जगह की जानकारी ऐक्सेस करने से रोका गया है.</translation>
 <translation id="8593121833493516339">इस्तेमाल और निदान से जुड़ा डेटा भेजें. Google को निदान, डिवाइस, और ऐप्लिकेशन के इस्तेमाल से जुड़ा डेटा अपने आप भेजकर,  अपने बच्चे के Android अनुभव को बेहतर बनाने में मदद करें. इसका इस्तेमाल आपके बच्चे की पहचान करने के लिए नहीं किया जाएगा. यह सिस्टम और ऐप्लिकेशन की स्थिरता और दूसरे सुधारों में मदद करेगा. कुछ एग्रीगेट डेटा Google ऐप्लिकेशन और पार्टनर, जैसे कि Android डेवलपरों की भी मदद करेगा. अगर आपके बच्चे के लिए दूसरी 'वेब और ऐप्लिकेशन गतिविधि' सेटिंग चालू है, तो यह डेटा उसके Google खाते में सेव किया जा सकता है. <ph name="BEGIN_LINK1" />ज़्यादा जानें<ph name="END_LINK1" /></translation>
+<translation id="8593735906501637689"><ph name="MODULE_TITLE" /> को हटाया गया</translation>
 <translation id="8594908476761052472">वीडियो कैप्चर करें</translation>
 <translation id="8596540852772265699">कस्टम फ़ाइल</translation>
 <translation id="8597845839771543242">प्रॉपर्टी का प्रारूप:</translation>
diff --git a/chrome/app/resources/generated_resources_hu.xtb b/chrome/app/resources/generated_resources_hu.xtb
index ec92baf..49f20194 100644
--- a/chrome/app/resources/generated_resources_hu.xtb
+++ b/chrome/app/resources/generated_resources_hu.xtb
@@ -122,6 +122,7 @@
 <translation id="1134009406053225289">Megnyitás inkognitó ablakban</translation>
 <translation id="1136179794690960030"><ph name="EMOJI_NAME" />. <ph name="EMOJI_COUNT" />/<ph name="EMOJI_INDEX" />.</translation>
 <translation id="1136712381129578788">A biztonsági hardverkulcs zárolva van, mert túl sokszor lett megadva helytelen PIN-kód. A zárolás feloldásához távolítsa el a hardverkulcsot, majd csatlakoztassa újra.</translation>
+<translation id="1137589305610962734">ideiglenes adatok</translation>
 <translation id="1137673463384776352">Link megnyitása a következőben: <ph name="APP" /></translation>
 <translation id="1139343347646843679">Hiba történt a Linux konfigurálásakor. Forduljon a rendszergazdájához.</translation>
 <translation id="1140351953533677694">Hozzáférés a Bluetooth- és a soros eszközökhöz</translation>
@@ -982,6 +983,7 @@
 <translation id="2131077480075264">A(z) „<ph name="APP_NAME" />” telepítése sikertelen, mivel azt a(z) „<ph name="IMPORT_NAME" />” nem engedélyezi.</translation>
 <translation id="21354425047973905">PIN-kódok elrejtése</translation>
 <translation id="2135456203358955318">Dokkolt nagyító</translation>
+<translation id="2135468118189259524">A <ph name="BEGIN_LINK" />policies.google.com<ph name="END_LINK" /> oldalon a Google által gyűjtött adatok jellegéről és gyűjtésük okairól tájékozódhat.</translation>
 <translation id="2135787500304447609">&amp;Folytatás</translation>
 <translation id="2136372518715274136">Írja be az új jelszót</translation>
 <translation id="2136476978468204130">A megadott összetett jelszó helytelen</translation>
@@ -3638,6 +3640,7 @@
 <translation id="5307030433605830021">A forrás nem támogatott</translation>
 <translation id="5308380583665731573">Csatlakozás</translation>
 <translation id="5310281978693206542">Link küldése az eszközeire</translation>
+<translation id="531118851858162334">Ez az elem a Google-szolgáltatások használatával végzett korábbi tevékenységei alapján jelenik meg. A saját adatokat a <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> oldalon tekintheti meg és törölheti, illetve itt módosíthatja a beállításokat is.</translation>
 <translation id="5311304534597152726">Bejelentkezés mint</translation>
 <translation id="5311565231560644461">A webhelyek nem használhatják a virtuálisvalóság-eszközöket és -adatokat</translation>
 <translation id="5314381603623123224">A Chrome Általános Szerződési Feltételei március 31-én módosulnak</translation>
@@ -6224,6 +6227,7 @@
 <translation id="8378714024927312812">Az Ön szervezete kezeli</translation>
 <translation id="8379878387931047019">Az eszköz nem támogatja a webhely által kért biztonsági hardverkulcstípust</translation>
 <translation id="8379991678458444070">Gyorsan visszajuthat ide, ha hozzáadja a lapot a könyvjelzőkhöz</translation>
+<translation id="8380266723152870797">Ablak neve</translation>
 <translation id="8382384117483909115">{NUM_TABS,plural, =1{Lap olvasása később}other{Lapok olvasása később}}</translation>
 <translation id="8382913212082956454">&amp;E-mail cím másolása</translation>
 <translation id="8386091599636877289">Az irányelv nem található.</translation>
@@ -6388,6 +6392,7 @@
 <translation id="8592141010104017453">Semmilyen értesítés ne jelenjen meg</translation>
 <translation id="859246725979739260">Ez a webhely nem férhet hozzá az Ön tartózkodási helyéhez.</translation>
 <translation id="8593121833493516339">Használati és diagnosztikai adatok küldése. Segítsen gyermeke Android-élményének továbbfejlesztésében azzal, hogy automatikusan diagnosztikai, valamint eszköz- és alkalmazáshasználati adatokat küld a Google-nak. Az adatok a rendszer- és alkalmazásstabilitás javításában, valamint más fejlesztésekben segítenek, nem használjuk fel őket az Ön gyermekének azonosítására. Bizonyos összesített adatok a Google-alkalmazásoknak és -partnereknek, például az Android-fejlesztőknek is segítenek. Ha az Internetes és alkalmazástevékenységek beállítás is be van kapcsolva a gyermekénél, akkor a rendszer ezeket az adatokat mentheti a gyermek Google-fiókjába. <ph name="BEGIN_LINK1" />További információ.<ph name="END_LINK1" /></translation>
+<translation id="8593735906501637689"><ph name="MODULE_TITLE" /> eltávolítva</translation>
 <translation id="8594908476761052472">Videó rögzítése</translation>
 <translation id="8596540852772265699">Egyéni fájlok</translation>
 <translation id="8597845839771543242">Tulajdonság formátuma:</translation>
diff --git a/chrome/app/resources/generated_resources_it.xtb b/chrome/app/resources/generated_resources_it.xtb
index 4c3930c9..f60b3385 100644
--- a/chrome/app/resources/generated_resources_it.xtb
+++ b/chrome/app/resources/generated_resources_it.xtb
@@ -122,6 +122,7 @@
 <translation id="1134009406053225289">Apri nella finestra di navigazione in incognito</translation>
 <translation id="1136179794690960030"><ph name="EMOJI_NAME" />. <ph name="EMOJI_INDEX" /> di <ph name="EMOJI_COUNT" />.</translation>
 <translation id="1136712381129578788">Il token di sicurezza è stato bloccato perché è stato inserito troppe volte il PIN errato. Per sbloccarlo, rimuovilo e inseriscilo di nuovo.</translation>
+<translation id="1137589305610962734">dati temporanei</translation>
 <translation id="1137673463384776352">Apri link in <ph name="APP" /></translation>
 <translation id="1139343347646843679">Si è verificato un errore durante la configurazione di Linux. Contatta l'amministratore.</translation>
 <translation id="1140351953533677694">Accesso ai dispositivi seriali e Bluetooth</translation>
@@ -982,6 +983,7 @@
 <translation id="2131077480075264">Impossibile installare "<ph name="APP_NAME" />" perché non è consentita da "<ph name="IMPORT_NAME" />"</translation>
 <translation id="21354425047973905">Nascondi i codici PIN</translation>
 <translation id="2135456203358955318">Lente d'ingrandimento ancorata</translation>
+<translation id="2135468118189259524">Per ulteriori informazioni sui dati che Google raccoglie e per quali finalità, vai alla pagina <ph name="BEGIN_LINK" />policies.google.com<ph name="END_LINK" />.</translation>
 <translation id="2135787500304447609">&amp;Riprendi</translation>
 <translation id="2136372518715274136">Inserisci la nuova password</translation>
 <translation id="2136476978468204130">La passphrase inserita non è corretta</translation>
@@ -3637,6 +3639,7 @@
 <translation id="5307030433605830021">Fonte non supportata</translation>
 <translation id="5308380583665731573">Connessione</translation>
 <translation id="5310281978693206542">Invia link ai tuoi dispositivi</translation>
+<translation id="531118851858162334">Stai visualizzando questo articolo in base alla tua precedente attività di utilizzo dei servizi Google. Puoi visualizzare i tuoi dati, eliminarli e cambiare le impostazioni all'indirizzo <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
 <translation id="5311304534597152726">Accesso come</translation>
 <translation id="5311565231560644461">Non consentire ai siti di usare i dati e dispositivi per realtà virtuale</translation>
 <translation id="5314381603623123224">I Termini di servizio di Chrome cambieranno il 31 marzo</translation>
@@ -6221,6 +6224,7 @@
 <translation id="8378714024927312812">Gestito dalla tua organizzazione</translation>
 <translation id="8379878387931047019">Questo dispositivo non supporta il tipo di token di sicurezza richiesto da questo sito web</translation>
 <translation id="8379991678458444070">Aggiungi questa scheda ai preferiti per ritrovarla rapidamente</translation>
+<translation id="8380266723152870797">Nome della finestra</translation>
 <translation id="8382384117483909115">{NUM_TABS,plural, =1{Leggi scheda più tardi}other{Leggi schede più tardi}}</translation>
 <translation id="8382913212082956454">Copia indirizzo &amp;email</translation>
 <translation id="8386091599636877289">Norme non trovate.</translation>
@@ -6385,6 +6389,7 @@
 <translation id="8592141010104017453">Non mostrare le notifiche</translation>
 <translation id="859246725979739260">A questo sito è stato impedito l'accesso alla tua posizione.</translation>
 <translation id="8593121833493516339">Invia dati diagnostici e sull'utilizzo. Contribuisci a migliorare l'esperienza Android di tuo figlio tramite l'invio automatico a Google di dati diagnostici e sull'utilizzo delle app e del dispositivo. Non verranno utilizzati per identificare tuo figlio e contribuiranno alla stabilità di app e sistema, nonché ad altri miglioramenti. Alcuni dati aggregati saranno utili anche alle app e ai partner di Google, ad esempio agli sviluppatori Android. Se l'impostazione Attività web e app aggiuntiva è attiva per tuo figlio, queste informazioni potrebbero essere salvate nel suo Account Google. <ph name="BEGIN_LINK1" />Ulteriori informazioni<ph name="END_LINK1" /></translation>
+<translation id="8593735906501637689"><ph name="MODULE_TITLE" /> rimosso</translation>
 <translation id="8594908476761052472">Acquisisci video</translation>
 <translation id="8596540852772265699">File personalizzati</translation>
 <translation id="8597845839771543242">Formato proprietà:</translation>
diff --git a/chrome/app/resources/generated_resources_ml.xtb b/chrome/app/resources/generated_resources_ml.xtb
index 5fb1155..6c8ab5a 100644
--- a/chrome/app/resources/generated_resources_ml.xtb
+++ b/chrome/app/resources/generated_resources_ml.xtb
@@ -122,6 +122,7 @@
 <translation id="1134009406053225289">അദൃശ്യ വിന്‍ഡോയില്‍ തുറക്കുക</translation>
 <translation id="1136179794690960030"><ph name="EMOJI_NAME" />. <ph name="EMOJI_INDEX" />-ൽ <ph name="EMOJI_COUNT" />-ാമത്തെ.</translation>
 <translation id="1136712381129578788">തെറ്റായ പിൻ നിരവധി തവണ നൽകിയതിനാൽ സുരക്ഷാ കീ ലോക്ക് ചെയ്‌തിരിക്കുന്നു. ഇത് അൺലോക്ക് ചെയ്യാൻ, നീക്കം ചെയ്‌ത് വീണ്ടും ബന്ധിപ്പിക്കുക.</translation>
+<translation id="1137589305610962734">താൽക്കാലിക ഡാറ്റ</translation>
 <translation id="1137673463384776352"><ph name="APP" /> ആപ്പില്‍ ലിങ്ക് തുറക്കുക</translation>
 <translation id="1139343347646843679">Linux കോൺഫിഗർ ചെയ്യുന്നതിനിടെ പിശകുണ്ടായി. നിങ്ങളുടെ അഡ്‌മിനെ ബന്ധപ്പെടുക.</translation>
 <translation id="1140351953533677694">നിങ്ങളുടെ Bluetooth, സീരിയൽ ഉപകരണങ്ങൾ ആക്‌‌സസ് ചെയ്യുക</translation>
@@ -979,6 +980,7 @@
 <translation id="2131077480075264">"<ph name="IMPORT_NAME" />", അനുവദിക്കാത്തതിനാൽ "<ph name="APP_NAME" />" ഇൻസ്‌റ്റാൾ ചെയ്യാനാവില്ല</translation>
 <translation id="21354425047973905">പിന്നുകൾ മറയ്‌ക്കുക</translation>
 <translation id="2135456203358955318">ഡോക്ക് ചെയ്‌ത മാഗ്‌നിഫയർ</translation>
+<translation id="2135468118189259524">Google ശേഖരിക്കുന്ന ഡാറ്റയെക്കുറിച്ചും എന്തിനാണ് അവ ശേഖരിക്കുന്നതെന്നും <ph name="BEGIN_LINK" />policies.google.com<ph name="END_LINK" /> -ൽ അറിയുക.</translation>
 <translation id="2135787500304447609">&amp;പുനരാരംഭിക്കുക</translation>
 <translation id="2136372518715274136">പുതിയ പാസ്‌വേഡ് നൽകുക</translation>
 <translation id="2136476978468204130">നിങ്ങള്‍ നല്‍കിയ പാസ്ഫ്രേസ് തെറ്റാണ്</translation>
@@ -3634,6 +3636,7 @@
 <translation id="5307030433605830021">ഉറവിടം അനുയോജ്യമല്ല</translation>
 <translation id="5308380583665731573">കണക്‌റ്റുചെയ്യുക</translation>
 <translation id="5310281978693206542">നിങ്ങളുടെ ഉപകരണങ്ങളിലേക്ക് ലിങ്ക് അയയ്ക്കുക</translation>
+<translation id="531118851858162334">Google സേവനങ്ങൾ ഉപയോഗിച്ചപ്പോഴുള്ള നിങ്ങളുടെ മുമ്പത്തെ ആക്റ്റിവിറ്റിയുടെ അടിസ്ഥാനത്തിലാണ് നിങ്ങൾ ഈ ഇനം കാണുന്നത്. <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />-ൽ നിങ്ങളുടെ ഡാറ്റ കാണാനും ഇല്ലാതാക്കാനും ക്രമീകരണം മാറ്റാനും കഴിയും.</translation>
 <translation id="5311304534597152726">ഈ പേരിൽ സൈൻ ഇൻ ചെയ്യുന്നു</translation>
 <translation id="5311565231560644461">നിങ്ങളുടെ വെർച്വൽ റിയാലിറ്റി ഉപകരണങ്ങളും ഡാറ്റയും ഉപയോഗിക്കാൻ സൈറ്റുകളെ അനുവദിക്കരുത്</translation>
 <translation id="5314381603623123224">Chrome-ന്റെ സേവന നിബന്ധനകളിൽ മാർച്ച് 31-ന് മാറ്റം വരുന്നു</translation>
@@ -6221,6 +6224,7 @@
 <translation id="8378714024927312812">നിങ്ങളുടെ സ്ഥാപനം മാനേജ് ചെയ്യുന്നത്</translation>
 <translation id="8379878387931047019">ഈ വെബ്സൈറ്റ് അഭ്യർത്ഥിച്ച തരത്തിലുള്ള സുരക്ഷാ കീ ഈ ഉപകരണം പിന്തുണയ്ക്കുന്നില്ല</translation>
 <translation id="8379991678458444070">ഈ ടാബ് ബുക്ക്‌മാർക്ക് ചെയ്‌താൽ വേഗത്തിൽ ഇവിടേക്ക് മടങ്ങിയെത്താൻ കഴിയും</translation>
+<translation id="8380266723152870797">വിൻഡോയുടെ പേര്</translation>
 <translation id="8382384117483909115">{NUM_TABS,plural, =1{ടാബ് പിന്നീട് വായിക്കുക}other{ടാബുകൾ പിന്നീട് വായിക്കുക}}</translation>
 <translation id="8382913212082956454">&amp;ഇമെയിൽ വിലാസം പകർത്തുക</translation>
 <translation id="8386091599636877289">നയം കണ്ടെത്തിയില്ല.</translation>
@@ -6385,6 +6389,7 @@
 <translation id="8592141010104017453">അറിയിപ്പുകൾ ഒന്നും തന്നെ കാണിക്കരുത്</translation>
 <translation id="859246725979739260">നിങ്ങളുടെ ലൊക്കേഷൻ ആക്‌സസ് ചെയ്യുന്നതിൽ നിന്ന് ഈ സൈറ്റിനെ ബ്ലോക്ക് ചെയ്‌തിരിക്കുന്നു.</translation>
 <translation id="8593121833493516339">ഉപയോഗവും പ്രശ്‌നനിർണ്ണയവുമായി ബന്ധപ്പെട്ട ഡാറ്റ അയയ്ക്കുക. പ്രശ്‌നനിർണ്ണയം, ഉപകരണം, ആപ്പ് ഉപയോഗം എന്നിവയുമായി ബന്ധപ്പെട്ട ഡാറ്റ സ്വയമേവ Google-ന് അയച്ച്, കുട്ടിയുടെ Android അനുഭവം മെച്ചപ്പെടുത്താൻ സഹായിക്കുക. കുട്ടിയെ തിരിച്ചറിയാൻ ഇത് ഉപയോഗിക്കില്ല, സിസ്‌റ്റം, ആപ്പ് സ്ഥിരത, മറ്റ് മെച്ചപ്പെടുത്തൽ എന്നിവയ്ക്ക് സഹായിക്കുകയും ചെയ്യും. ചില സംഗ്രഹ ഡാറ്റ, Google ആപ്പുകളെയും Android ഡെവലപ്പർമാരെപ്പോലുള്ള പങ്കാളികളെയും സഹായിക്കുകയും ചെയ്യും. കുട്ടിയുടെ അധിക വെബ്, ആപ്പ് ആക്‌റ്റിവിറ്റി ഓണാക്കിയിട്ടുണ്ടെങ്കിൽ, ഈ ഡാറ്റ അവരുടെ Google അക്കൗണ്ടിൽ സംരക്ഷിക്കപ്പെട്ടേക്കാം. <ph name="BEGIN_LINK1" />കൂടുതലറിയുക<ph name="END_LINK1" /></translation>
+<translation id="8593735906501637689"><ph name="MODULE_TITLE" /> നീക്കം ചെയ്‌തു</translation>
 <translation id="8594908476761052472">വീഡിയോ എടുക്കുക</translation>
 <translation id="8596540852772265699">ഇഷ്ടാനുസൃത ഫയലുകള്‍</translation>
 <translation id="8597845839771543242">പ്രോപ്പർട്ടി ഫോർമാറ്റ്:</translation>
diff --git a/chrome/app/resources/generated_resources_mr.xtb b/chrome/app/resources/generated_resources_mr.xtb
index 80362cd..8962a0f 100644
--- a/chrome/app/resources/generated_resources_mr.xtb
+++ b/chrome/app/resources/generated_resources_mr.xtb
@@ -227,6 +227,7 @@
 <translation id="1249643471736608405"><ph name="PLUGIN_NAME" /> नापसंत असल्यामुळे ब्लॉक केले गेले आहे</translation>
 <translation id="1251366534849411931">अपेक्षित खुला महिरपी कंस: <ph name="ERROR_LINE" /></translation>
 <translation id="1251480783646955802">हे साइट आणि इंस्टॉल केलेल्या ॲप्सनी स्टोअर केलेला <ph name="TOTAL_USAGE" /> डेटा साफ करेल</translation>
+<translation id="125220115284141797">डीफॉल्ट</translation>
 <translation id="1252987234827889034">प्रोफाइल एरर आली</translation>
 <translation id="1254593899333212300">थेट इंटरनेट कनेक्शन</translation>
 <translation id="1259152067760398571">सुरक्षा तपासणी काल रन केली गेली</translation>
@@ -318,6 +319,7 @@
 <translation id="1361872463926621533">स्टार्टअपवर ध्वनी प्ले करा</translation>
 <translation id="1362865166188278099">यांत्रिकी समस्या. प्रिंटर तपासा</translation>
 <translation id="1363585519747660921">USB प्रिंटर कॉन्फिगर करणे आवश्यक आहे</translation>
+<translation id="1364664799726141130">तुम्ही पडताळणी केलेल्या खात्याला हे डिव्हाइस अ‍ॅक्सेस करण्याची परवानगी नाही. कृपया सेशन अनलॉक करण्यासाठी तुम्ही <ph name="ACCOUNT" /> ची पडताळणी करत आहात याची खात्री करा.</translation>
 <translation id="1365180424462182382"><ph name="ENROLLMENT_DOMAIN" />ने तुमचा <ph name="BEGIN_LINK" />ब्राउझर व्यवस्थापित केला आहे<ph name="END_LINK" /></translation>
 <translation id="1367951781824006909">फाइल निवडा</translation>
 <translation id="1369149969991017342">स्विच ॲक्सेस (फक्त एक किंवा दोन स्विचसह कॉंप्युटर नियंत्रित करा)</translation>
@@ -426,6 +428,7 @@
 <translation id="1486096554574027028">पासवर्ड शोधा</translation>
 <translation id="1487335504823219454">सुरू - कस्टम सेटिंग्ज</translation>
 <translation id="1489664337021920575">दुसरा पर्याय निवडा</translation>
+<translation id="1492417797159476138">तुम्ही या साइटसाठी आधीच वापरकर्ता नाव सेव्ह केले आहे</translation>
 <translation id="1493892686965953381">यासाठी प्रतीक्षा करत आहे <ph name="LOAD_STATE_PARAMETER" />...</translation>
 <translation id="1495486559005647033"><ph name="NUM_PRINTERS" /> अन्य उपलब्ध डिव्हाइसेस.</translation>
 <translation id="1495677929897281669">टॅबवर परत</translation>
@@ -650,6 +653,7 @@
 <translation id="173628468822554835">समजले. बाय डीफॉल्ट, तुम्ही भेट देत असलेल्या नवीन साइट तुम्हाला सूचना पाठवणार नाहीत.</translation>
 <translation id="1736419249208073774">एक्सप्लोर करा</translation>
 <translation id="1737968601308870607">बग नोंदवा</translation>
+<translation id="174123615272205933">कस्टम</translation>
 <translation id="1741314857973421784">सुरू ठेवा</translation>
 <translation id="1743570585616704562">ओळखले नाही</translation>
 <translation id="1743970419083351269">डाउनलोड बार बंद करा</translation>
@@ -684,6 +688,7 @@
 <translation id="1776712937009046120">वापरकर्ता जोडा</translation>
 <translation id="1776883657531386793"><ph name="OID" />: <ph name="INFO" /></translation>
 <translation id="1778457539567749232">न वाचलेली म्हणून मार्क करा</translation>
+<translation id="1779468444204342338">किमान</translation>
 <translation id="1779652936965200207">कृपया ही पासकी "<ph name="DEVICE_NAME" />" वर प्रविष्‍ट करा:</translation>
 <translation id="177989070088644880">ॲप (<ph name="ANDROID_PACKAGE_NAME" />)</translation>
 <translation id="1780152987505130652">गट बंद करा</translation>
@@ -1457,6 +1462,7 @@
 <translation id="2688196195245426394">सर्व्हरवर डिव्हाइसची नोंदणी करताना एरर: <ph name="CLIENT_ERROR" />.</translation>
 <translation id="2690024944919328218">भाषा पर्याय दर्शवा</translation>
 <translation id="2691385045260836588">मॉडेल</translation>
+<translation id="2691440343905273290">इनपुट सेटिंग्ज बदला</translation>
 <translation id="2693176596243495071">अरेरे!  एक अज्ञात एरर आली. कृपया नंतर पुन्हा प्रयत्न करा किंवा समस्या कायम राहिल्यास तुमच्या अ‍ॅडमिनिस्ट्रेटरशी संपर्क साधा.</translation>
 <translation id="2695749433451188613">इंटरनेट प्रिंट प्रोटोकॉल (HTTPS)</translation>
 <translation id="2699911226086014512"><ph name="RETRIES" /> कोडसह पिन ऑपरेशन पूर्ण झाले नाही.</translation>
@@ -2073,6 +2079,7 @@
 <translation id="3440663250074896476"><ph name="BOOKMARK_NAME" /> साठी अधिक क्रिया</translation>
 <translation id="3440761377721825626">तुमचा कॉंप्युटर एखादी साइट ॲक्सेस करण्यासाठी प्लगिन वापरू इच्छिते तेव्हा विचारा</translation>
 <translation id="3441653493275994384">तपासा</translation>
+<translation id="3441663102605358937">या खात्याची पडताळणी करण्यासाठी <ph name="ACCOUNT" /> मध्ये पुन्हा साइन इन करा</translation>
 <translation id="3445047461171030979">Google Assistant ची झटपट उत्तरे</translation>
 <translation id="3445925074670675829">USB-C डिव्‍हाइस</translation>
 <translation id="3446274660183028131">Windows इंस्टॉल करण्यासाठी कृपया Parallels Desktop लाँच करा.</translation>
@@ -2822,6 +2829,7 @@
 <translation id="4312866146174492540">अवरोधित करा (डीफॉल्ट)</translation>
 <translation id="4314815835985389558">सिंक व्यवस्थापित करा</translation>
 <translation id="4316850752623536204">डेव्हलपर वेबसाइट</translation>
+<translation id="4317820549299924617">पडताळणी यशस्वी झाली नाही</translation>
 <translation id="4320177379694898372">कोणतेही इंटरनेट कनेक्शन नाही</translation>
 <translation id="4322394346347055525">अन्य टॅब बंद करा</translation>
 <translation id="4324577459193912240">फाइल अपूर्ण आहे</translation>
@@ -3667,6 +3675,7 @@
 <translation id="5362741141255528695">खासगी की फाइल निवडा.</translation>
 <translation id="5363109466694494651">Powerwash करा आणि परत करा</translation>
 <translation id="5365881113273618889">तुम्ही निवडलेल्या फोल्डरमध्ये संवेदनशील फाइल आहेत. तुम्हाला नक्की "<ph name="APP_NAME" />" ला या फोल्डरचा कायमचा राइट अ‍ॅक्सेस द्यायचा आहे का?</translation>
+<translation id="536638840841140142">काहीही नाही</translation>
 <translation id="5368720394188453070">तुमचा फोन लॉक केला आहे. प्रविष्‍ट करण्‍यासाठी तो अनलॉक करा.</translation>
 <translation id="5368779022775404937"><ph name="REALM" /> मध्ये साइन इन करा</translation>
 <translation id="5369491905435686894">माउस अ‍ॅक्सिलरेशन सुरू करा</translation>
@@ -4821,6 +4830,7 @@
 <translation id="6748465660675848252">तुम्ही सुरू ठेवू शकता परंतु केवळ तुमचा संकालित डेटा आणि सेटिंग्ज पुनर्संचयित केले जातील. सर्व स्थानिक डेटा गमावला जाईल.</translation>
 <translation id="6749006854028927059">वेगवेगळ्या साइटवरील तुमची ब्राउझिंग ॲक्टिव्हिटी पाहण्यासाठी साइट कुकी वापरू शकत नाहीत. उदाहरणार्थ, जाहिराती पर्सनलाइझ करण्यासाठी. काही साइटवरील वैशिष्ट्यांमध्ये खंड पडू शकतो.</translation>
 <translation id="6750757184909117990">मोबाइल नेटवर्क बंद करा</translation>
+<translation id="6750946710563435348">दुसरे वापरकर्ता नाव वापरा</translation>
 <translation id="6751344591405861699"><ph name="WINDOW_TITLE" /> (गुप्त)</translation>
 <translation id="6757101664402245801">URL कॉपी केली</translation>
 <translation id="6758056191028427665">आम्ही आमचे काम कसे करत आहोत त्याबद्दल आम्हाला कळवा.</translation>
@@ -5339,6 +5349,7 @@
 <translation id="7377451353532943397">सेन्सर ॲक्सेस ब्लॉक करणे सुरू ठेवा</translation>
 <translation id="73786666777299047">Chrome वेब स्टोअर उघडा</translation>
 <translation id="7378812711085314936">डेटा कनेक्शन मिळवा</translation>
+<translation id="7380622428988553498">डिव्हाइसच्या नावामध्ये चुकीच्या वर्णांचा समावेश आहे</translation>
 <translation id="7380768571499464492"><ph name="PRINTER_NAME" /> अपडेट केला</translation>
 <translation id="7384687527486377545">कीबोर्ड ऑटो-रिपीट</translation>
 <translation id="7385854874724088939">प्रिंट करण्याचा प्रयत्न करताना काहीतरी चूक झाली. कृपया तुमचा प्रिंटर तपासा आणि पुन्हा प्रयत्न करा.</translation>
@@ -5387,6 +5398,7 @@
 <translation id="7434969625063495310">प्रिंट सर्व्हर जोडता आला नाही. कृपया सर्व्हरचे कॉन्फिगरेशन तपासा आणि पुन्हा प्रयत्न करा.</translation>
 <translation id="7436921188514130341">ओहो! नाव बदलताना एक एरर आली होती.</translation>
 <translation id="7438976808740265764">डिसेंबर २०२० नंतर Flash Player ला सपोर्ट केले जाणार नाही.</translation>
+<translation id="7439519621174723623">पुढे सुरू ठेवण्यासाठी डिव्हाइसचे नाव जोडा</translation>
 <translation id="7441736921018636843">हे सेटिंग बदलण्यासाठी, तुमची सिंक पासफ्रेझ काढून टाकण्यासाठी <ph name="BEGIN_LINK" />सिंक रीसेट करा<ph name="END_LINK" /></translation>
 <translation id="7441830548568730290">इतर वापरकर्ते</translation>
 <translation id="7442465037756169001">तुमचे Hangouts Meet hardware सेट अप होण्यासाठी सज्ज आहे.</translation>
@@ -5628,6 +5640,7 @@
 <translation id="7717134585801378441">साइट तुमचे स्थान विचारू शकतात (शिफारस केलेले)</translation>
 <translation id="7717845620320228976">अपडेट तपासा</translation>
 <translation id="7719367874908701697">पेज झूम करा</translation>
+<translation id="7719588063158526969">डिव्हाइसचे नाव खूप मोठे आहे</translation>
 <translation id="7721179060400456005">विंडोला दृश्ये स्पॅन करण्याची अनुमती द्या</translation>
 <translation id="7722040605881499779">अपडेटसाठी आवश्यक: <ph name="NECESSARY_SPACE" /></translation>
 <translation id="7724603315864178912">कट करा</translation>
@@ -5930,6 +5943,7 @@
 <translation id="8049705080247101012">Google ने "<ph name="EXTENSION_NAME" />" ला दुर्भावनापूर्ण म्हणून फ्लॅग केले आहे आणि इंस्टॉल करणे रोखले गेले आहे</translation>
 <translation id="8049948037269924837">टचपॅड रिव्हर्स स्क्रोलिंग</translation>
 <translation id="8050038245906040378">Microsoft Commercial Code Signing</translation>
+<translation id="8050191834453426339">पुन्हा पडताळणी करा</translation>
 <translation id="8051193500142930381">कॅमेर्‍याची आवश्यकता असलेली वैशिष्ट्ये काम करणार नाहीत</translation>
 <translation id="8051390370038326517"><ph name="HOST" /> ला MIDI डिव्हाइसचे पूर्ण नियंत्रण असण्याची नेहमी अनुमती द्या</translation>
 <translation id="8053278772142718589">PKCS #12 फाइल</translation>
diff --git a/chrome/app/resources/generated_resources_nl.xtb b/chrome/app/resources/generated_resources_nl.xtb
index 3448c09..ba4613a 100644
--- a/chrome/app/resources/generated_resources_nl.xtb
+++ b/chrome/app/resources/generated_resources_nl.xtb
@@ -228,6 +228,7 @@
 <translation id="1249643471736608405"><ph name="PLUGIN_NAME" /> is geblokkeerd omdat deze is verouderd</translation>
 <translation id="1251366534849411931">Verwachte openingsaccolade <ph name="ERROR_LINE" /></translation>
 <translation id="1251480783646955802">Hiermee wis je <ph name="TOTAL_USAGE" /> van de gegevens die zijn opgeslagen door sites en geïnstalleerde apps</translation>
+<translation id="125220115284141797">Standaard</translation>
 <translation id="1252987234827889034">Er is een profielfout opgetreden</translation>
 <translation id="1254593899333212300">Rechtstreekse internetverbinding</translation>
 <translation id="1259152067760398571">Veiligheidscheck is gisteren uitgevoerd</translation>
@@ -319,6 +320,7 @@
 <translation id="1361872463926621533">Geluid afspelen bij opstarten</translation>
 <translation id="1362865166188278099">Mechanisch probleem. Controleer de printer.</translation>
 <translation id="1363585519747660921">USB-printer moet worden geconfigureerd</translation>
+<translation id="1364664799726141130">Het account dat je hebt geverifieerd, is niet gemachtigd voor toegang tot dit apparaat. Zorg dat je <ph name="ACCOUNT" /> verifieert om de sessie te ontgrendelen.</translation>
 <translation id="1365180424462182382">Je <ph name="BEGIN_LINK" />browser wordt beheerd<ph name="END_LINK" /> door <ph name="ENROLLMENT_DOMAIN" /></translation>
 <translation id="1367951781824006909">Een bestand selecteren</translation>
 <translation id="1369149969991017342">Toegang via schakelaar (de computer bedienen met slechts één of twee schakelaars)</translation>
@@ -427,6 +429,7 @@
 <translation id="1486096554574027028">Zoek in wachtwoorden</translation>
 <translation id="1487335504823219454">Aan - aangepaste instellingen</translation>
 <translation id="1489664337021920575">Een andere optie kiezen</translation>
+<translation id="1492417797159476138">Je hebt deze gebruikersnaam al opgeslagen voor deze site</translation>
 <translation id="1493892686965953381">Wachten op <ph name="LOAD_STATE_PARAMETER" />...</translation>
 <translation id="1495486559005647033"><ph name="NUM_PRINTERS" /> andere beschikbare apparaten.</translation>
 <translation id="1495677929897281669">Terug naar tabblad</translation>
@@ -652,6 +655,7 @@
 <translation id="173628468822554835">OK. Standaard sturen nieuwe sites die je bezoekt, je geen meldingen.</translation>
 <translation id="1736419249208073774">Verkennen</translation>
 <translation id="1737968601308870607">Bug indienen</translation>
+<translation id="174123615272205933">Aangepast</translation>
 <translation id="1741314857973421784">Doorgaan</translation>
 <translation id="1743570585616704562">Niet herkend</translation>
 <translation id="1743970419083351269">Downloadbalk sluiten</translation>
@@ -686,6 +690,7 @@
 <translation id="1776712937009046120">Gebruiker toevoegen</translation>
 <translation id="1776883657531386793"><ph name="OID" />: <ph name="INFO" /></translation>
 <translation id="1778457539567749232">Markeren als ongelezen</translation>
+<translation id="1779468444204342338">Minimum</translation>
 <translation id="1779652936965200207">Geef deze toegangscode op '<ph name="DEVICE_NAME" />' op:</translation>
 <translation id="177989070088644880">App (<ph name="ANDROID_PACKAGE_NAME" />)</translation>
 <translation id="1780152987505130652">Groep sluiten</translation>
@@ -1460,6 +1465,7 @@
 <translation id="2688196195245426394">Fout bij het registreren van het apparaat bij de server: <ph name="CLIENT_ERROR" />.</translation>
 <translation id="2690024944919328218">Taalopties weergeven</translation>
 <translation id="2691385045260836588">Model</translation>
+<translation id="2691440343905273290">Invoerinstellingen wijzigen</translation>
 <translation id="2693176596243495071">Er is een onbekende fout opgetreden. Probeer het later opnieuw of neem contact op met je beheerder als het probleem blijft optreden.</translation>
 <translation id="2695749433451188613">Internetafdrukprotocol (HTTPS)</translation>
 <translation id="2699911226086014512">Bewerking met pincode mislukt met code <ph name="RETRIES" />.</translation>
@@ -2076,6 +2082,7 @@
 <translation id="3440663250074896476">Meer acties voor <ph name="BOOKMARK_NAME" /></translation>
 <translation id="3440761377721825626">Goedkeuring vragen wanneer een site een plug-in wil gebruiken om toegang tot je computer te krijgen</translation>
 <translation id="3441653493275994384">Beeldscherm</translation>
+<translation id="3441663102605358937">Log opnieuw in op <ph name="ACCOUNT" /> om dit account te verifiëren</translation>
 <translation id="3445047461171030979">Snelle antwoorden van de Google Assistent</translation>
 <translation id="3445925074670675829">USB-C-apparaat</translation>
 <translation id="3446274660183028131">Start Parallels Desktop om Windows te installeren.</translation>
@@ -2827,6 +2834,7 @@
 <translation id="4312866146174492540">Blokkeren (standaard)</translation>
 <translation id="4314815835985389558">Synchronisatie beheren</translation>
 <translation id="4316850752623536204">Website van ontwikkelaar</translation>
+<translation id="4317820549299924617">Verificatie is mislukt</translation>
 <translation id="4320177379694898372">Geen internetverbinding</translation>
 <translation id="4322394346347055525">Andere tabbladen sluiten</translation>
 <translation id="4324577459193912240">Bestand onvolledig</translation>
@@ -3673,6 +3681,7 @@
 <translation id="5362741141255528695">Selecteer een privésleutelbestand.</translation>
 <translation id="5363109466694494651">Powerwash en terugzetten</translation>
 <translation id="5365881113273618889">De map die je hebt geselecteerd, bevat gevoelige bestanden. Weet je zeker dat je '<ph name="APP_NAME" />' permanente schrijftoegang wilt geven tot deze map?</translation>
+<translation id="536638840841140142">Geen</translation>
 <translation id="5368720394188453070">Je telefoon is vergrendeld. Ontgrendel deze om door te gaan.</translation>
 <translation id="5368779022775404937">Inloggen bij <ph name="REALM" /></translation>
 <translation id="5369491905435686894">Muisversnelling inschakelen</translation>
@@ -4826,6 +4835,7 @@
 <translation id="6748465660675848252">Je kunt doorgaan, maar alleen je gesynchroniseerde gegevens en instellingen worden hersteld. Alle lokale gegevens gaan verloren.</translation>
 <translation id="6749006854028927059">Sites kunnen je cookies niet gebruiken om je browse-activiteit op verschillende sites te bekijken, bijvoorbeeld om advertenties te personaliseren. Functies op bepaalde sites werken mogelijk niet meer.</translation>
 <translation id="6750757184909117990">Mobiel netwerk uitschakelen</translation>
+<translation id="6750946710563435348">Andere gebruikersnaam gebruiken</translation>
 <translation id="6751344591405861699"><ph name="WINDOW_TITLE" /> (Incognito)</translation>
 <translation id="6757101664402245801">URL gekopieerd</translation>
 <translation id="6758056191028427665">Laat ons weten of we goed bezig zijn.</translation>
@@ -5344,6 +5354,7 @@
 <translation id="7377451353532943397">Toegang tot sensoren blijven blokkeren</translation>
 <translation id="73786666777299047">Chrome Web Store openen</translation>
 <translation id="7378812711085314936">Dataverbinding ophalen</translation>
+<translation id="7380622428988553498">Apparaatnaam bevat ongeldige tekens</translation>
 <translation id="7380768571499464492">Geüpdatet: <ph name="PRINTER_NAME" /></translation>
 <translation id="7384687527486377545">Automatische herhaling toetsenbord</translation>
 <translation id="7385854874724088939">Er is iets misgegaan bij het afdrukken. Controleer je printer en probeer het opnieuw.</translation>
@@ -5392,6 +5403,7 @@
 <translation id="7434969625063495310">Kan de afdrukserver niet toevoegen. Controleer de configuratie van de server en probeer het opnieuw.</translation>
 <translation id="7436921188514130341">Er is een fout opgetreden tijdens het wijzigen van de naam.</translation>
 <translation id="7438976808740265764">Flash Player wordt na december 2020 niet meer ondersteund.</translation>
+<translation id="7439519621174723623">Voeg een apparaatnaam toe om door te gaan</translation>
 <translation id="7441736921018636843">Als je deze instelling wilt wijzigen, moet je de <ph name="BEGIN_LINK" />synchronisatie resetten<ph name="END_LINK" /> om de wachtwoordzin voor synchronisatie te verwijderen</translation>
 <translation id="7441830548568730290">Andere gebruikers.</translation>
 <translation id="7442465037756169001">Je Hangouts Meet-hardware kan worden ingesteld.</translation>
@@ -5633,6 +5645,7 @@
 <translation id="7717134585801378441">Sites kunnen je locatie vragen (aanbevolen)</translation>
 <translation id="7717845620320228976">Controleren op updates</translation>
 <translation id="7719367874908701697">Zoomen op pagina</translation>
+<translation id="7719588063158526969">Apparaatnaam te lang</translation>
 <translation id="7721179060400456005">Toestaan dat vensters meerdere beeldschermen bedekken</translation>
 <translation id="7722040605881499779">Nodig voor update: <ph name="NECESSARY_SPACE" /></translation>
 <translation id="7724603315864178912">Knip</translation>
@@ -5936,6 +5949,7 @@
 <translation id="8049705080247101012">Google heeft <ph name="EXTENSION_NAME" /> als schadelijk gemarkeerd en de installatie is geblokkeerd</translation>
 <translation id="8049948037269924837">Omgekeerd scrollen touchpad</translation>
 <translation id="8050038245906040378">Commerciële handtekening bij programmacode van Microsoft</translation>
+<translation id="8050191834453426339">Opnieuw verifiëren</translation>
 <translation id="8051193500142930381">Functies waarvoor een camera nodig is, werken niet</translation>
 <translation id="8051390370038326517">Volledig beheer van MIDI-apparaten altijd toestaan voor <ph name="HOST" /></translation>
 <translation id="8053278772142718589">Bestanden van het type PKCS #12</translation>
diff --git a/chrome/app/resources/generated_resources_no.xtb b/chrome/app/resources/generated_resources_no.xtb
index 4da55d0..49793c9 100644
--- a/chrome/app/resources/generated_resources_no.xtb
+++ b/chrome/app/resources/generated_resources_no.xtb
@@ -122,6 +122,7 @@
 <translation id="1134009406053225289">Åpne i inkognitovindu</translation>
 <translation id="1136179794690960030"><ph name="EMOJI_NAME" /> – <ph name="EMOJI_INDEX" /> av <ph name="EMOJI_COUNT" />.</translation>
 <translation id="1136712381129578788">Sikkerhetsnøkkelen er låst fordi feil PIN-kode ble skrevet inn for mange ganger. For å låse den opp, ta den ut og sett den inn på nytt.</translation>
+<translation id="1137589305610962734">midlertidige data</translation>
 <translation id="1137673463384776352">Åpne linken i <ph name="APP" /></translation>
 <translation id="1139343347646843679">Det oppsto en feil under konfigureringen av Linux. Kontakt administratoren din.</translation>
 <translation id="1140351953533677694">bruke Bluetooth og de seriekoblede enhetene dine</translation>
@@ -979,6 +980,7 @@
 <translation id="2131077480075264">Kunne ikke installere «<ph name="APP_NAME" />» fordi det ikke er tillatt av «<ph name="IMPORT_NAME" />»</translation>
 <translation id="21354425047973905">Skjul PIN-koder</translation>
 <translation id="2135456203358955318">Dokket lupe</translation>
+<translation id="2135468118189259524">Finn ut hvilke data Google samler inn, og hvorfor, her:<ph name="BEGIN_LINK" />policies.google.com<ph name="END_LINK" />.</translation>
 <translation id="2135787500304447609">&amp;Fortsett</translation>
 <translation id="2136372518715274136">Skriv inn et nytt passord</translation>
 <translation id="2136476978468204130">Passordfrasen du skrev inn, er feil</translation>
@@ -3633,6 +3635,7 @@
 <translation id="5307030433605830021">Kilden støttes ikke</translation>
 <translation id="5308380583665731573">Koble til</translation>
 <translation id="5310281978693206542">Send link til enhetene dine</translation>
+<translation id="531118851858162334">Du ser dette elementet basert på ting du har brukt Google-tjenester til tidligere. Du kan se og slette data og endre innstillingene dine her: <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
 <translation id="5311304534597152726">Logger inn som</translation>
 <translation id="5311565231560644461">Ikke la nettsteder bruke virtuell virkelighet-enhetene eller -dataene dine</translation>
 <translation id="5314381603623123224">Vilkårene for bruk av Chrome endres 31. mars</translation>
@@ -6218,6 +6221,7 @@
 <translation id="8378714024927312812">Administreres av organisasjonen din</translation>
 <translation id="8379878387931047019">Denne enheten støtter ikke den typen sikkerhetsnøkkel som kreves av dette nettstedet</translation>
 <translation id="8379991678458444070">Kom raskt tilbake hit ved å bokmerke denne fanen</translation>
+<translation id="8380266723152870797">Vindusnavn</translation>
 <translation id="8382384117483909115">{NUM_TABS,plural, =1{Les fanen senere}other{Les fanene senere}}</translation>
 <translation id="8382913212082956454">Kopier &amp;e-postadresse</translation>
 <translation id="8386091599636877289">Fant ikke regelen.</translation>
@@ -6382,6 +6386,7 @@
 <translation id="8592141010104017453">Ikke vis varsler i det hele tatt</translation>
 <translation id="859246725979739260">Dette nettstedet er blokkert fra å få tilgang til posisjonen din.</translation>
 <translation id="8593121833493516339">Send bruks- og diagnostikkdata. Hjelp til med å gjøre Android-opplevelsen bedre for barnet ditt ved å sende diagnostikk-, enhets- og appbruksdata til Google automatisk. Disse dataene brukes ikke til å identifisere barnet ditt, men bidrar til å gjøre systemet og appene bedre og mer stabile. Noen aggregerte data hjelper også Google-apper og -partnere, for eksempel Android-utviklere. Hvis du har slått på annen nett- og appaktivitet for barnet ditt, kan disse dataene bli lagret i barnets Google-konto. <ph name="BEGIN_LINK1" />Finn ut mer<ph name="END_LINK1" /></translation>
+<translation id="8593735906501637689">Fjernet <ph name="MODULE_TITLE" /></translation>
 <translation id="8594908476761052472">Spill inn video</translation>
 <translation id="8596540852772265699">Egendefinerte filer</translation>
 <translation id="8597845839771543242">Områdeformat:</translation>
diff --git a/chrome/app/resources/generated_resources_pl.xtb b/chrome/app/resources/generated_resources_pl.xtb
index 201d56d9..7d6737f9 100644
--- a/chrome/app/resources/generated_resources_pl.xtb
+++ b/chrome/app/resources/generated_resources_pl.xtb
@@ -122,6 +122,7 @@
 <translation id="1134009406053225289">Otwórz w oknie incognito</translation>
 <translation id="1136179794690960030"><ph name="EMOJI_NAME" />. <ph name="EMOJI_INDEX" /> z <ph name="EMOJI_COUNT" />.</translation>
 <translation id="1136712381129578788">Klucz bezpieczeństwa jest zablokowany z powodu wprowadzenia nieprawidłowego kodu PIN zbyt wiele razy. Aby odblokować klucz bezpieczeństwa, wyjmij go i włóż ponownie.</translation>
+<translation id="1137589305610962734">dane tymczasowe</translation>
 <translation id="1137673463384776352">Otwórz link w aplikacji <ph name="APP" /></translation>
 <translation id="1139343347646843679">Podczas konfigurowania Linuksa wystąpił błąd. Skontaktuj się z administratorem.</translation>
 <translation id="1140351953533677694">Dostęp do urządzeń Bluetooth i szeregowych</translation>
@@ -978,6 +979,7 @@
 <translation id="2131077480075264">Nie można zainstalować elementu „<ph name="APP_NAME" />”, bo nie zezwala na to element „<ph name="IMPORT_NAME" />”</translation>
 <translation id="21354425047973905">Ukryj kody PIN</translation>
 <translation id="2135456203358955318">Lupa zadokowana</translation>
+<translation id="2135468118189259524">Więcej informacji o tym, jakie dane zbiera Google i w jakim celu to robi, znajdziesz na stronie <ph name="BEGIN_LINK" />policies.google.com<ph name="END_LINK" />.</translation>
 <translation id="2135787500304447609">&amp;Wznów</translation>
 <translation id="2136372518715274136">Wpisz nowe hasło</translation>
 <translation id="2136476978468204130">Wpisane hasło jest nieprawidłowe</translation>
@@ -3634,6 +3636,7 @@
 <translation id="5307030433605830021">Źródło nie jest obsługiwane</translation>
 <translation id="5308380583665731573">Połącz</translation>
 <translation id="5310281978693206542">Wyślij link na swoje urządzenia</translation>
+<translation id="531118851858162334">Wyświetlamy ten element na podstawie Twojej wcześniejszej aktywności związanej z korzystaniem z usług Google. Na stronie <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> możesz przeglądać i usuwać swoje dane, a także zmieniać ustawienia.</translation>
 <translation id="5311304534597152726">Logowanie się jako</translation>
 <translation id="5311565231560644461">Nie zezwalaj stronom na dostęp do urządzeń ani danych rzeczywistości wirtualnej</translation>
 <translation id="5314381603623123224">31 marca zmienią się Warunki korzystania z Chrome</translation>
@@ -6219,6 +6222,7 @@
 <translation id="8378714024927312812">Zarządzane przez Twoją organizację</translation>
 <translation id="8379878387931047019">To urządzenie nie obsługuje typu klucza bezpieczeństwa, o który prosi ta witryna</translation>
 <translation id="8379991678458444070">Dodaj tę stronę do zakładek, by szybko na nią wrócić</translation>
+<translation id="8380266723152870797">Nazwa okna</translation>
 <translation id="8382384117483909115">{NUM_TABS,plural, =1{Przeczytaj tę kartę później}few{Przeczytaj te karty później}many{Przeczytaj te karty później}other{Przeczytaj te karty później}}</translation>
 <translation id="8382913212082956454">Kopiuj adres &amp;e-mail</translation>
 <translation id="8386091599636877289">Nie znaleziono zasady.</translation>
@@ -6383,6 +6387,7 @@
 <translation id="8592141010104017453">Nie pokazuj żadnych powiadomień</translation>
 <translation id="859246725979739260">Tej stronie zablokowano dostęp do Twojej lokalizacji.</translation>
 <translation id="8593121833493516339">Wysyłaj dane diagnostyczne oraz informacje o użyciu. Pomóż ulepszyć działanie Androida na urządzeniu dziecka, automatycznie wysyłając do Google dane diagnostyczne oraz informacje o używaniu urządzenia i aplikacji. Nie zostaną one użyte do zidentyfikowania Twojego dziecka. Wykorzystamy je, by poprawić stabilność systemu i aplikacji oraz wprowadzić inne ulepszenia. Niektóre dane zbiorcze pomogą nam też udoskonalić aplikacje Google lub zostaną wykorzystane przez naszych partnerów, na przykład deweloperów aplikacji na Androida. Jeśli na koncie Google dziecka włączysz Dodatkową aktywność w internecie i aplikacjach, te dane mogą być zapisywane na tym koncie. <ph name="BEGIN_LINK1" />Więcej informacji<ph name="END_LINK1" /></translation>
+<translation id="8593735906501637689">Usunięto moduł: <ph name="MODULE_TITLE" /></translation>
 <translation id="8594908476761052472">Nagraj film</translation>
 <translation id="8596540852772265699">Pliki niestandardowe</translation>
 <translation id="8597845839771543242">Format właściwości:</translation>
diff --git a/chrome/app/resources/generated_resources_pt-BR.xtb b/chrome/app/resources/generated_resources_pt-BR.xtb
index 9ff61e1..01f519a1 100644
--- a/chrome/app/resources/generated_resources_pt-BR.xtb
+++ b/chrome/app/resources/generated_resources_pt-BR.xtb
@@ -122,6 +122,7 @@
 <translation id="1134009406053225289">Abrir em uma janela anônima</translation>
 <translation id="1136179794690960030"><ph name="EMOJI_NAME" />. <ph name="EMOJI_INDEX" /> de <ph name="EMOJI_COUNT" /></translation>
 <translation id="1136712381129578788">A chave de segurança está bloqueada porque o PIN incorreto foi inserido muitas vezes. Remova e insira a chave novamente para desbloqueá-la.</translation>
+<translation id="1137589305610962734">dados temporários</translation>
 <translation id="1137673463384776352">Abrir link no <ph name="APP" /></translation>
 <translation id="1139343347646843679">Algo deu errado na configuração do Linux. Entre em contato com seu administrador.</translation>
 <translation id="1140351953533677694">Acessar seus dispositivos de série e Bluetooth</translation>
@@ -227,6 +228,7 @@
 <translation id="1249643471736608405">O plug-in <ph name="PLUGIN_NAME" /> foi bloqueado porque está obsoleto</translation>
 <translation id="1251366534849411931">Chave de abertura esperada: <ph name="ERROR_LINE" /></translation>
 <translation id="1251480783646955802">Isso limpará <ph name="TOTAL_USAGE" /> de dados de armazenados por sites e apps instalados</translation>
+<translation id="125220115284141797">Padrão</translation>
 <translation id="1252987234827889034">Ocorreu um erro de perfil</translation>
 <translation id="1254593899333212300">Conexão direta à Internet</translation>
 <translation id="1259152067760398571">A "confirmação de segurança" foi executada ontem</translation>
@@ -318,6 +320,7 @@
 <translation id="1361872463926621533">Reproduzir som na inicialização</translation>
 <translation id="1362865166188278099">Problema mecânico. Verificar impressora</translation>
 <translation id="1363585519747660921">A impressora USB precisa ser configurada</translation>
+<translation id="1364664799726141130">A conta que você verificou não está autorizada a acessar este dispositivo. Verifique a <ph name="ACCOUNT" /> para desbloquear a sessão.</translation>
 <translation id="1365180424462182382">Seu <ph name="BEGIN_LINK" />navegador é gerenciado<ph name="END_LINK" /> por <ph name="ENROLLMENT_DOMAIN" /></translation>
 <translation id="1367951781824006909">Escolher um arquivo</translation>
 <translation id="1369149969991017342">Acesso com interruptor (controlar o computador com apenas um ou dois interruptores)</translation>
@@ -426,6 +429,7 @@
 <translation id="1486096554574027028">Pesquisar senhas</translation>
 <translation id="1487335504823219454">Sincronização ativada - configurações personalizadas</translation>
 <translation id="1489664337021920575">Escolher outra opção</translation>
+<translation id="1492417797159476138">Você já salvou este nome de usuário para este site</translation>
 <translation id="1493892686965953381">Aguardando <ph name="LOAD_STATE_PARAMETER" />...</translation>
 <translation id="1495486559005647033"><ph name="NUM_PRINTERS" /> outros dispositivos disponíveis.</translation>
 <translation id="1495677929897281669">Voltar à guia</translation>
@@ -651,6 +655,7 @@
 <translation id="173628468822554835">Ok. Por padrão, os novos sites que você visitar não enviarão notificações.</translation>
 <translation id="1736419249208073774">Explorar</translation>
 <translation id="1737968601308870607">Cadastre um bug</translation>
+<translation id="174123615272205933">Personalizada</translation>
 <translation id="1741314857973421784">Continuar</translation>
 <translation id="1743570585616704562">Não reconhecida</translation>
 <translation id="1743970419083351269">Fechar barra de downloads</translation>
@@ -685,6 +690,7 @@
 <translation id="1776712937009046120">Adicionar usuário</translation>
 <translation id="1776883657531386793"><ph name="OID" />: <ph name="INFO" /></translation>
 <translation id="1778457539567749232">Marcar como não lida</translation>
+<translation id="1779468444204342338">Mínima</translation>
 <translation id="1779652936965200207">Insira esta senha em "<ph name="DEVICE_NAME" />":</translation>
 <translation id="177989070088644880">App (<ph name="ANDROID_PACKAGE_NAME" />)</translation>
 <translation id="1780152987505130652">Fechar grupo</translation>
@@ -977,6 +983,7 @@
 <translation id="2131077480075264">Não foi possível instalar o app "<ph name="APP_NAME" />" porque ele não é permitido por "<ph name="IMPORT_NAME" />"</translation>
 <translation id="21354425047973905">Ocultar PINs</translation>
 <translation id="2135456203358955318">Lupa em área fixa</translation>
+<translation id="2135468118189259524">Saiba mais sobre os dados que o Google coleta e por que em <ph name="BEGIN_LINK" />policies.google.com<ph name="END_LINK" />.</translation>
 <translation id="2135787500304447609">&amp;Retomar</translation>
 <translation id="2136372518715274136">Digite a nova senha</translation>
 <translation id="2136476978468204130">A senha longa informada está incorreta</translation>
@@ -1458,6 +1465,7 @@
 <translation id="2688196195245426394">Erro ao registrar o dispositivo no cliente: <ph name="CLIENT_ERROR" />.</translation>
 <translation id="2690024944919328218">Mostrar opções de idioma</translation>
 <translation id="2691385045260836588">Modelo</translation>
+<translation id="2691440343905273290">Mudar configurações de entrada</translation>
 <translation id="2693176596243495071">Ops! Ocorreu um erro desconhecido. Tente novamente mais tarde ou entre em contato com seu administrador se o problema persistir.</translation>
 <translation id="2695749433451188613">Protocolo de impressão via Internet (HTTPS)</translation>
 <translation id="2699911226086014512">Falha na operação do PIN, código de erro: <ph name="RETRIES" />.</translation>
@@ -2075,6 +2083,7 @@
 <translation id="3440663250074896476">Mais ações para <ph name="BOOKMARK_NAME" /></translation>
 <translation id="3440761377721825626">Perguntar quando um site quiser usar um plug-in para acessar seu computador</translation>
 <translation id="3441653493275994384">Tela</translation>
+<translation id="3441663102605358937">Faça login em <ph name="ACCOUNT" /> novamente para verificar essa conta</translation>
 <translation id="3445047461171030979">Respostas rápidas do Google Assistente</translation>
 <translation id="3445925074670675829">Dispositivo USB-C</translation>
 <translation id="3446274660183028131">Inicie o Parallels Desktop para instalar o Windows.</translation>
@@ -2826,6 +2835,7 @@
 <translation id="4312866146174492540">Bloquear (padrão)</translation>
 <translation id="4314815835985389558">Gerenciar sincronização</translation>
 <translation id="4316850752623536204">Website do desenvolvedor</translation>
+<translation id="4317820549299924617">A verificação não foi concluída</translation>
 <translation id="4320177379694898372">Sem conexão com a Internet</translation>
 <translation id="4322394346347055525">Fechar outras guias</translation>
 <translation id="4324577459193912240">Arquivo incompleto</translation>
@@ -3631,6 +3641,7 @@
 <translation id="5307030433605830021">Fonte incompatível</translation>
 <translation id="5308380583665731573">Conectar</translation>
 <translation id="5310281978693206542">Enviar link para seus dispositivos</translation>
+<translation id="531118851858162334">Você está vendo esse item com base na sua atividade anterior nos Serviços do Google. Você pode ver seus dados, excluí-los e mudar suas configurações em <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
 <translation id="5311304534597152726">Login como</translation>
 <translation id="5311565231560644461">Não permitir que os sites usem seus dispositivos e dados de realidade virtual</translation>
 <translation id="5314381603623123224">Os Termos de Serviço do Chrome serão atualizados em 31 de março</translation>
@@ -3671,6 +3682,7 @@
 <translation id="5362741141255528695">Selecionar arquivo de chave privada.</translation>
 <translation id="5363109466694494651">Realizar Powerwash e reverter</translation>
 <translation id="5365881113273618889">A pasta selecionada contém arquivos confidenciais. Tem certeza de que quer conceder acesso permanente de gravação nessa pasta ao "<ph name="APP_NAME" />"?</translation>
+<translation id="536638840841140142">Nenhuma</translation>
 <translation id="5368720394188453070">Seu smartphone está bloqueado. Desbloqueie-o para entrar.</translation>
 <translation id="5368779022775404937">Fazer login em <ph name="REALM" /></translation>
 <translation id="5369491905435686894">Ativar aceleração do mouse</translation>
@@ -4826,6 +4838,7 @@
 <translation id="6748465660675848252">É possível prosseguir, mas apenas seus dados e configurações sincronizados serão restaurados. Todos os dados locais serão perdidos.</translation>
 <translation id="6749006854028927059">Os sites não podem usar seus cookies para ver sua atividade de navegação em diferentes sites, por exemplo, para personalizar anúncios. Os recursos de alguns sites podem falhar.</translation>
 <translation id="6750757184909117990">Desativar rede celular</translation>
+<translation id="6750946710563435348">Usar outro nome de usuário</translation>
 <translation id="6751344591405861699"><ph name="WINDOW_TITLE" /> (Modo anônimo)</translation>
 <translation id="6757101664402245801">URL copiado</translation>
 <translation id="6758056191028427665">Diga como estamos nos saindo.</translation>
@@ -5344,6 +5357,7 @@
 <translation id="7377451353532943397">Continuar bloqueando o acesso ao sensor</translation>
 <translation id="73786666777299047">Abrir a Chrome Web Store</translation>
 <translation id="7378812711085314936">Usar conexão de dados</translation>
+<translation id="7380622428988553498">O nome do dispositivo contém caracteres inválidos</translation>
 <translation id="7380768571499464492"><ph name="PRINTER_NAME" /> atualizada</translation>
 <translation id="7384687527486377545">Repetição automática do teclado</translation>
 <translation id="7385854874724088939">Ocorreu um erro durante a impressão.  Verifique a sua impressora e tente novamente.</translation>
@@ -5392,6 +5406,7 @@
 <translation id="7434969625063495310">Não foi possível adicionar o servidor de impressão. Verifique a configuração do servidor e tente novamente.</translation>
 <translation id="7436921188514130341">Ah, não! Ocorreu um erro durante a renomeação.</translation>
 <translation id="7438976808740265764">Não haverá mais compatibilidade com Flash Player a partir de dezembro de 2020.</translation>
+<translation id="7439519621174723623">Adicione um nome de dispositivo para continuar</translation>
 <translation id="7441736921018636843">Para mudar essa configuração, <ph name="BEGIN_LINK" />redefina a sincronização<ph name="END_LINK" /> e remova sua senha longa de sincronização</translation>
 <translation id="7441830548568730290">Outros usuários</translation>
 <translation id="7442465037756169001">Seu hardware Google Meet está pronto para ser configurado.</translation>
@@ -5633,6 +5648,7 @@
 <translation id="7717134585801378441">Os sites podem perguntar sua localização (recomendado)</translation>
 <translation id="7717845620320228976">Verificar se há atualizações</translation>
 <translation id="7719367874908701697">Zoom da página:</translation>
+<translation id="7719588063158526969">Nome do dispositivo muito longo</translation>
 <translation id="7721179060400456005">Permitir que as janelas estendam as telas</translation>
 <translation id="7722040605881499779">Atualização necessária: <ph name="NECESSARY_SPACE" /></translation>
 <translation id="7724603315864178912">Recortar</translation>
@@ -5937,6 +5953,7 @@
 <translation id="8049705080247101012">O Google sinalizou a extensão "<ph name="EXTENSION_NAME" />" como maliciosa e impediu a instalação</translation>
 <translation id="8049948037269924837">Rolagem reversa do touchpad</translation>
 <translation id="8050038245906040378">Assinatura do código comercial da Microsoft</translation>
+<translation id="8050191834453426339">Confirmar novamente</translation>
 <translation id="8051193500142930381">Recursos que precisam de câmera não funcionarão</translation>
 <translation id="8051390370038326517">Sempre permitir que <ph name="HOST" /> tenha controle total de dispositivos MIDI</translation>
 <translation id="8053278772142718589">Arquivos PKCS #12</translation>
@@ -6212,6 +6229,7 @@
 <translation id="8378714024927312812">Gerenciado pela sua organização</translation>
 <translation id="8379878387931047019">Este dispositivo não é compatível com o tipo de chave de segurança solicitado por este site</translation>
 <translation id="8379991678458444070">Para voltar a esta guia rapidamente, adicione-a aos favoritos</translation>
+<translation id="8380266723152870797">Nome da janela</translation>
 <translation id="8382384117483909115">{NUM_TABS,plural, =1{Ler guia mais tarde}one{Ler guia mais tarde}other{Ler guias mais tarde}}</translation>
 <translation id="8382913212082956454">Copiar &amp;endereço de e-mail</translation>
 <translation id="8386091599636877289">Política não encontrada.</translation>
@@ -6376,6 +6394,7 @@
 <translation id="8592141010104017453">Não mostrar notificações</translation>
 <translation id="859246725979739260">Este site foi impedido de acessar sua localização.</translation>
 <translation id="8593121833493516339">Envie dados de uso e diagnóstico. Ajude a melhorar a experiência do seu filho com o Android enviando automaticamente ao Google dados de diagnóstico, de uso de apps e do dispositivo. Eles não serão usados para identificar seu filho e ajudarão a melhorar o sistema, a estabilidade de apps e muito mais. Alguns dados agregados também ajudarão os apps do Google e os nossos parceiros, como os desenvolvedores Android. Se a opção "Atividade na Web e de apps adicional" estiver ativada para seu filho, esses dados poderão ser salvos na Conta do Google dele. <ph name="BEGIN_LINK1" />Saiba mais<ph name="END_LINK1" /></translation>
+<translation id="8593735906501637689">O módulo <ph name="MODULE_TITLE" /> foi removido.</translation>
 <translation id="8594908476761052472">Capturar vídeo</translation>
 <translation id="8596540852772265699">Arquivos personalizados</translation>
 <translation id="8597845839771543242">Formato da propriedade:</translation>
diff --git a/chrome/app/resources/generated_resources_pt-PT.xtb b/chrome/app/resources/generated_resources_pt-PT.xtb
index 07d957a..c4c67e2 100644
--- a/chrome/app/resources/generated_resources_pt-PT.xtb
+++ b/chrome/app/resources/generated_resources_pt-PT.xtb
@@ -122,6 +122,7 @@
 <translation id="1134009406053225289">Abrir na janela de navegação anónima</translation>
 <translation id="1136179794690960030"><ph name="EMOJI_NAME" />. <ph name="EMOJI_INDEX" /> de <ph name="EMOJI_COUNT" />.</translation>
 <translation id="1136712381129578788">A chave de segurança está bloqueada porque foi introduzido o PIN incorreto demasiadas vezes. Para a desbloquear, remova-a e volte a inseri-la.</translation>
+<translation id="1137589305610962734">dados temporários</translation>
 <translation id="1137673463384776352">Abrir link na aplicação <ph name="APP" /></translation>
 <translation id="1139343347646843679">Ocorreu um erro ao configurar o Linux. Contacte o seu administrador.</translation>
 <translation id="1140351953533677694">Aceder aos dispositivos Bluetooth e de série</translation>
@@ -982,6 +983,7 @@
 <translation id="2131077480075264">Não é possível instalar "<ph name="APP_NAME" />", pois não é permitido por "<ph name="IMPORT_NAME" />"</translation>
 <translation id="21354425047973905">Ocultar PINs</translation>
 <translation id="2135456203358955318">Lupa ancorada</translation>
+<translation id="2135468118189259524">Saiba mais sobre os dados que a Google recolhe e por que motivo em <ph name="BEGIN_LINK" />policies.google.com<ph name="END_LINK" />.</translation>
 <translation id="2135787500304447609">&amp;Continuar</translation>
 <translation id="2136372518715274136">Introduzir a nova palavra-passe</translation>
 <translation id="2136476978468204130">A frase de acesso introduzida está incorreta</translation>
@@ -3638,6 +3640,7 @@
 <translation id="5307030433605830021">Origem não suportada</translation>
 <translation id="5308380583665731573">Ligar</translation>
 <translation id="5310281978693206542">Enviar link para os dispositivos</translation>
+<translation id="531118851858162334">Está a ver este item com base na sua atividade anterior de utilização dos Serviços Google. Pode ver os seus dados, eliminá-los e alterar as suas definições em <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
 <translation id="5311304534597152726">A iniciar sessão como…</translation>
 <translation id="5311565231560644461">Não permitir que os sites utilizem os seus dados e dispositivos de realidade virtual</translation>
 <translation id="5314381603623123224">Os Termos de Utilização do Chrome vão ser alterados a 31 de março</translation>
@@ -6223,6 +6226,7 @@
 <translation id="8378714024927312812">Gerido pela sua entidade</translation>
 <translation id="8379878387931047019">Este dispositivo não suporta o tipo de chave de segurança necessário para este Website.</translation>
 <translation id="8379991678458444070">Volte aqui rapidamente ao adicionar este separador aos marcadores</translation>
+<translation id="8380266723152870797">Nome da janela</translation>
 <translation id="8382384117483909115">{NUM_TABS,plural, =1{Ler separador mais tarde}other{Ler separadores mais tarde}}</translation>
 <translation id="8382913212082956454">Copiar &amp;endereço de email</translation>
 <translation id="8386091599636877289">A política não foi encontrada.</translation>
@@ -6387,6 +6391,7 @@
 <translation id="8592141010104017453">Não mostrar qualquer notificação</translation>
 <translation id="859246725979739260">Este site foi impedido de aceder à sua localização.</translation>
 <translation id="8593121833493516339">Envie dados de utilização e diagnósticos. Ajude a melhorar a experiência Android da criança ao enviar automaticamente dados de diagnóstico, de utilização de aplicações e do dispositivo para a Google. Estes dados não serão utilizados para identificar a criança e ajudarão a melhorar a estabilidade das aplicações e do sistema, entre outras melhorias. Alguns dados agregados também ajudarão as aplicações e os parceiros Google, como os programadores Android. Se a Atividade da Web e de apps adicional estiver ativada para a criança, estes dados podem ser guardados na respetiva Conta Google. <ph name="BEGIN_LINK1" />Saiba mais<ph name="END_LINK1" /></translation>
+<translation id="8593735906501637689">Módulo <ph name="MODULE_TITLE" /> removido.</translation>
 <translation id="8594908476761052472">Capturar vídeo</translation>
 <translation id="8596540852772265699">Ficheiros personalizados</translation>
 <translation id="8597845839771543242">Formato da propriedade:</translation>
diff --git a/chrome/app/resources/generated_resources_ru.xtb b/chrome/app/resources/generated_resources_ru.xtb
index 9d7d1abb..137da97 100644
--- a/chrome/app/resources/generated_resources_ru.xtb
+++ b/chrome/app/resources/generated_resources_ru.xtb
@@ -227,6 +227,7 @@
 <translation id="1249643471736608405">Плагин <ph name="PLUGIN_NAME" /> заблокирован, так как он больше не поддерживается.</translation>
 <translation id="1251366534849411931">Отсутствует ожидаемая открывающая фигурная скобка: <ph name="ERROR_LINE" />.</translation>
 <translation id="1251480783646955802">Будут удалены сохраненные данные сайтов и установленных с них приложений (<ph name="TOTAL_USAGE" />).</translation>
+<translation id="125220115284141797">По умолчанию</translation>
 <translation id="1252987234827889034">Ошибка в профиле</translation>
 <translation id="1254593899333212300">Прямое подключение к Интернету</translation>
 <translation id="1259152067760398571">Проверка безопасности выполнена вчера.</translation>
@@ -318,6 +319,7 @@
 <translation id="1361872463926621533">Воспроизводить звук при запуске</translation>
 <translation id="1362865166188278099">Техническая проблема. Проверьте принтер.</translation>
 <translation id="1363585519747660921">Необходимо настроить USB-принтер</translation>
+<translation id="1364664799726141130">У аккаунта, который вы подтвердили, нет доступа к этому устройству. Чтобы разблокировать сеанс, подтвердите аккаунт <ph name="ACCOUNT" />.</translation>
 <translation id="1365180424462182382"><ph name="BEGIN_LINK" />Браузер находится под управлением<ph name="END_LINK" /> домена <ph name="ENROLLMENT_DOMAIN" />.</translation>
 <translation id="1367951781824006909">Выберите файл</translation>
 <translation id="1369149969991017342">Включить функцию Switch Access (позволяет управлять компьютером с помощью переключателей)</translation>
@@ -426,6 +428,7 @@
 <translation id="1486096554574027028">Поиск паролей</translation>
 <translation id="1487335504823219454">Вкл. – пользовательские настройки</translation>
 <translation id="1489664337021920575">Выбрать другой вариант</translation>
+<translation id="1492417797159476138">Вы уже сохранили это имя пользователя для данного сайта.</translation>
 <translation id="1493892686965953381">Ожидание загрузки <ph name="LOAD_STATE_PARAMETER" />...</translation>
 <translation id="1495486559005647033">Количество других доступных устройств: <ph name="NUM_PRINTERS" />.</translation>
 <translation id="1495677929897281669">Вернуться на вкладку</translation>
@@ -650,6 +653,7 @@
 <translation id="173628468822554835">ОК. По умолчанию новые сайты не будут отправлять вам уведомления.</translation>
 <translation id="1736419249208073774">Подробнее</translation>
 <translation id="1737968601308870607">Сообщить об ошибке</translation>
+<translation id="174123615272205933">Другое</translation>
 <translation id="1741314857973421784">Далее</translation>
 <translation id="1743570585616704562">Не распознано</translation>
 <translation id="1743970419083351269">Закрыть панель загрузок</translation>
@@ -684,6 +688,7 @@
 <translation id="1776712937009046120">Добавить пользователя</translation>
 <translation id="1776883657531386793"><ph name="OID" />: <ph name="INFO" /></translation>
 <translation id="1778457539567749232">Отметить как непрочитанное</translation>
+<translation id="1779468444204342338">Минимальные</translation>
 <translation id="1779652936965200207">Введите данный ключ доступа в "<ph name="DEVICE_NAME" />":</translation>
 <translation id="177989070088644880">Приложение (<ph name="ANDROID_PACKAGE_NAME" />)</translation>
 <translation id="1780152987505130652">Закрыть группу</translation>
@@ -1456,6 +1461,7 @@
 <translation id="2688196195245426394">Ошибка при регистрации устройства на сервере: <ph name="CLIENT_ERROR" />.</translation>
 <translation id="2690024944919328218">Показать языковые настройки</translation>
 <translation id="2691385045260836588">Модель</translation>
+<translation id="2691440343905273290">Изменить настройки ввода</translation>
 <translation id="2693176596243495071">Произошла неизвестная ошибка. Повторите попытку позже. Если ситуация не изменится, обратитесь к администратору.</translation>
 <translation id="2695749433451188613">Internet Printing Protocol (HTTPS)</translation>
 <translation id="2699911226086014512">Не удалось установить PIN-код (ошибка <ph name="RETRIES" />).</translation>
@@ -2072,6 +2078,7 @@
 <translation id="3440663250074896476">Другие действия с закладкой <ph name="BOOKMARK_NAME" /></translation>
 <translation id="3440761377721825626">Предупреждать, что сайт пытается использовать плагин для доступа к компьютеру</translation>
 <translation id="3441653493275994384">Экран</translation>
+<translation id="3441663102605358937">Войдите в аккаунт <ph name="ACCOUNT" /> ещё раз, чтобы подтвердить его</translation>
 <translation id="3445047461171030979">Быстрые ответы Google Ассистента</translation>
 <translation id="3445925074670675829">Устройство USB-C</translation>
 <translation id="3446274660183028131">Чтобы установить Windows, запустите Parallels Desktop.</translation>
@@ -2823,6 +2830,7 @@
 <translation id="4312866146174492540">Блокировать (по умолчанию)</translation>
 <translation id="4314815835985389558">Настройки синхронизации</translation>
 <translation id="4316850752623536204">Сайт разработчика</translation>
+<translation id="4317820549299924617">Не удалось выполнить верификацию</translation>
 <translation id="4320177379694898372">Нет подключения к Интернету</translation>
 <translation id="4322394346347055525">Закрыть другие вкладки</translation>
 <translation id="4324577459193912240">Файл скачан не полностью</translation>
@@ -3668,6 +3676,7 @@
 <translation id="5362741141255528695">Выберите файл закрытого ключа.</translation>
 <translation id="5363109466694494651">Powerwash и откат</translation>
 <translation id="5365881113273618889">Выбранная папка содержит конфиденциальные файлы. Предоставить приложению "<ph name="APP_NAME" />" постоянный доступ для записи данных?</translation>
+<translation id="536638840841140142">Нет</translation>
 <translation id="5368720394188453070">Для входа разблокируйте телефон.</translation>
 <translation id="5368779022775404937">Вход в <ph name="REALM" /></translation>
 <translation id="5369491905435686894">Включить ускорение мыши</translation>
@@ -4821,6 +4830,7 @@
 <translation id="6748465660675848252">Если вы продолжите сейчас, восстановлены будут только синхронизированные, но не локальные данные.</translation>
 <translation id="6749006854028927059">Сайты не могут использовать файлы cookie, чтобы видеть ваши действия в браузере, например, для показа персонализированной рекламы. Из-за этого некоторые функции на сайтах могут работать некорректно.</translation>
 <translation id="6750757184909117990">Отключить мобильную сеть</translation>
+<translation id="6750946710563435348">Использовать другое имя пользователя.</translation>
 <translation id="6751344591405861699"><ph name="WINDOW_TITLE" /> (инкогнито)</translation>
 <translation id="6757101664402245801">URL скопирован</translation>
 <translation id="6758056191028427665">Расскажите, как у вас дела.</translation>
@@ -5339,6 +5349,7 @@
 <translation id="7377451353532943397">Всегда запрещать использовать датчики</translation>
 <translation id="73786666777299047">Открыть Интернет-магазин Chrome</translation>
 <translation id="7378812711085314936">Подключаться к точкам доступа</translation>
+<translation id="7380622428988553498">Имя устройства содержит недопустимые символы.</translation>
 <translation id="7380768571499464492">Обновлено: <ph name="PRINTER_NAME" /></translation>
 <translation id="7384687527486377545">Автоматический повтор ввода на клавиатуре</translation>
 <translation id="7385854874724088939">При печати произошла ошибка. Проверьте состояние принтера и повторите попытку.</translation>
@@ -5387,6 +5398,7 @@
 <translation id="7434969625063495310">Не удалось добавить сервер печати. Проверьте его настройки и повторите попытку.</translation>
 <translation id="7436921188514130341">При изменении названия произошла ошибка.</translation>
 <translation id="7438976808740265764">Поддержка Flash Player будет прекращена в декабре 2020 года.</translation>
+<translation id="7439519621174723623">Чтобы продолжить, добавьте имя устройства.</translation>
 <translation id="7441736921018636843">Чтобы изменить этот параметр, <ph name="BEGIN_LINK" />сбросьте настройки синхронизации<ph name="END_LINK" /> и удалите кодовую фразу</translation>
 <translation id="7441830548568730290">Другие пользователи</translation>
 <translation id="7442465037756169001">Оборудование Hangouts Meet готово к настройке.</translation>
@@ -5628,6 +5640,7 @@
 <translation id="7717134585801378441">Разрешить сайтам отправлять запрос на доступ к информации о местоположении</translation>
 <translation id="7717845620320228976">Проверить наличие обновлений</translation>
 <translation id="7719367874908701697">Масштабирование страницы</translation>
+<translation id="7719588063158526969">Слишком длинное имя устройства.</translation>
 <translation id="7721179060400456005">Разрешить показывать окно на нескольких устройствах</translation>
 <translation id="7722040605881499779">Для обновления необходимо <ph name="NECESSARY_SPACE" />.</translation>
 <translation id="7724603315864178912">Вырезать</translation>
@@ -5932,6 +5945,7 @@
 <translation id="8049705080247101012">Google заблокировал установку потенциально опасной программы (<ph name="EXTENSION_NAME" />).</translation>
 <translation id="8049948037269924837">Обратное направление прокрутки с помощью сенсорной панели</translation>
 <translation id="8050038245906040378">Подписывание коммерческого кода Microsoft</translation>
+<translation id="8050191834453426339">Подтвердите данные ещё раз</translation>
 <translation id="8051193500142930381">Функции, которые используют камеру, не будут работать</translation>
 <translation id="8051390370038326517">Предоставить сайту <ph name="HOST" /> полный контроль над устройствами MIDI</translation>
 <translation id="8053278772142718589">Файлы PKCS #12</translation>
diff --git a/chrome/app/resources/generated_resources_sl.xtb b/chrome/app/resources/generated_resources_sl.xtb
index 3e60e9c..48d73c40 100644
--- a/chrome/app/resources/generated_resources_sl.xtb
+++ b/chrome/app/resources/generated_resources_sl.xtb
@@ -122,6 +122,7 @@
 <translation id="1134009406053225289">Odpri v oknu brez beleženja zgodovine</translation>
 <translation id="1136179794690960030"><ph name="EMOJI_NAME" />. <ph name="EMOJI_INDEX" /> od <ph name="EMOJI_COUNT" />.</translation>
 <translation id="1136712381129578788">Varnostni ključ je zaklenjen, ker ste prevečkrat vnesli napačno kodo PIN. Če ga želite odkleniti, ga odstranite in znova vstavite.</translation>
+<translation id="1137589305610962734">začasni podatki</translation>
 <translation id="1137673463384776352">Odpri povezavo v aplikaciji <ph name="APP" /></translation>
 <translation id="1139343347646843679">Med konfiguriranjem Linuxa je prišlo do napake. Obrnite se na skrbnika.</translation>
 <translation id="1140351953533677694">Dostop do naprav Bluetooth in serijskih naprav</translation>
@@ -982,6 +983,7 @@
 <translation id="2131077480075264">»<ph name="APP_NAME" />« ni mogoče namestiti, ker »<ph name="IMPORT_NAME" />« tega ne dovoli.</translation>
 <translation id="21354425047973905">Skrivanje kod PIN</translation>
 <translation id="2135456203358955318">Zasidrana lupa</translation>
+<translation id="2135468118189259524">Na <ph name="BEGIN_LINK" />policies.google.com<ph name="END_LINK" /> lahko preberete o podatkih, ki jih Google zbira, in zakaj jih zbira.</translation>
 <translation id="2135787500304447609">&amp;Nadaljuj</translation>
 <translation id="2136372518715274136">Vnesite novo geslo</translation>
 <translation id="2136476978468204130">Vnesli ste napačno geslo</translation>
@@ -3638,6 +3640,7 @@
 <translation id="5307030433605830021">Vir ni podprt</translation>
 <translation id="5308380583665731573">Povezovanje</translation>
 <translation id="5310281978693206542">Pošiljanje povezave v naprave</translation>
+<translation id="531118851858162334">To je prikazano na podlagi prejšnje dejavnosti pri uporabi Googlovih storitev. Na <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> si lahko ogledate svoje podatke, jih izbrišete in spremenite.</translation>
 <translation id="5311304534597152726">Prijavljanje kot</translation>
 <translation id="5311565231560644461">Ne dovoli spletnim mestom uporabe naprav/podatkov za navidezno resničnost</translation>
 <translation id="5314381603623123224">Pogoji storitve za Chrome se bodo spremenili 31. marca</translation>
@@ -6225,6 +6228,7 @@
 <translation id="8378714024927312812">Upravlja vaša organizacija</translation>
 <translation id="8379878387931047019">Ta naprava ne podpira vrste varnostnega ključa, ki ga zahteva to spletno mesto</translation>
 <translation id="8379991678458444070">Hitro se vrnite na ta zavihek tako, da ga dodate med zaznamke</translation>
+<translation id="8380266723152870797">Ime okna</translation>
 <translation id="8382384117483909115">{NUM_TABS,plural, =1{Branje zavihka pozneje}one{Branje zavihkov pozneje}two{Branje zavihkov pozneje}few{Branje zavihkov pozneje}other{Branje zavihkov pozneje}}</translation>
 <translation id="8382913212082956454">Kopiraj &amp;e-poštni naslov</translation>
 <translation id="8386091599636877289">Pravilnika ni mogoče najti.</translation>
@@ -6389,6 +6393,7 @@
 <translation id="8592141010104017453">Ne prikazuj obvestil</translation>
 <translation id="859246725979739260">Temu spletnemu mestu je preprečen dostop do vaše lokacije.</translation>
 <translation id="8593121833493516339">Pošiljanje podatkov o uporabi in diagnostičnih podatkov. Pomagajte izboljšati otrokovo izkušnjo z Androidom s samodejnim pošiljanjem diagnostičnih podatkov ter podatkov o uporabi naprave in aplikacij Googlu. Teh podatkov ne bomo uporabljali, da bi prepoznali vašega otroka, temveč za izboljšanje stabilnosti sistema in izvajanja aplikacij ter drugega. Nekateri združeni podatki bodo pomagali tudi Googlovim aplikacijam in partnerjem, na primer razvijalcem za Android. Če ste za otroka vklopili dodatno beleženje dejavnosti v spletu in aplikacijah, bodo ti podatki morda shranjeni v njegovem računu za Google. <ph name="BEGIN_LINK1" />Več o tem<ph name="END_LINK1" /></translation>
+<translation id="8593735906501637689">Odstranjeno: <ph name="MODULE_TITLE" /></translation>
 <translation id="8594908476761052472">Snemanje videa</translation>
 <translation id="8596540852772265699">Datoteke po meri</translation>
 <translation id="8597845839771543242">Oblika zapisa lastnosti:</translation>
diff --git a/chrome/app/resources/generated_resources_sr-Latn.xtb b/chrome/app/resources/generated_resources_sr-Latn.xtb
index 32c0280..9944b8a 100644
--- a/chrome/app/resources/generated_resources_sr-Latn.xtb
+++ b/chrome/app/resources/generated_resources_sr-Latn.xtb
@@ -122,6 +122,7 @@
 <translation id="1134009406053225289">Otvori u prozoru bez arhiviranja</translation>
 <translation id="1136179794690960030"><ph name="EMOJI_NAME" />. <ph name="EMOJI_INDEX" /> od <ph name="EMOJI_COUNT" />.</translation>
 <translation id="1136712381129578788">Bezbednosni ključ je zaključan jer ste previše puta uneli pogrešan PIN. Da biste ga otključali, uklonite ga, pa ga ponovo umetnite.</translation>
+<translation id="1137589305610962734">privremeni podaci</translation>
 <translation id="1137673463384776352">Otvori link u <ph name="APP" /></translation>
 <translation id="1139343347646843679">Došlo je do greške pri konfigurisanju Linux-a. Obratite se administratoru.</translation>
 <translation id="1140351953533677694">Pristup Bluetooth i serijskim uređajima</translation>
@@ -979,6 +980,7 @@
 <translation id="2131077480075264">Nije uspelo instaliranje „<ph name="APP_NAME" />“ jer to ne dozvoljava „<ph name="IMPORT_NAME" />“</translation>
 <translation id="21354425047973905">Sakrij PIN-ove</translation>
 <translation id="2135456203358955318">Montirana lupa ekrana</translation>
+<translation id="2135468118189259524">Saznajte više o podacima koje Google prikuplja i razlozima za njihovo prikupljanje na <ph name="BEGIN_LINK" />policies.google.com<ph name="END_LINK" />.</translation>
 <translation id="2135787500304447609">&amp;Nastavi</translation>
 <translation id="2136372518715274136">Unesite novu lozinku</translation>
 <translation id="2136476978468204130">Pristupna fraza koju ste uneli je netačna</translation>
@@ -3635,6 +3637,7 @@
 <translation id="5307030433605830021">Izvor nije podržan</translation>
 <translation id="5308380583665731573">Povezivanje</translation>
 <translation id="5310281978693206542">Pošaljite link na svoje uređaje</translation>
+<translation id="531118851858162334">Ova stavka se prikazuje na osnovu prethodnih aktivnosti u Google uslugama. Možete da pregledate podatke, da ih brišete i da promenite podešavanja na <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
 <translation id="5311304534597152726">Prijavljujete se kao</translation>
 <translation id="5311565231560644461">Ne dozvoljavaj sajtovima da koriste uređaje i podatke virtuelne realnosti</translation>
 <translation id="5314381603623123224">Chrome uslovi korišćenja usluge se menjaju 31. marta.</translation>
@@ -6221,6 +6224,7 @@
 <translation id="8378714024927312812">Ovim upravlja organizacija</translation>
 <translation id="8379878387931047019">Ovaj uređaj ne podržava tip bezbednosnog ključa koji zahteva ovaj veb-sajt</translation>
 <translation id="8379991678458444070">Možete brzo da se vratite ovde ako obeležite ovu karticu</translation>
+<translation id="8380266723152870797">Naziv prozora</translation>
 <translation id="8382384117483909115">{NUM_TABS,plural, =1{Čitajte karticu kasnije}one{Čitajte kartice kasnije}few{Čitajte kartice kasnije}other{Čitajte kartice kasnije}}</translation>
 <translation id="8382913212082956454">Kopiraj &amp;e-adresu</translation>
 <translation id="8386091599636877289">Smernice nisu pronađene.</translation>
@@ -6385,6 +6389,7 @@
 <translation id="8592141010104017453">Ne prikazuj nikakva obaveštenja</translation>
 <translation id="859246725979739260">Ovom sajtu je zabranjeno da pristupa lokaciji.</translation>
 <translation id="8593121833493516339">Šaljite podatke o korišćenju i dijagnostičke podatke. Pomozite nam da poboljšamo Android doživljaj za dete tako što ćete automatski slati Google-u podatke o dijagnostici i korišćenju uređaja i aplikacija. Te informacije se neće koristiti za identifikaciju deteta i pomoći će u održavanju stabilnosti sistema i aplikacije i drugim podešavanjima. Neki objedinjeni podaci će takođe pomoći Google aplikacijama i partnerima, poput Android programera. Ako za dete uključite dodatne aktivnosti na vebu i u aplikacijama, ti podaci će se možda čuvati na Google nalogu deteta. <ph name="BEGIN_LINK1" />Saznajte više<ph name="END_LINK1" /></translation>
+<translation id="8593735906501637689">Uklonjen je filter <ph name="MODULE_TITLE" /></translation>
 <translation id="8594908476761052472">Snimi video</translation>
 <translation id="8596540852772265699">Prilagođene datoteke</translation>
 <translation id="8597845839771543242">Format svojstva:</translation>
diff --git a/chrome/app/resources/generated_resources_sr.xtb b/chrome/app/resources/generated_resources_sr.xtb
index 8d095025..cc30a67 100644
--- a/chrome/app/resources/generated_resources_sr.xtb
+++ b/chrome/app/resources/generated_resources_sr.xtb
@@ -122,6 +122,7 @@
 <translation id="1134009406053225289">Отвори у прозору без архивирања</translation>
 <translation id="1136179794690960030"><ph name="EMOJI_NAME" />. <ph name="EMOJI_INDEX" /> од <ph name="EMOJI_COUNT" />.</translation>
 <translation id="1136712381129578788">Безбедносни кључ је закључан јер сте превише пута унели погрешан PIN. Да бисте га откључали, уклоните га, па га поново уметните.</translation>
+<translation id="1137589305610962734">привремени подаци</translation>
 <translation id="1137673463384776352">Отвори линк у <ph name="APP" /></translation>
 <translation id="1139343347646843679">Дошло је до грешке при конфигурисању Linux-а. Обратите се администратору.</translation>
 <translation id="1140351953533677694">Приступ Bluetooth и серијским уређајима</translation>
@@ -979,6 +980,7 @@
 <translation id="2131077480075264">Није успело инсталирање „<ph name="APP_NAME" />“ јер то не дозвољава „<ph name="IMPORT_NAME" />“</translation>
 <translation id="21354425047973905">Сакриј PIN-ове</translation>
 <translation id="2135456203358955318">Монтирана лупа екрана</translation>
+<translation id="2135468118189259524">Сазнајте више о подацима које Google прикупља и разлозима за њихово прикупљање на <ph name="BEGIN_LINK" />policies.google.com<ph name="END_LINK" />.</translation>
 <translation id="2135787500304447609">&amp;Настави</translation>
 <translation id="2136372518715274136">Унесите нову лозинку</translation>
 <translation id="2136476978468204130">Приступна фраза коју сте унели је нетачна</translation>
@@ -3635,6 +3637,7 @@
 <translation id="5307030433605830021">Извор није подржан</translation>
 <translation id="5308380583665731573">Повезивање</translation>
 <translation id="5310281978693206542">Пошаљите линк на своје уређаје</translation>
+<translation id="531118851858162334">Ова ставка се приказује на основу претходних активности у Google услугама. Можете да прегледате податке, да их бришете и да промените подешавања на <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
 <translation id="5311304534597152726">Пријављујете се као</translation>
 <translation id="5311565231560644461">Не дозвољавај сајтовима да користе уређаје и податке виртуелне реалности</translation>
 <translation id="5314381603623123224">Chrome услови коришћења услуге се мењају 31. марта.</translation>
@@ -6221,6 +6224,7 @@
 <translation id="8378714024927312812">Овим управља организација</translation>
 <translation id="8379878387931047019">Овај уређај не подржава тип безбедносног кључа који захтева овај веб-сајт</translation>
 <translation id="8379991678458444070">Можете брзо да се вратите овде ако обележите ову картицу</translation>
+<translation id="8380266723152870797">Назив прозора</translation>
 <translation id="8382384117483909115">{NUM_TABS,plural, =1{Читајте картицу касније}one{Читајте картице касније}few{Читајте картице касније}other{Читајте картице касније}}</translation>
 <translation id="8382913212082956454">Копирај &amp;е-адресу</translation>
 <translation id="8386091599636877289">Смернице нису пронађене.</translation>
@@ -6385,6 +6389,7 @@
 <translation id="8592141010104017453">Не приказуј никаква обавештења</translation>
 <translation id="859246725979739260">Овом сајту је забрањено да приступа локацији.</translation>
 <translation id="8593121833493516339">Шаљите податке о коришћењу и дијагностичке податке. Помозите нам да побољшамо Android доживљај за дете тако што ћете аутоматски слати Google-у податке о дијагностици и коришћењу уређаја и апликација. Те информације се неће користити за идентификацију детета и помоћи ће у одржавању стабилности система и апликације и другим подешавањима. Неки обједињени подаци ће такође помоћи Google апликацијама и партнерима, попут Android програмера. Ако за дете укључите додатне активности на вебу и у апликацијама, ти подаци ће се можда чувати на Google налогу детета. <ph name="BEGIN_LINK1" />Сазнајте више<ph name="END_LINK1" /></translation>
+<translation id="8593735906501637689">Уклоњен је филтер <ph name="MODULE_TITLE" /></translation>
 <translation id="8594908476761052472">Сними видео</translation>
 <translation id="8596540852772265699">Прилагођене датотеке</translation>
 <translation id="8597845839771543242">Формат својства:</translation>
diff --git a/chrome/app/resources/generated_resources_sv.xtb b/chrome/app/resources/generated_resources_sv.xtb
index f864a62e..eb03761 100644
--- a/chrome/app/resources/generated_resources_sv.xtb
+++ b/chrome/app/resources/generated_resources_sv.xtb
@@ -122,6 +122,7 @@
 <translation id="1134009406053225289">Öppna i inkognitofönster</translation>
 <translation id="1136179794690960030"><ph name="EMOJI_NAME" />. <ph name="EMOJI_INDEX" /> av <ph name="EMOJI_COUNT" />.</translation>
 <translation id="1136712381129578788">Säkerhetsnyckeln har låsts eftersom du har angett fel pinkod för många gånger. Ta ur och sätt i säkerhetsnyckeln igen för att låsa upp den.</translation>
+<translation id="1137589305610962734">tillfälligt sparad data</translation>
 <translation id="1137673463384776352">Öppna länken i <ph name="APP" /></translation>
 <translation id="1139343347646843679">Ett fel uppstod när Linux skulle konfigureras. Kontakta administratören.</translation>
 <translation id="1140351953533677694">Få åtkomst till dina Bluetooth-enheter och seriella enheter</translation>
@@ -982,6 +983,7 @@
 <translation id="2131077480075264">Det går inte att installera <ph name="APP_NAME" /> eftersom den inte tillåts av <ph name="IMPORT_NAME" /></translation>
 <translation id="21354425047973905">Dölj pinkoder</translation>
 <translation id="2135456203358955318">Dockad skärmförstoring</translation>
+<translation id="2135468118189259524">Läs om vilken data Google samlar in och varför på <ph name="BEGIN_LINK" />policies.google.com<ph name="END_LINK" />.</translation>
 <translation id="2135787500304447609">&amp;Återuppta</translation>
 <translation id="2136372518715274136">Skriv in det nya lösenordet</translation>
 <translation id="2136476978468204130">Den angivna lösenfrasen är felaktig</translation>
@@ -3638,6 +3640,7 @@
 <translation id="5307030433605830021">Källan stöds inte</translation>
 <translation id="5308380583665731573">Anslut</translation>
 <translation id="5310281978693206542">Skicka länken till dina enheter</translation>
+<translation id="531118851858162334">Det här objektet visas för dig utifrån din tidigare aktivitet i Googles tjänster. Du kan se och radera din data och ändra dina inställningar på <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
 <translation id="5311304534597152726">Loggar in som</translation>
 <translation id="5311565231560644461">Tillåt inte att webbplatser använder VR-enheter och VR-data</translation>
 <translation id="5314381603623123224">Chromes användarvillkor ändras den 31 mars</translation>
@@ -6223,6 +6226,7 @@
 <translation id="8378714024927312812">Hanteras av organisationen</translation>
 <translation id="8379878387931047019">Enheten stöder inte den typ av säkerhetsnyckel som begärs av webbplatsen</translation>
 <translation id="8379991678458444070">Bokmärk fliken om du snabbt vill hitta tillbaka</translation>
+<translation id="8380266723152870797">Namn för fönstret</translation>
 <translation id="8382384117483909115">{NUM_TABS,plural, =1{Läs fliken senare}other{Läs flikarna senare}}</translation>
 <translation id="8382913212082956454">Kopiera &amp;e-postadress</translation>
 <translation id="8386091599636877289">Policyn hittades inte.</translation>
@@ -6387,6 +6391,7 @@
 <translation id="8592141010104017453">Visa inga aviseringar alls</translation>
 <translation id="859246725979739260">Åtkomst till din plats har blockerats för den här webbplatsen</translation>
 <translation id="8593121833493516339">Skicka diagnostik- och användningsdata. Hjälp till att göra Android bättre för ditt barn genom att skicka diagnostikdata, enhetsdata och data om appanvändning till Google automatiskt. Denna data används till att förbättra systemets och apparnas stabilitet med mera och inte till att identifiera ditt barn. Viss samlad data används även till att förbättra appar från Google och partner, till exempel Android-utvecklare. Om ytterligare webb- och appaktivitet har aktiverats för ditt barn kan denna data sparas i Google-kontot. <ph name="BEGIN_LINK1" />Läs mer<ph name="END_LINK1" /></translation>
+<translation id="8593735906501637689"><ph name="MODULE_TITLE" /> har tagits bort</translation>
 <translation id="8594908476761052472">Spela in video</translation>
 <translation id="8596540852772265699">Egna filformat</translation>
 <translation id="8597845839771543242">Format på egenskap:</translation>
diff --git a/chrome/app/resources/generated_resources_te.xtb b/chrome/app/resources/generated_resources_te.xtb
index 5997fac..a9c8b6f66 100644
--- a/chrome/app/resources/generated_resources_te.xtb
+++ b/chrome/app/resources/generated_resources_te.xtb
@@ -122,6 +122,7 @@
 <translation id="1134009406053225289">అజ్ఞాత విండోలో తెరువు</translation>
 <translation id="1136179794690960030"><ph name="EMOJI_NAME" />. <ph name="EMOJI_COUNT" />లో <ph name="EMOJI_INDEX" />వది.</translation>
 <translation id="1136712381129578788">చాలా ఎక్కువ సార్లు తప్పు పిన్‌ను నమోదు చేసినందున సెక్యూరిటీ కీ లాక్ చేయబడింది. అన్‌లాక్ చేయడానికి, దానిని తీసివేసి, మళ్లీ ఇన్‌సర్ట్ చేయండి.</translation>
+<translation id="1137589305610962734">తాత్కాలిక డేటా</translation>
 <translation id="1137673463384776352">లింక్‌ను <ph name="APP" />లో తెరువు</translation>
 <translation id="1139343347646843679">Linuxను కాన్ఫిగర్ చేస్తున్నప్పుడు ఎర్రర్ ఏర్పడింది. దయచేసి మీ అడ్మినిస్ట్రేటర్‌ను సంప్రదించండి.</translation>
 <translation id="1140351953533677694">మీ బ్లూటూత్‌ను, క్రమానుసార పరికరాలను యాక్సెస్‌ చేయడం</translation>
@@ -982,6 +983,7 @@
 <translation id="2131077480075264">"<ph name="APP_NAME" />"ను అనుమతించనందున దీన్ని ఇన్‌స్టాల్ చేయడం సాధ్యపడలేదు "<ph name="IMPORT_NAME" />"</translation>
 <translation id="21354425047973905">పిన్‌లను దాస్తుంది</translation>
 <translation id="2135456203358955318">డాక్ చేయబడిన మాగ్నిఫైయర్</translation>
+<translation id="2135468118189259524">Google ఏ డేటాను, ఎందుకు సేకరిస్తుంది అనే దాని గురించి <ph name="BEGIN_LINK" />policies.google.com<ph name="END_LINK" />లో తెలుసుకోండి.</translation>
 <translation id="2135787500304447609">&amp;మళ్ళీ ప్రారంభించు</translation>
 <translation id="2136372518715274136">కొత్త పాస్‌వర్డ్‌ను నమోదు చేయండి</translation>
 <translation id="2136476978468204130">మీరు నమోదు చేసిన రహస్య పదబంధం తప్పు</translation>
@@ -3638,6 +3640,7 @@
 <translation id="5307030433605830021">మూలాధారానికి మద్దతు లేదు</translation>
 <translation id="5308380583665731573">కనెక్ట్ చేయండి</translation>
 <translation id="5310281978693206542">లింక్‌ను మీ పరికరాలకు పంపండి</translation>
+<translation id="531118851858162334">Google సర్వీస్‌లను ఉపయోగించిన మీ మునుపటి యాక్టివిటీ ఆధారంగా మీరు ఈ ఐటెమ్‌ను చూస్తున్నారు. <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />లో మీరు మీ డేటాను చూడవచ్చు, తొలగించవచ్చు, మీ సెట్టింగ్‌లను మార్చవచ్చు.</translation>
 <translation id="5311304534597152726">ఇలా సైన్ ఇన్ చేస్తున్నారు</translation>
 <translation id="5311565231560644461">మీ వర్చువల్ రియాలిటీ పరికరాలను, డేటాను ఉపయోగించడానికి సైట్‌లను అనుమతించవద్దు</translation>
 <translation id="5314381603623123224">Chrome యొక్క సేవా నిబంధనలు మార్చి 31న మారుతున్నాయి</translation>
@@ -6219,6 +6222,7 @@
 <translation id="8378714024927312812">మీ సంస్థ ద్వారా నిర్వహించబడుతున్నవి</translation>
 <translation id="8379878387931047019">ఈ వెబ్‌సైట్ అభ్యర్థించిన భద్రతా కీ రకానికి ఈ పరికరం మద్దతు ఇవ్వదు</translation>
 <translation id="8379991678458444070">ఈ పేజీని బుక్‌మార్క్ చేయడం ద్వారా ఇక్కడికి క్షణాల్లో తిరిగి రండి</translation>
+<translation id="8380266723152870797">విండో పేరు</translation>
 <translation id="8382384117483909115">{NUM_TABS,plural, =1{ట్యాబ్‌ను తర్వాత చదవండి}other{ట్యాబ్‌లను తర్వాత చదవండి}}</translation>
 <translation id="8382913212082956454">&amp;ఇమెయిల్ చిరునామాను కాపీ చేయండి</translation>
 <translation id="8386091599636877289">విధానం కనుగొనబడలేదు.</translation>
@@ -6383,6 +6387,7 @@
 <translation id="8592141010104017453">నోటిఫికేషన్‌లను అస్సలు చూపవద్దు</translation>
 <translation id="859246725979739260">మీ లొకేషన్‌ను యాక్సెస్ చేయనివ్వకుండా ఈ సైట్ బ్లాక్ చేయబడింది.</translation>
 <translation id="8593121833493516339">వినియోగం &amp; విశ్లేషణల డేటాను పంపండి. సమస్య విశ్లేషణ, పరికరం, యాప్ వినియోగ డేటాను ఆటోమేటిక్‌గా Googleకి పంపడం ద్వారా మీ చిన్నారి Android అనుభవాన్ని మెరుగుపరచడంలో సహాయపడండి. ఇది మీ చిన్నారి గురించి గుర్తించడానికి ఉపయోగించబడదు, ఇది కేవలం సిస్టమ్, యాప్ స్థిరత్వానికి, ఇతర మెరుగుదలలకు సహాయపడుతుంది. కొంత సముదాయ డేటా కూడా Google యాప్‌లకు, అలాగే Android డెవలపర్‌ల లాంటి భాగస్వాములకు సహాయపడుతుంది. మీ చిన్నారి కోసం అదనపు వెబ్ &amp; యాప్ కార్యకలాపాన్ని ఆన్ చేసినట్లయితే, ఈ డేటా వారి Google ఖాతాలో సేవ్ కావచ్చు. <ph name="BEGIN_LINK1" />మరింత తెలుసుకోండి<ph name="END_LINK1" /></translation>
+<translation id="8593735906501637689"><ph name="MODULE_TITLE" /> తీసివేయబడింది</translation>
 <translation id="8594908476761052472">వీడియోను క్యాప్చర్ చేయి</translation>
 <translation id="8596540852772265699">అనుకూల ఫైళ్ళు</translation>
 <translation id="8597845839771543242">లక్షణ ఆకృతి:</translation>
diff --git a/chrome/app/resources/generated_resources_th.xtb b/chrome/app/resources/generated_resources_th.xtb
index f18c333..d874db4 100644
--- a/chrome/app/resources/generated_resources_th.xtb
+++ b/chrome/app/resources/generated_resources_th.xtb
@@ -122,6 +122,7 @@
 <translation id="1134009406053225289">เปิดในหน้าต่างที่ไม่ระบุตัวตน</translation>
 <translation id="1136179794690960030"><ph name="EMOJI_NAME" /> <ph name="EMOJI_INDEX" /> จาก <ph name="EMOJI_COUNT" /></translation>
 <translation id="1136712381129578788">คีย์ความปลอดภัยถูกล็อกเพราะคุณป้อน PIN ไม่ถูกต้องหลายครั้งเกินไป หากต้องการปลดล็อก ให้ถอดคีย์ความปลอดภัยออกแล้วเสียบกลับเข้าไปใหม่</translation>
+<translation id="1137589305610962734">ข้อมูลชั่วคราว</translation>
 <translation id="1137673463384776352">เปิดลิงก์ใน <ph name="APP" /></translation>
 <translation id="1139343347646843679">เกิดข้อผิดพลาดขณะกำหนดค่า Linux โปรดติดต่อผู้ดูแลระบบ</translation>
 <translation id="1140351953533677694">เข้าถึงอุปกรณ์บลูทูธและอุปกรณ์ซีเรียล</translation>
@@ -227,6 +228,7 @@
 <translation id="1249643471736608405"><ph name="PLUGIN_NAME" /> ถูกบล็อกเนื่องจากเลิกใช้งานไปแล้ว</translation>
 <translation id="1251366534849411931">เครื่องหมายวงเล็บปีกกาเปิดที่ต้องมี: <ph name="ERROR_LINE" /></translation>
 <translation id="1251480783646955802">การดำเนินการนี้จะล้างข้อมูลที่เว็บไซต์และแอปต่างๆ จัดเก็บไว้รวมทั้งสิ้น <ph name="TOTAL_USAGE" /></translation>
+<translation id="125220115284141797">ค่าเริ่มต้น</translation>
 <translation id="1252987234827889034">เกิดข้อผิดพลาดของโปรไฟล์</translation>
 <translation id="1254593899333212300">เชื่อมต่ออินเทอร์เน็ตโดยตรง</translation>
 <translation id="1259152067760398571">เรียกใช้การตรวจสอบความปลอดภัยเมื่อวานนี้</translation>
@@ -318,6 +320,7 @@
 <translation id="1361872463926621533">เปิดเสียงเมื่อเริ่มใช้</translation>
 <translation id="1362865166188278099">ปัญหาด้านกลไก ตรวจสอบเครื่องพิมพ์</translation>
 <translation id="1363585519747660921">เครื่องพิมพ์ USB ต้องการการกำหนดค่า</translation>
+<translation id="1364664799726141130">บัญชีที่คุณยืนยันไม่ได้รับอนุญาตให้เข้าถึงอุปกรณ์นี้ โปรดยืนยันบัญชี <ph name="ACCOUNT" /> เพื่อปลดล็อกเซสชัน</translation>
 <translation id="1365180424462182382"><ph name="BEGIN_LINK" />เบราว์เซอร์ของคุณได้รับการจัดการ<ph name="END_LINK" />โดย <ph name="ENROLLMENT_DOMAIN" /></translation>
 <translation id="1367951781824006909">เลือกไฟล์</translation>
 <translation id="1369149969991017342">การเข้าถึงด้วยสวิตช์ (ควบคุมคอมพิวเตอร์ด้วยสวิตช์เพียง 1-2 ตัว)</translation>
@@ -426,6 +429,7 @@
 <translation id="1486096554574027028">ค้นหารหัสผ่าน</translation>
 <translation id="1487335504823219454">เปิด - การตั้งค่าที่กำหนดเอง</translation>
 <translation id="1489664337021920575">เลือกตัวเลือกอื่น</translation>
+<translation id="1492417797159476138">คุณบันทึกชื่อผู้ใช้นี้สำหรับเว็บไซต์นี้แล้ว</translation>
 <translation id="1493892686965953381">กำลังรอ <ph name="LOAD_STATE_PARAMETER" />...</translation>
 <translation id="1495486559005647033"><ph name="NUM_PRINTERS" /> อุปกรณ์อื่นๆ ที่พร้อมใช้งาน</translation>
 <translation id="1495677929897281669">กลับไปที่แท็บ</translation>
@@ -651,6 +655,7 @@
 <translation id="173628468822554835">รับทราบ โดยค่าเริ่มต้นแล้ว เว็บไซต์ใหม่ที่คุณเข้าชมจะไม่ส่งการแจ้งเตือนให้คุณ</translation>
 <translation id="1736419249208073774">สำรวจ</translation>
 <translation id="1737968601308870607">ข้อบกพร่องของไฟล์</translation>
+<translation id="174123615272205933">กำหนดเอง</translation>
 <translation id="1741314857973421784">ต่อไป</translation>
 <translation id="1743570585616704562">ไม่รู้จัก</translation>
 <translation id="1743970419083351269">ปิดแถบดาวน์โหลด</translation>
@@ -685,6 +690,7 @@
 <translation id="1776712937009046120">เพิ่มผู้ใช้</translation>
 <translation id="1776883657531386793"><ph name="OID" />: <ph name="INFO" /></translation>
 <translation id="1778457539567749232">ทำเครื่องหมายว่ายังไม่อ่าน</translation>
+<translation id="1779468444204342338">ขั้นต่ำ</translation>
 <translation id="1779652936965200207">โปรดป้อนรหัสผ่านนี้บน "<ph name="DEVICE_NAME" />":</translation>
 <translation id="177989070088644880">แอป (<ph name="ANDROID_PACKAGE_NAME" />)</translation>
 <translation id="1780152987505130652">ปิดกลุ่ม</translation>
@@ -977,6 +983,7 @@
 <translation id="2131077480075264">ไม่สามารถติดตั้ง "<ph name="APP_NAME" />" เนื่องจากไม่ได้รับอนุญาตจาก "<ph name="IMPORT_NAME" />"</translation>
 <translation id="21354425047973905">ซ่อน PIN</translation>
 <translation id="2135456203358955318">แว่นขยายหน้าจอบางส่วน</translation>
+<translation id="2135468118189259524">อ่านเกี่ยวกับข้อมูลที่ Google รวบรวมและเหตุผลของการรวบรวมข้อมูลได้ที่ <ph name="BEGIN_LINK" />policies.google.com<ph name="END_LINK" /></translation>
 <translation id="2135787500304447609">&amp;ทำต่อ</translation>
 <translation id="2136372518715274136">ป้อนรหัสผ่านใหม่</translation>
 <translation id="2136476978468204130">รหัสผ่านที่คุณป้อนไม่ถูกต้อง</translation>
@@ -1458,6 +1465,7 @@
 <translation id="2688196195245426394">เกิดข้อผิดพลาดขณะลงทะเบียนอุปกรณ์กับเซิร์ฟเวอร์: <ph name="CLIENT_ERROR" /></translation>
 <translation id="2690024944919328218">แสดงตัวเลือกภาษา</translation>
 <translation id="2691385045260836588">รุ่น</translation>
+<translation id="2691440343905273290">เปลี่ยนการตั้งค่าการป้อนข้อมูล</translation>
 <translation id="2693176596243495071">อ๊ะ! เกิดข้อผิดพลาดที่ไม่รู้จัก โปรดลองอีกครั้งภายหลังหรือติดต่อผู้ดูแลระบบหากยังมีปัญหานี้อยู่</translation>
 <translation id="2695749433451188613">โปรโตคอลการพิมพ์ผ่านอินเทอร์เน็ต (HTTPS)</translation>
 <translation id="2699911226086014512">กำหนด PIN ไม่สำเร็จและรหัสข้อผิดพลาดคือ <ph name="RETRIES" /></translation>
@@ -2074,6 +2082,7 @@
 <translation id="3440663250074896476">การดำเนินการเพิ่มเติมสำหรับ <ph name="BOOKMARK_NAME" /></translation>
 <translation id="3440761377721825626">ถามเมื่อเว็บไซต์ต้องการใช้ปลั๊กอินเพื่อเข้าถึงคอมพิวเตอร์ของคุณ</translation>
 <translation id="3441653493275994384">หน้าจอ</translation>
+<translation id="3441663102605358937">ลงชื่อเข้าใช้ <ph name="ACCOUNT" /> อีกครั้งเพื่อยืนยันบัญชีนี้</translation>
 <translation id="3445047461171030979">คำตอบด่วนของ Google Assistant</translation>
 <translation id="3445925074670675829">อุปกรณ์ USB-C</translation>
 <translation id="3446274660183028131">โปรดเปิด Parallels Desktop เพื่อติดตั้ง Windows</translation>
@@ -2825,6 +2834,7 @@
 <translation id="4312866146174492540">บล็อก (ค่าเริ่มต้น)</translation>
 <translation id="4314815835985389558">จัดการการซิงค์</translation>
 <translation id="4316850752623536204">เว็บไซต์นักพัฒนาซอฟต์แวร์</translation>
+<translation id="4317820549299924617">ยืนยันไม่สำเร็จ</translation>
 <translation id="4320177379694898372">ไม่มีการเชื่อมต่ออินเทอร์เน็ต</translation>
 <translation id="4322394346347055525">ปิดแท็บอื่นๆ</translation>
 <translation id="4324577459193912240">ไฟล์ไม่สมบูรณ์</translation>
@@ -3630,6 +3640,7 @@
 <translation id="5307030433605830021">ไม่รองรับแหล่งที่มา</translation>
 <translation id="5308380583665731573">เชื่อมต่อ</translation>
 <translation id="5310281978693206542">ส่งลิงก์ไปที่อุปกรณ์ของคุณ</translation>
+<translation id="531118851858162334">คุณเห็นรายการนี้เนื่องจากระบบอิงตามกิจกรรมที่คุณทำก่อนหน้านี้ขณะใช้บริการของ Google คุณดูหรือลบข้อมูลดังกล่าวและเปลี่ยนการตั้งค่าได้ที่ <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /></translation>
 <translation id="5311304534597152726">กำลังลงชื่อเข้าใช้ในชื่อ</translation>
 <translation id="5311565231560644461">ไม่อนุญาตให้เว็บไซต์ใช้อุปกรณ์และข้อมูล Virtual Reality ของคุณ</translation>
 <translation id="5314381603623123224">ข้อกำหนดในการให้บริการของ Chrome จะมีการเปลี่ยนแปลงในวันที่ 31 มีนาคม</translation>
@@ -3670,6 +3681,7 @@
 <translation id="5362741141255528695">เลือกไฟล์กุญแจส่วนตัว</translation>
 <translation id="5363109466694494651">Powerwash และเปลี่ยนกลับ</translation>
 <translation id="5365881113273618889">โฟลเดอร์ที่คุณเลือกมีไฟล์ที่ละเอียดอ่อน แน่ใจไหมว่าต้องการให้สิทธิ์การเข้าถึงในการเขียนโฟลเดอร์นี้อย่างถาวรแก่ "<ph name="APP_NAME" />"</translation>
+<translation id="536638840841140142">ไม่มี</translation>
 <translation id="5368720394188453070">โทรศัพท์ล็อกอยู่ โปรดปลดล็อกเพื่อเข้าใช้งาน</translation>
 <translation id="5368779022775404937">ลงชื่อเข้าใช้ <ph name="REALM" /></translation>
 <translation id="5369491905435686894">เปิดใช้การเร่งความเร็วเมาส์</translation>
@@ -4823,6 +4835,7 @@
 <translation id="6748465660675848252">คุณสามารถดำเนินการต่อได้ แต่ระบบจะกู้คืนข้อมูลที่ซิงค์และการตั้งค่าเท่านั้น ข้อมูลในเครื่องทั้งหมดจะสูญหาย</translation>
 <translation id="6749006854028927059">เว็บไซต์จะใช้คุกกี้เพื่อดูกิจกรรมการท่องเว็บของคุณในเว็บไซต์ต่างๆ ไม่ได้ เช่น เพื่อปรับโฆษณาตามโปรไฟล์ของคุณ ฟีเจอร์ในเว็บไซต์บางแห่งอาจใช้งานไม่ได้</translation>
 <translation id="6750757184909117990">ปิดใช้เครือข่ายมือถือ</translation>
+<translation id="6750946710563435348">ใช้ชื่อผู้ใช้ชื่ออื่น</translation>
 <translation id="6751344591405861699"><ph name="WINDOW_TITLE" /> (โหมดไม่ระบุตัวตน)</translation>
 <translation id="6757101664402245801">คัดลอก URL แล้ว</translation>
 <translation id="6758056191028427665">แจ้งให้เราทราบถึงความพึงพอใจ</translation>
@@ -5341,6 +5354,7 @@
 <translation id="7377451353532943397">บล็อกการเข้าถึงเซ็นเซอร์ต่อไป</translation>
 <translation id="73786666777299047">เปิด Chrome เว็บสโตร์</translation>
 <translation id="7378812711085314936">ขอเชื่อมต่อข้อมูล</translation>
+<translation id="7380622428988553498">ชื่ออุปกรณ์มีอักขระที่ไม่ถูกต้อง</translation>
 <translation id="7380768571499464492">อัปเดต <ph name="PRINTER_NAME" /> แล้ว</translation>
 <translation id="7384687527486377545">การทำซ้ำอัตโนมัติของแป้นพิมพ์</translation>
 <translation id="7385854874724088939">พบปัญหาขณะสั่งพิมพ์ กรุณาตรวจสอบเครื่องพิมพ์และลองใหม่อีกครั้ง</translation>
@@ -5389,6 +5403,7 @@
 <translation id="7434969625063495310">เพิ่มเซิร์ฟเวอร์การพิมพ์ไม่ได้ โปรดตรวจสอบการกำหนดค่าของเซิร์ฟเวอร์แล้วลองอีกครั้ง</translation>
 <translation id="7436921188514130341">แย่จัง! เกิดข้อผิดพลาดในระหว่างการตั้งชื่อ</translation>
 <translation id="7438976808740265764">เราจะไม่รองรับ Flash Player อีกต่อไปหลังจากเดือนธันวาคม 2020</translation>
+<translation id="7439519621174723623">เพิ่มชื่ออุปกรณ์เพื่อดำเนินการต่อ</translation>
 <translation id="7441736921018636843">หากต้องการเปลี่ยนการตั้งค่านี้ ให้<ph name="BEGIN_LINK" />รีเซ็ตการซิงค์<ph name="END_LINK" />เพื่อนำรหัสผ่านการซิงค์ออก</translation>
 <translation id="7441830548568730290">ผู้ใช้รายอื่น</translation>
 <translation id="7442465037756169001">พร้อมตั้งค่าชุดฮาร์ดแวร์ Hangouts Meet แล้ว</translation>
@@ -5630,6 +5645,7 @@
 <translation id="7717134585801378441">เว็บไซต์ขอตำแหน่งของคุณได้ (แนะนำ)</translation>
 <translation id="7717845620320228976">ตรวจสอบการอัปเดต</translation>
 <translation id="7719367874908701697">การซูมหน้า</translation>
+<translation id="7719588063158526969">ชื่ออุปกรณ์ยาวเกินไป</translation>
 <translation id="7721179060400456005">อนุญาตให้ขยายการแสดงหน้าต่างไปยังหลายหน้าจอ</translation>
 <translation id="7722040605881499779">จำเป็นสำหรับอัปเดต: <ph name="NECESSARY_SPACE" /></translation>
 <translation id="7724603315864178912">ตัด</translation>
@@ -5934,6 +5950,7 @@
 <translation id="8049705080247101012">Google ได้ตั้งค่าสถานะ "<ph name="EXTENSION_NAME" />" ว่าเป็นอันตราย และป้องกันไม่ให้มีการติดตั้งแล้ว</translation>
 <translation id="8049948037269924837">การเลื่อนทัชแพดแบบย้อนกลับ</translation>
 <translation id="8050038245906040378">การรับรองรหัสเชิงพาณิชย์ของ Microsoft</translation>
+<translation id="8050191834453426339">ยืนยันอีกครั้ง</translation>
 <translation id="8051193500142930381">ฟีเจอร์ที่ต้องใช้กล้องจะไม่ทำงาน</translation>
 <translation id="8051390370038326517">อนุญาตให้ <ph name="HOST" /> ควบคุมอุปกรณ์ MIDI โดยสมบูรณ์เสมอ</translation>
 <translation id="8053278772142718589">ไฟล์ PKCS #12</translation>
@@ -6209,6 +6226,7 @@
 <translation id="8378714024927312812">จัดการโดยองค์กร</translation>
 <translation id="8379878387931047019">อุปกรณ์นี้ไม่รองรับประเภทคีย์ความปลอดภัยที่เว็บไซต์นี้กำหนดไว้</translation>
 <translation id="8379991678458444070">บุ๊กมาร์กแท็บนี้ไว้เพื่อให้กลับมาได้อย่างรวดเร็ว</translation>
+<translation id="8380266723152870797">ชื่อหน้าต่าง</translation>
 <translation id="8382384117483909115">{NUM_TABS,plural, =1{อ่านแท็บนี้ภายหลัง}other{อ่านแท็บเหล่านี้ภายหลัง}}</translation>
 <translation id="8382913212082956454">คัดลอก&amp;ที่อยู่อีเมล</translation>
 <translation id="8386091599636877289">ไม่พบนโยบาย</translation>
@@ -6373,6 +6391,7 @@
 <translation id="8592141010104017453">ไม่ต้องแสดงการแจ้งเตือนใดๆ</translation>
 <translation id="859246725979739260">เว็บไซต์นี้ถูกบล็อกไม่ให้เข้าถึงตำแหน่งของคุณ</translation>
 <translation id="8593121833493516339">ส่งข้อมูลการใช้งานและการวินิจฉัย ช่วยปรับปรุงประสบการณ์การใช้งาน Android ของบุตรหลานให้ดีขึ้นด้วยการส่งข้อมูลการวินิจฉัย อุปกรณ์ และการใช้งานแอปไปยัง Google โดยอัตโนมัติ โดยจะไม่มีการใช้ข้อมูลนี้ในการระบุชื่อบุตรหลานของคุณ และจะช่วยปรับปรุงความเสถียรของแอปและระบบ และอื่นๆ ข้อมูลที่รวบรวมมาบางส่วนจะมีประโยชน์ต่อแอปและพาร์ทเนอร์ของ Google ด้วย เช่น นักพัฒนาซอฟต์แวร์ Android หากเปิดการตั้งค่ากิจกรรมเพิ่มเติมบนเว็บและแอปสำหรับบุตรหลาน ระบบอาจบันทึกข้อมูลนี้ไว้ในบัญชี Google ของบุตรหลาน <ph name="BEGIN_LINK1" />ดูข้อมูลเพิ่มเติม<ph name="END_LINK1" /></translation>
+<translation id="8593735906501637689">นำ <ph name="MODULE_TITLE" /> ออกแล้ว</translation>
 <translation id="8594908476761052472">จับภาพวิดีโอ</translation>
 <translation id="8596540852772265699">ไฟล์ที่กำหนดเอง</translation>
 <translation id="8597845839771543242">รูปแบบของคุณสมบัติ:</translation>
diff --git a/chrome/app/resources/generated_resources_ur.xtb b/chrome/app/resources/generated_resources_ur.xtb
index 01814f8..1a6ded7 100644
--- a/chrome/app/resources/generated_resources_ur.xtb
+++ b/chrome/app/resources/generated_resources_ur.xtb
@@ -228,6 +228,7 @@
 <translation id="1249643471736608405"><ph name="PLUGIN_NAME" /> فرسودہ ہونے کی وجہ سے مسدود کر دیا گیا</translation>
 <translation id="1251366534849411931">ابتدائی خمیدہ قوسین کی توقع ہے: <ph name="ERROR_LINE" /></translation>
 <translation id="1251480783646955802">اس سے سائٹس اور انسٹال کردہ ایپس کا <ph name="TOTAL_USAGE" /> اسٹور کردہ ڈیٹا صاف ہو جائے گا</translation>
+<translation id="125220115284141797">ڈیفالٹ</translation>
 <translation id="1252987234827889034">پروفائل کی خرابی پیش آگئی</translation>
 <translation id="1254593899333212300">براہ راست انٹرنیٹ کنکشن</translation>
 <translation id="1259152067760398571">سیفٹی چیک گزشتہ روز کیا گیا</translation>
@@ -319,6 +320,7 @@
 <translation id="1361872463926621533">اسٹارٹ اپ پر آواز چلائیں</translation>
 <translation id="1362865166188278099">مکینیکل مسئلہ۔ پرنٹر چیک کریں</translation>
 <translation id="1363585519747660921">‏USB پرنٹر کو کنفیگریشن کی ضرورت ہے</translation>
+<translation id="1364664799726141130">آپ کے توثیق کردہ اکاؤنٹ کو اس آلے تک رسائی حاصل کرنے کا اختیار نہیں ہے۔ براہ کرم یقینی بنائیں کہ سیشن کو غیر مقفل کرنے کیلئے آپ <ph name="ACCOUNT" /> کی توثیق کر رہے ہیں۔</translation>
 <translation id="1365180424462182382"><ph name="ENROLLMENT_DOMAIN" /> آپ کے <ph name="BEGIN_LINK" />براؤزر کا نظم کرتا ہے<ph name="END_LINK" /></translation>
 <translation id="1367951781824006909">ایک فائل منتخب کریں</translation>
 <translation id="1369149969991017342">سوئچ رسائی (صرف ایک یا دو سوئچز کے ساتھ کمپیوٹر کو کنٹرول کریں)</translation>
@@ -427,6 +429,7 @@
 <translation id="1486096554574027028">پاس ورڈز تلاش کریں</translation>
 <translation id="1487335504823219454">آن - حسب ضرورت ترتیبات</translation>
 <translation id="1489664337021920575">دوسرے اختیار کا انتخاب کریں</translation>
+<translation id="1492417797159476138">آپ نے پہلے ہی اس سائٹ کے لئے یہ صارف نام محفوظ کر لیا ہے</translation>
 <translation id="1493892686965953381"><ph name="LOAD_STATE_PARAMETER" /> کیلئے منتظر…</translation>
 <translation id="1495486559005647033"><ph name="NUM_PRINTERS" /> دیگر دستیاب آلات۔</translation>
 <translation id="1495677929897281669">ٹیب پر واپس جائیں</translation>
@@ -652,6 +655,7 @@
 <translation id="173628468822554835">سمجھ آ گئی۔ بذریعہ ڈیفالٹ، جن نئی سائٹس کا آپ ملاحظہ کرتے ہیں وہ آپ کو اطلاعات نہیں بھیجیں گی۔</translation>
 <translation id="1736419249208073774">دریافت کریں</translation>
 <translation id="1737968601308870607">فائل بگ</translation>
+<translation id="174123615272205933">حسب ضرورت</translation>
 <translation id="1741314857973421784">جاری رکھیں</translation>
 <translation id="1743570585616704562">تسلیم شدہ نہیں ہے</translation>
 <translation id="1743970419083351269">ڈاؤن لوڈز بار بند کریں</translation>
@@ -686,6 +690,7 @@
 <translation id="1776712937009046120">صارف کو شامل کریں</translation>
 <translation id="1776883657531386793"><ph name="OID" />: <ph name="INFO" /></translation>
 <translation id="1778457539567749232">بغیر پڑھا ہوا کے بطور نشان زد کریں</translation>
+<translation id="1779468444204342338">کم سے کم</translation>
 <translation id="1779652936965200207">براہ کرم "<ph name="DEVICE_NAME" />" پر یہ پاس کی درج کریں۔</translation>
 <translation id="177989070088644880">(<ph name="ANDROID_PACKAGE_NAME" />) ایپ</translation>
 <translation id="1780152987505130652">گروپ بند کریں</translation>
@@ -1459,6 +1464,7 @@
 <translation id="2688196195245426394">سرور کے ساتھ آلہ رجسٹر کرتے وقت خرابی پیش آ گئی: <ph name="CLIENT_ERROR" />۔</translation>
 <translation id="2690024944919328218">زبان کے اختیارات دکھائیں</translation>
 <translation id="2691385045260836588">ماڈل</translation>
+<translation id="2691440343905273290">ان پٹ ترتیبات تبدیل کریں</translation>
 <translation id="2693176596243495071">افوہ!  ایک نامعلوم خرابی پیش آ گئی۔ مسئلہ برقرار رہنے پر براہ کرم بعد میں دوبارہ کوشش کریں یا اپنے منتظم سے رابطہ کریں۔</translation>
 <translation id="2695749433451188613">‏انٹرنیٹ پرنٹنگ پروٹوکول (HTTPS)</translation>
 <translation id="2699911226086014512">‏کوڈ <ph name="RETRIES" /> کے ساتھ PIN کی کارروائی ناکام ہو گئی۔</translation>
@@ -2075,6 +2081,7 @@
 <translation id="3440663250074896476"><ph name="BOOKMARK_NAME" /> کے لیے مزید کارروائیاں</translation>
 <translation id="3440761377721825626">جب کوئی سائٹ آپ کے کمپیوٹر تک رسائی حاصل کرنے کیلئے ایک پلگ ان استعمال کرنا چاہتی ہو تو پوچھیں</translation>
 <translation id="3441653493275994384">اسکرین</translation>
+<translation id="3441663102605358937">اس اکاؤنٹ کی توثیق کرنے کیلئے <ph name="ACCOUNT" /> میں دوبارہ سائن ان کریں</translation>
 <translation id="3445047461171030979">‏Google اسسٹنٹ کے فوری جوابات</translation>
 <translation id="3445925074670675829">‏USB-C آلہ</translation>
 <translation id="3446274660183028131">‏براہ کرم Windows انسٹال کرنے کیلئے Parallels ڈیسک ٹاپ شروع کریں۔</translation>
@@ -2826,6 +2833,7 @@
 <translation id="4312866146174492540">مسدود کریں (ڈیفالٹ)</translation>
 <translation id="4314815835985389558">مطابقت پذیری کا نظم کريں</translation>
 <translation id="4316850752623536204">ڈیولپر کی ویب سائٹ</translation>
+<translation id="4317820549299924617">توثیق کامیاب نہیں تھی</translation>
 <translation id="4320177379694898372">کوئی انٹرنیٹ کنکشن نہیں ہے</translation>
 <translation id="4322394346347055525">دیگر ٹیبز بند کریں</translation>
 <translation id="4324577459193912240">فائل نا مکمل ہے</translation>
@@ -3671,6 +3679,7 @@
 <translation id="5362741141255528695">نجی کلید والی فائل منتخب کریں۔</translation>
 <translation id="5363109466694494651">پاور واش کریں اور لوٹیں</translation>
 <translation id="5365881113273618889">آپ کے منتخب کردہ فولڈر میں حساس فائلز شامل ہیں۔ کیا آپ واقعی "<ph name="APP_NAME" />" کو اس فولڈر میں لکھنے کی مستقل رسائی دینا چاہتے ہیں؟</translation>
+<translation id="536638840841140142">کوئی نہیں</translation>
 <translation id="5368720394188453070">آپ کا فون مقفل ہے۔ داخل ہونے کیلئے اسے غیر مقفل کریں۔</translation>
 <translation id="5368779022775404937"><ph name="REALM" /> میں سائن ان کریں</translation>
 <translation id="5369491905435686894">ماؤس ایکسلریشن فعال کریں</translation>
@@ -4824,6 +4833,7 @@
 <translation id="6748465660675848252">آپ آگے بڑھ سکتے ہیں لیکن آپ کے صرف مطابقت پذیر ڈیٹا اور ترتیبات کو بحال کیا جائے گا۔ سبھی مقامی ڈیٹا ضائع ہو جائے گا۔</translation>
 <translation id="6749006854028927059">سائٹس کوکیز کے ذریعے مختلف سائٹس پر، مثال کے طور پر، اشتہارات کو ذاتی نوعیت کا بنانے کے لیے، آپ کی براؤزنگ کی سرگرمی نہیں دیکھ سکتی ہیں۔ کچھ سائٹس پر خصوصیات میں خلل ہو سکتا ہے۔</translation>
 <translation id="6750757184909117990">سیلولر کو غیرفعال کریں</translation>
+<translation id="6750946710563435348">دوسرے صارف کا نام استعمال کریں</translation>
 <translation id="6751344591405861699"><ph name="WINDOW_TITLE" /> (پوشیدگی)</translation>
 <translation id="6757101664402245801">‏URL کاپی ہوگیا</translation>
 <translation id="6758056191028427665">ہماری کارکردگی کے بارے میں ہمیں بتائیں۔</translation>
@@ -5342,6 +5352,7 @@
 <translation id="7377451353532943397">سینسر تک رسائی کو مسدود کرنا جاری رکھیں</translation>
 <translation id="73786666777299047">‏Chrome ویب اسٹور کھولیں</translation>
 <translation id="7378812711085314936">ڈیٹا کنکشن حاصل کریں</translation>
+<translation id="7380622428988553498">آلے کے نام میں غلط حروف مشتمل ہے</translation>
 <translation id="7380768571499464492">اپ ڈیٹ کردہ <ph name="PRINTER_NAME" /></translation>
 <translation id="7384687527486377545">کی بورڈ کا خودکار اعادہ</translation>
 <translation id="7385854874724088939">پرنٹ کرنے کی کوشش کرتے وقت کچھ غلط ہوگیا۔  براہ کرم اپنا پرنٹر چیک کریں اور دوبارہ کوشش کریں۔</translation>
@@ -5390,6 +5401,7 @@
 <translation id="7434969625063495310">پرنٹ سرور شامل نہیں کر سکا۔ براہ کرم سرور کی کنفیگریشن کو چیک کریں اور دوبارہ کوشش کریں۔</translation>
 <translation id="7436921188514130341">افوہ! نام کی تبدیلی کے دوران ایک خرابی تھی۔</translation>
 <translation id="7438976808740265764">‏دسمبر 2020 کے بعد Flash Player تعاون یافتہ نہیں رہے گا۔</translation>
+<translation id="7439519621174723623">جاری رکھنے کیلئے ایک آلے کا نام شامل کریں</translation>
 <translation id="7441736921018636843">اس ترتیب کو تبدیل کرنے کے لیے، اپنی مطابقت پذیری کے پاس فریز کو ہٹانے کے لیے <ph name="BEGIN_LINK" />مطابقت پذیری کو ری سیٹ کریں<ph name="END_LINK" /></translation>
 <translation id="7441830548568730290">دیگر صارفین</translation>
 <translation id="7442465037756169001">‏آپ کا Hangouts Meet hardware سیٹ اپ کیلئے تیار ہے۔</translation>
@@ -5631,6 +5643,7 @@
 <translation id="7717134585801378441">سائٹس آپ کا مقام پوچھ سکتی ہیں (تجویز کردہ ہے)</translation>
 <translation id="7717845620320228976">اپ ڈیٹس چیک کریں</translation>
 <translation id="7719367874908701697">صفحہ کا زوم</translation>
+<translation id="7719588063158526969">آلے کا نام بہت لمبا ہے</translation>
 <translation id="7721179060400456005">ونڈوز کو ڈسپلیز پھیلانے کی اجازت دیں</translation>
 <translation id="7722040605881499779">اپ ڈیٹ کرنے کی ضرورت ہے: <ph name="NECESSARY_SPACE" /></translation>
 <translation id="7724603315864178912">کٹ کریں</translation>
@@ -5935,6 +5948,7 @@
 <translation id="8049705080247101012">‏Google نے "<ph name="EXTENSION_NAME" />" پر نقصان دہ کے بطور پرچم لگایا ہے اور انسٹالیشن کو روک دیا گیا ہے</translation>
 <translation id="8049948037269924837">ٹچ پیڈ کی معکوس اسکرولنگ</translation>
 <translation id="8050038245906040378">‏Microsoft تجارتی کوڈ سائننگ</translation>
+<translation id="8050191834453426339">دوبارہ توثیق کریں</translation>
 <translation id="8051193500142930381">وہ خصوصیات کام نہیں کریں گی جن کے لیے کیمرا کی ضرورت ہوتی ہے</translation>
 <translation id="8051390370038326517">‏<ph name="HOST" /> کو ہمیشہ MIDI آلات کے مکمل کنٹرول حاصل کرنے کی اجازت دیں</translation>
 <translation id="8053278772142718589">‏PKCS #12 فائلیں</translation>
diff --git a/chrome/app/resources/google_chrome_strings_bs.xtb b/chrome/app/resources/google_chrome_strings_bs.xtb
index 5a122d0..da18a052 100644
--- a/chrome/app/resources/google_chrome_strings_bs.xtb
+++ b/chrome/app/resources/google_chrome_strings_bs.xtb
@@ -23,7 +23,7 @@
 <translation id="1553358976309200471">Ažuriraj Chrome</translation>
 <translation id="1587223624401073077">Google Chrome koristi vašu kameru.</translation>
 <translation id="1587325591171447154">Fajl <ph name="FILE_NAME" /> je opasan, pa ga je Chrome blokirao.</translation>
-<translation id="1597911401261118146">Da biste provjerili jesu li vaše zaporke sigurne od povrede podataka i drugih poteškoća sa sigurnošću, <ph name="BEGIN_LINK" />prijavite se na Chrome<ph name="END_LINK" />.</translation>
+<translation id="1597911401261118146">Da provjerite jesu li vaše lozinke zaštićene od narušavanja podataka i drugih sigurnosnih problema, <ph name="BEGIN_LINK" />prijavite se u Chrome<ph name="END_LINK" />.</translation>
 <translation id="1619887657840448962">Kako bi Chrome bio sigurniji, onemogućili smo sljedeću ekstenziju koja nije navedena u <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> i koja je dodana bez vašeg znanja.</translation>
 <translation id="162448658176061655">Chrome jednom sedmično provjerava je li prisutan neželjeni softver. Posljednja provjera: maloprije.</translation>
 <translation id="162629503687514352">Chrome OS nije uspio sinhronizirati vaše lozinke.</translation>
@@ -39,7 +39,7 @@
 <translation id="1734234790201236882">Chrome će sačuvati ovu lozinku u vašem Google računu. Nećete morati da je pamtite.</translation>
 <translation id="174539241580958092">Google Chrome nije mogao sinhronizirati vaše podatke zbog greške prilikom prijave.</translation>
 <translation id="1759842336958782510">Chrome</translation>
-<translation id="1786003790898721085">Obavezno se prijavite na Chrome na uređaju <ph name="TARGET_DEVICE_NAME" /> i nakon toga ponovno pokušajte poslati.</translation>
+<translation id="1786003790898721085">Provjerite jeste li prijavljeni u Chrome na svom uređaju <ph name="TARGET_DEVICE_NAME" /> i pokušajte poslati ponovo.</translation>
 <translation id="1812689907177901597">Isključivanjem ove opcije, možete se prijaviti na Googleove web lokacije poput Gmaila bez prijave u Chrome</translation>
 <translation id="1860536484129686729">Chrome treba odobrenja za pristup vašoj kameri na ovoj web lokaciji</translation>
 <translation id="1873233029667955273">Google Chrome nije vaš zadani preglednik</translation>
@@ -84,7 +84,7 @@
 <translation id="3065168410429928842">Chromeova kartica</translation>
 <translation id="3080151273017101988">Ostavi aplikacije da rade u pozadini kada se Google Chrome zatvori</translation>
 <translation id="3089968997497233615">Dostupna je nova, sigurnija verzija Google Chromea.</translation>
-<translation id="3114643501466072395">Da biste provjerili jesu li vaše druge zaporke sigurne od povrede podataka i drugih poteškoća sa sigurnošću, <ph name="BEGIN_LINK" />prijavite se na Chrome<ph name="END_LINK" />.</translation>
+<translation id="3114643501466072395">Da provjerite jesu li vaše ostale lozinke zaštićene od narušavanja podataka i drugih sigurnosnih problema, <ph name="BEGIN_LINK" />prijavite se u Chrome<ph name="END_LINK" />.</translation>
 <translation id="3127818369811890733">Chrome OS nije uspio sinhronizirati vaše podatke.</translation>
 <translation id="3149510190863420837">Chrome aplikacije</translation>
 <translation id="3360895254066713204">Pomoćnik za Chrome</translation>
@@ -254,7 +254,7 @@
 <translation id="8344083974188970894">{NUM_MINS,plural, =1{Chrome jednom sedmično provjerava je li prisutan neželjeni softver. Posljednja provjera: prije 1 minutu.}one{Chrome jednom sedmično provjerava je li prisutan neželjeni softver. Posljednja provjera: prije {NUM_MINS} minutu.}few{Chrome jednom sedmično provjerava je li prisutan neželjeni softver. Posljednja provjera: prije {NUM_MINS} minute.}other{Chrome jednom sedmično provjerava je li prisutan neželjeni softver. Posljednja provjera: prije {NUM_MINS} minuta.}}</translation>
 <translation id="8370517070665726704">Autorska prava <ph name="YEAR" /> Google LLC. Sva prava su zadržana.</translation>
 <translation id="840084489713044809">Google Chrome želi izvesti vaše lozinke.</translation>
-<translation id="8433638294851456451">Da biste poslali broj s ovog uređaja na svoj Android telefon, prijavite se na Chrome na oba uređaja.</translation>
+<translation id="8433638294851456451">Da pošaljete broj s ovog uređaja na svoj Android telefon, prijavite se u Chrome na oba uređaja.</translation>
 <translation id="8498858610309223613">Upravo je izvršeno posebno sigurnosno ažuriranje za Google Chrome. Sada ga ponovo pokrenite i vratićemo vaše kartice.</translation>
 <translation id="8521348052903287641">Ulazno pravilo da Google Chrome Dev dozvoli mDNS saobraćaj.</translation>
 <translation id="8540666473246803645">Google Chrome</translation>
@@ -274,7 +274,7 @@
 <translation id="884296878221830158">Upravlja i time koja se stranica prikazuje prilikom pokretanja Chromea ili kada se klikne gumb Početna.</translation>
 <translation id="8862326446509486874">Nemate odgovarajuća prava za instalaciju na nivou sistema. Pokušajte ponovo pokrenuti instalaciju kao administrator.</translation>
 <translation id="8914504000324227558">Ponovo pokreni Chrome</translation>
-<translation id="8922193594870374009">Da biste poslali broj s uređaja <ph name="ORIGIN" /> na svoj Android telefon, prijavite se na Chrome na oba uređaja.</translation>
+<translation id="8922193594870374009">Da pošaljete broj s uređaja <ph name="ORIGIN" /> na svoj Android telefon, prijavite se u Chrome na oba uređaja.</translation>
 <translation id="8999208279178790196">{0,plural, =0{Dostupno je ažuriranje Chromea}=1{Dostupno je ažuriranje Chromea}one{Ažuriranje Chromea je dostupno # dan}few{Ažuriranje Chromea je dostupno # dana}other{Ažuriranje Chromea je dostupno # dana}}</translation>
 <translation id="9026991721384951619">Chrome OS nije mogao sinhronizirati vaše podatke jer su podaci o prijavi računa zastarjeli.</translation>
 <translation id="9067395829937117663">Za Google Chrome je potreban Windows 7 ili novija verzija.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_es-419.xtb b/chrome/app/resources/google_chrome_strings_es-419.xtb
index 53dbf79..9e936bf 100644
--- a/chrome/app/resources/google_chrome_strings_es-419.xtb
+++ b/chrome/app/resources/google_chrome_strings_es-419.xtb
@@ -21,6 +21,7 @@
 <translation id="1553358976309200471">Actualizar Chrome</translation>
 <translation id="1587223624401073077">Google Chrome está usando tu cámara.</translation>
 <translation id="1587325591171447154">Chrome bloqueó <ph name="FILE_NAME" /> porque es un archivo peligroso.</translation>
+<translation id="1597911401261118146">Para comprobar que tus contraseñas están a salvo de violaciones de la seguridad de los datos y otros problemas de seguridad, <ph name="BEGIN_LINK" />accede a Chrome<ph name="END_LINK" />.</translation>
 <translation id="1619887657840448962">Para que Chrome sea más seguro, inhabilitamos algunas extensiones que no aparecen en <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> y que posiblemente se hayan agregado sin tu conocimiento.</translation>
 <translation id="162448658176061655">Chrome busca software no deseado una vez a la semana. Última verificación: hace un momento.</translation>
 <translation id="162629503687514352">El Sistema operativo Chrome no pudo sincronizar tus contraseñas.</translation>
@@ -34,6 +35,7 @@
 <translation id="1734234790201236882">Chrome guardará esta contraseña en tu cuenta de Google, por lo que no tendrás que recordarla.</translation>
 <translation id="174539241580958092">Google Chrome no pudo sincronizar los datos porque se produjo un error de acceso.</translation>
 <translation id="1759842336958782510">Chrome</translation>
+<translation id="1786003790898721085">Asegúrate de haber accedido a Chrome en tu <ph name="TARGET_DEVICE_NAME" /> y, luego, intenta enviarlo de nuevo.</translation>
 <translation id="1812689907177901597">Si desactivas esta preferencia, podrás acceder a sitios de Google (como Gmail) sin tener que acceder a Chrome</translation>
 <translation id="1860536484129686729">Chrome necesita permiso para acceder a tu cámara para este sitio</translation>
 <translation id="1873233029667955273">Google Chrome no es tu navegador predeterminado</translation>
@@ -78,6 +80,7 @@
 <translation id="3065168410429928842">Pestaña de Chrome</translation>
 <translation id="3080151273017101988">Seguir ejecutando aplicaciones en segundo plano al cerrar Google Chrome</translation>
 <translation id="3089968997497233615">Hay disponible una versión de Google Chrome más nueva y más segura.</translation>
+<translation id="3114643501466072395">Para comprobar que tus otras contraseñas están a salvo de violaciones de la seguridad de los datos y otros problemas de seguridad, <ph name="BEGIN_LINK" />accede a Chrome<ph name="END_LINK" />.</translation>
 <translation id="3127818369811890733">El Sistema operativo Chrome no pudo sincronizar los datos.</translation>
 <translation id="3149510190863420837">Aplicaciones de Chrome</translation>
 <translation id="3360895254066713204">Ayuda de Chrome</translation>
@@ -245,6 +248,7 @@
 <translation id="8344083974188970894">{NUM_MINS,plural, =1{Chrome busca software no deseado una vez a la semana. Última verificación: hace 1 minuto.}other{Chrome busca software no deseado una vez a la semana. Última verificación: hace {NUM_MINS} minutos.}}</translation>
 <translation id="8370517070665726704">Copyright <ph name="YEAR" /> Google LLC. Todos los derechos reservados.</translation>
 <translation id="840084489713044809">Google Chrome desea exportar tus contraseñas.</translation>
+<translation id="8433638294851456451">Para enviar un número desde aquí a tu teléfono Android, accede a Chrome en ambos dispositivos.</translation>
 <translation id="8498858610309223613">Se acaba de instalar una actualización de seguridad especial para Google Chrome. Reinicia el navegador ahora (se restablecerán tus pestañas).</translation>
 <translation id="8521348052903287641">Regla de entrada para que Google Chrome Dev permita el tráfico mDNS.</translation>
 <translation id="8540666473246803645">Google Chrome</translation>
@@ -264,6 +268,7 @@
 <translation id="884296878221830158">También controla qué página se muestra al iniciar Chrome o al hacer clic en el botón de página principal.</translation>
 <translation id="8862326446509486874">No tienes los derechos que se requieren para realizar la instalación al nivel del sistema. Intenta ejecutar el instalador nuevamente como Administrador.</translation>
 <translation id="8914504000324227558">Volver a iniciar Chrome</translation>
+<translation id="8922193594870374009">Para enviar un número de <ph name="ORIGIN" /> a tu teléfono Android, accede a Chrome en ambos dispositivos.</translation>
 <translation id="8999208279178790196">{0,plural, =0{Hay una actualización de Chrome disponible}=1{Hay una actualización de Chrome disponible}other{Hay una actualización de Chrome disponible hace # días}}</translation>
 <translation id="9026991721384951619">El Sistema operativo Chrome no pudo sincronizar los datos porque la información de acceso de la cuenta está desactualizada.</translation>
 <translation id="9067395829937117663">Para usar Google Chrome, se requiere Windows 7 o versiones posteriores.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_es.xtb b/chrome/app/resources/google_chrome_strings_es.xtb
index 16546b2..1b0e335d0 100644
--- a/chrome/app/resources/google_chrome_strings_es.xtb
+++ b/chrome/app/resources/google_chrome_strings_es.xtb
@@ -23,6 +23,7 @@
 <translation id="1553358976309200471">Actualizar Chrome</translation>
 <translation id="1587223624401073077">Google Chrome está utilizando la cámara.</translation>
 <translation id="1587325591171447154"><ph name="FILE_NAME" /> es peligroso, por lo que Chrome lo ha bloqueado.</translation>
+<translation id="1597911401261118146">Para comprobar si tus contraseñas han sufrido quiebras de seguridad de datos u otros problemas de seguridad, <ph name="BEGIN_LINK" />inicia sesión en Chrome<ph name="END_LINK" />.</translation>
 <translation id="1619887657840448962">Para aumentar la seguridad de Chrome, hemos inhabilitado la siguiente extensión que no figura en <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> y que puede haberse añadido sin tu conocimiento.</translation>
 <translation id="162448658176061655">Chrome comprueba si hay software no deseado una vez a la semana. Última comprobación: hace un momento.</translation>
 <translation id="162629503687514352">Chrome OS no ha podido sincronizar las contraseñas.</translation>
@@ -38,6 +39,7 @@
 <translation id="1734234790201236882">Chrome guardará esta contraseña en tu cuenta de Google para que no tengas que recordarla.</translation>
 <translation id="174539241580958092">Google Chrome no ha podido sincronizar los datos debido a un error de inicio de sesión.</translation>
 <translation id="1759842336958782510">Chrome</translation>
+<translation id="1786003790898721085">Comprueba que hayas iniciado sesión en Chrome con <ph name="TARGET_DEVICE_NAME" /> y, después, intenta enviarlo de nuevo.</translation>
 <translation id="1812689907177901597">Si esta opción está desactivada, puedes iniciar sesión en sitios de Google, como Gmail, sin hacerlo en Chrome</translation>
 <translation id="1860536484129686729">Chrome necesita permiso para acceder a la cámara en este sitio web</translation>
 <translation id="1873233029667955273">Google Chrome no es tu navegador predeterminado</translation>
@@ -82,6 +84,7 @@
 <translation id="3065168410429928842">Pestaña de Chrome</translation>
 <translation id="3080151273017101988">Seguir ejecutando aplicaciones en segundo plano al cerrar Google Chrome</translation>
 <translation id="3089968997497233615">Hay una nueva versión más segura de Google Chrome disponible.</translation>
+<translation id="3114643501466072395">Para comprobar si tus otras contraseñas han sufrido quiebras de seguridad de datos u otros problemas de seguridad, <ph name="BEGIN_LINK" />inicia sesión en Chrome<ph name="END_LINK" />.</translation>
 <translation id="3127818369811890733">Chrome OS no ha podido sincronizar los datos.</translation>
 <translation id="3149510190863420837">Aplicaciones de Chrome</translation>
 <translation id="3360895254066713204">Ayudante de Chrome</translation>
@@ -253,6 +256,7 @@
 <translation id="8344083974188970894">{NUM_MINS,plural, =1{Chrome comprueba si hay software no deseado una vez a la semana. Última comprobación: hace 1 minuto.}other{Chrome comprueba si hay software no deseado una vez a la semana. Última comprobación: hace {NUM_MINS} minutos.}}</translation>
 <translation id="8370517070665726704">Copyright <ph name="YEAR" /> Google LLC. Todos los derechos reservados.</translation>
 <translation id="840084489713044809">Google Chrome quiere exportar tus contraseñas.</translation>
+<translation id="8433638294851456451">Para enviar un número desde aquí a tu teléfono Android, inicia sesión en Chrome con ambos dispositivos.</translation>
 <translation id="8498858610309223613">Se acaba de instalar una actualización de seguridad especial para Google Chrome. Reinicia ahora y restauraremos las pestañas.</translation>
 <translation id="8521348052903287641">Regla entrante para que Google Chrome Dev permita tráfico mDNS.</translation>
 <translation id="8540666473246803645">Google Chrome</translation>
@@ -272,6 +276,7 @@
 <translation id="884296878221830158">También controla qué página se muestra al iniciar Chrome o hacer clic en el botón de página principal.</translation>
 <translation id="8862326446509486874">No dispones de los derechos necesarios para la instalación en el sistema. Intenta ejecutar de nuevo el programa de instalación como administrador.</translation>
 <translation id="8914504000324227558">Volver a iniciar Chrome</translation>
+<translation id="8922193594870374009">Para enviar un número desde <ph name="ORIGIN" /> a tu teléfono Android, inicia sesión en Chrome con ambos dispositivos.</translation>
 <translation id="8999208279178790196">{0,plural, =0{Hay una actualización de Chrome disponible}=1{Hay una actualización de Chrome disponible}other{Hay una actualización de Chrome disponible desde hace # días}}</translation>
 <translation id="9026991721384951619">Chrome OS no ha podido sincronizar los datos porque la información de inicio de sesión de tu cuenta está obsoleta.</translation>
 <translation id="9067395829937117663">Google Chrome requiere Windows 7 o una versión posterior.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_hi.xtb b/chrome/app/resources/google_chrome_strings_hi.xtb
index 84d622b9..2f42c47 100644
--- a/chrome/app/resources/google_chrome_strings_hi.xtb
+++ b/chrome/app/resources/google_chrome_strings_hi.xtb
@@ -21,6 +21,7 @@
 <translation id="1553358976309200471">Chrome अपडेट करें</translation>
 <translation id="1587223624401073077">Google Chrome आपके कैमरे का उपयोग कर रहा है.</translation>
 <translation id="1587325591171447154"><ph name="FILE_NAME" /> खरतरनाक है, इसलिए Chrome ने उसे अवरोधित कर दिया है.</translation>
+<translation id="1597911401261118146">डेटा के गलत इस्तेमाल और सुरक्षा की अन्य समस्याओं से आपके पासवर्ड सुरक्षित हैं या नहीं, इसकी जांच करने के लिए, <ph name="BEGIN_LINK" />Chrome में साइन इन करें<ph name="END_LINK" />.</translation>
 <translation id="1619887657840448962">Chrome को ज़्यादा सुरक्षित बनाने के लिए, हमने निम्न एक्सटेंशन को अक्षम कर दिया है जो <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> में सूचीबद्ध नहीं है और आपकी जानकारी के बिना जोड़ा गया हो सकता है.</translation>
 <translation id="162448658176061655">Chrome हफ़्ते में एक बार अनचाहे सॉफ़्टवेयर की जांच करता है. पिछली जांच: कुछ सेकंड पहले की गई.</translation>
 <translation id="162629503687514352">Chrome OS आपके पासवर्ड सिंक नहीं कर सका.</translation>
@@ -34,6 +35,7 @@
 <translation id="1734234790201236882">Chrome इस पासवर्ड को आपके Google खाते में सेव कर लेगा. आपको इसे याद रखने की ज़रूरत नहीं है.</translation>
 <translation id="174539241580958092">प्रवेश करने में गड़बड़ी के कारण Google Chrome आपका डेटा समन्‍वयित नहीं कर सका.</translation>
 <translation id="1759842336958782510">Chrome</translation>
+<translation id="1786003790898721085">पक्का करें कि आपने <ph name="TARGET_DEVICE_NAME" /> पर Chrome में साइन इन किया है. इसके बाद, फिर से भेजने की कोशिश करें.</translation>
 <translation id="1812689907177901597">इसे बंद करके, आप Chrome में साइन इन किए बिना Gmail जैसी Google साइटों में साइन इन कर सकते हैं</translation>
 <translation id="1860536484129686729">Chrome को इस साइट के लिए आपका कैमरा एक्सेस करने की अनुमति चाहिए</translation>
 <translation id="1873233029667955273">Google Chrome आपका डिफ़ॉल्ट ब्राउज़र नहीं है</translation>
@@ -78,6 +80,7 @@
 <translation id="3065168410429928842">Chrome टैब</translation>
 <translation id="3080151273017101988">Google Chrome के बंद होने पर पृष्ठभूमि ऐप्स  चलाना जारी रखें</translation>
 <translation id="3089968997497233615">Google Chrome का एक नया, सुरक्षित वर्शन उपलब्‍ध है.</translation>
+<translation id="3114643501466072395">डेटा के गलत इस्तेमाल और सुरक्षा की अन्य समस्याओं से आपके दूसरे पासवर्ड सुरक्षित हैं या नहीं, इसकी जांच करने के लिए, <ph name="BEGIN_LINK" />Chrome में साइन इन करें<ph name="END_LINK" />.</translation>
 <translation id="3127818369811890733">Chrome OS आपका डेटा सिंक नहीं कर सका.</translation>
 <translation id="3149510190863420837">Chrome ऐप्स</translation>
 <translation id="3360895254066713204">Chrome सहायक</translation>
@@ -249,6 +252,7 @@
 <translation id="8344083974188970894">{NUM_MINS,plural, =1{Chrome हफ़्ते में एक बार अनचाहे सॉफ़्टवेयर की जांच करता है. पिछली जांच: 1 मिनट पहले की गई.}one{Chrome हफ़्ते में एक बार अनचाहे सॉफ़्टवेयर की जांच करता है. पिछली जांच: {NUM_MINS} मिनट पहले की गई.}other{Chrome हफ़्ते में एक बार अनचाहे सॉफ़्टवेयर की जांच करता है. पिछली जांच: {NUM_MINS} मिनट पहले की गई.}}</translation>
 <translation id="8370517070665726704">कॉपीराइट <ph name="YEAR" /> Google LLC. सर्वाधिकार सुरक्षित.</translation>
 <translation id="840084489713044809">Google Chrome आपके पासवर्ड निर्यात करना चाहता है.</translation>
+<translation id="8433638294851456451">यहां से अपने Android फ़ोन पर नंबर भेजने के लिए, दोनों डिवाइस पर Chrome में साइन इन करें.</translation>
 <translation id="8498858610309223613">Google Chrome के लिए एक खास सुरक्षा अपडेट अभी-अभी लागू किया गया था. अभी रीस्टार्ट करें और हम आपके टैब बहाल कर देंगे.</translation>
 <translation id="8521348052903287641">mDNS ट्रैफ़िक की अनुमति देने के लिए Google Chrome का इनबाउंड नियम.</translation>
 <translation id="8540666473246803645">Google Chrome</translation>
@@ -268,6 +272,7 @@
 <translation id="884296878221830158">इससे यह भी नियंत्रित होता है कि जब आप Chrome शुरू करते हैं या होम बटन पर क्लिक करते हैं तब कौन सा पेज दिखाया जाए.</translation>
 <translation id="8862326446509486874">सिस्टम-स्तर स्थापना के लिए आपके पास उचित अधिकार नहीं हैं. इंस्टॉलर को व्यवस्थापक के रूप में फिर से चलाने का प्रयास करें.</translation>
 <translation id="8914504000324227558">Chrome को फिर से लॉन्‍च करें</translation>
+<translation id="8922193594870374009"><ph name="ORIGIN" /> से अपने Android फ़ोन पर नंबर भेजने के लिए, दोनों डिवाइस पर Chrome में साइन इन करें.</translation>
 <translation id="8999208279178790196">{0,plural, =0{Chrome का एक अपडेट उपलब्ध है}=1{Chrome का एक अपडेट उपलब्ध है}one{Chrome का अपडेट # दिनों से उपलब्ध है}other{Chrome का अपडेट # दिनों से उपलब्ध है}}</translation>
 <translation id="9026991721384951619">Chrome OS आपका डेटा सिंक नहीं कर सका क्योंकि आपके खाता साइन इन विवरण की समय सीमा पूरी हो चुकी है.</translation>
 <translation id="9067395829937117663">Google Chrome के लिए Windows 7 या उसके बाद के वर्शन की आवश्यकता होती है.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_hr.xtb b/chrome/app/resources/google_chrome_strings_hr.xtb
index d256e88..9656c47 100644
--- a/chrome/app/resources/google_chrome_strings_hr.xtb
+++ b/chrome/app/resources/google_chrome_strings_hr.xtb
@@ -35,7 +35,7 @@
 <translation id="1734234790201236882">Chrome će spremiti tu zaporku na vaš Google račun. Ne morate je pamtiti.</translation>
 <translation id="174539241580958092">Google Chrome nije mogao sinkronizirati vaše podatke zbog pogreške prilikom prijave.</translation>
 <translation id="1759842336958782510">Chrome</translation>
-<translation id="1786003790898721085">Obavezno se prijavite na Chrome na uređaju <ph name="TARGET_DEVICE_NAME" /> i nakon toga ponovno pokušajte poslati.</translation>
+<translation id="1786003790898721085">Obavezno se prijavite na Chrome na uređaju <ph name="TARGET_DEVICE_NAME" /> i nakon toga ponovno pokušajte sa slanjem.</translation>
 <translation id="1812689907177901597">Ako isključite tu opciju, možete se prijaviti na Googleove web-lokacije kao što je Gmail bez prijavljivanja u Chrome</translation>
 <translation id="1860536484129686729">Chrome treba dopuštenje za pristup kameri za ovu web-lokaciju</translation>
 <translation id="1873233029667955273">Google Chrome nije vaš zadani preglednik</translation>
diff --git a/chrome/app/resources/google_chrome_strings_hu.xtb b/chrome/app/resources/google_chrome_strings_hu.xtb
index e1c8ee8..c3da894ae 100644
--- a/chrome/app/resources/google_chrome_strings_hu.xtb
+++ b/chrome/app/resources/google_chrome_strings_hu.xtb
@@ -21,6 +21,7 @@
 <translation id="1553358976309200471">A Chrome böngésző frissítése</translation>
 <translation id="1587223624401073077">A Google Chrome használja a kamerát.</translation>
 <translation id="1587325591171447154">A(z) <ph name="FILE_NAME" /> veszélyes, ezért a Chrome letiltotta.</translation>
+<translation id="1597911401261118146">Ha ellenőrizni szeretné, hogy jelszavai biztonságban vannak-e az adatvédelmi incidensektől és más biztonsági problémáktól, <ph name="BEGIN_LINK" />jelentkezzen be a Chrome-ba<ph name="END_LINK" />.</translation>
 <translation id="1619887657840448962">A Chrome biztonságosabbá tétele érdekében kikapcsoltuk a következő bővítményt, amely nem a(z) <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> szolgáltatásból származik, és előfordulhat, hogy az Ön tudta nélkül lett telepítve.</translation>
 <translation id="162448658176061655">A Chrome hetente egyszer keres nemkívánatos szoftvereket. Legutóbb frissítve: az imént.</translation>
 <translation id="162629503687514352">A Chrome OS nem tudta szinkronizálni az Ön jelszavait.</translation>
@@ -34,6 +35,7 @@
 <translation id="1734234790201236882">A Chrome ezt a jelszót Google-fiókjába menti. Nem kell megjegyeznie.</translation>
 <translation id="174539241580958092">A Google Chrome egy bejelentkezési hiba miatt nem tudta szinkronizálni az adatokat.</translation>
 <translation id="1759842336958782510">Chrome</translation>
+<translation id="1786003790898721085">Ellenőrizze, hogy bejelentkezett-e a Chrome-ba <ph name="TARGET_DEVICE_NAME" /> eszközén, majd próbálja meg újraküldeni.</translation>
 <translation id="1812689907177901597">A beállítás kikapcsolásával anélkül jelentkezhet be a Google-webhelyekre (pl. Gmail), hogy a Chrome-ba is bejelentkezne</translation>
 <translation id="1860536484129686729">A Chrome-nak engedélyre van szüksége ahhoz, hogy hozzáférjen a kamerához ennél a webhelynél</translation>
 <translation id="1873233029667955273">Nem a Google Chrome az alapértelmezett böngésző</translation>
@@ -78,6 +80,7 @@
 <translation id="3065168410429928842">Chrome-lap</translation>
 <translation id="3080151273017101988">A háttéralkalmazások továbbfuttatása, ha a Google Chrome-ot bezárják</translation>
 <translation id="3089968997497233615">Elérhető a Google Chrome új, biztonságosabb verziója.</translation>
+<translation id="3114643501466072395">Ha ellenőrizni szeretné, hogy többi jelszava biztonságban van-e az adatvédelmi incidensektől és más biztonsági problémáktól, <ph name="BEGIN_LINK" />jelentkezzen be a Chrome-ba<ph name="END_LINK" />.</translation>
 <translation id="3127818369811890733">A Chrome OS nem tudta szinkronizálni az adatait.</translation>
 <translation id="3149510190863420837">Chrome-alkalmazások</translation>
 <translation id="3360895254066713204">Chrome segéd</translation>
@@ -244,6 +247,7 @@
 <translation id="8344083974188970894">{NUM_MINS,plural, =1{A Chrome hetente egyszer keres nemkívánatos szoftvereket. Legutóbb frissítve: 1 perce.}other{A Chrome hetente egyszer keres nemkívánatos szoftvereket. Legutóbb frissítve: {NUM_MINS} perce.}}</translation>
 <translation id="8370517070665726704">Copyright <ph name="YEAR" /> Google LLC. Minden jog fenntartva.</translation>
 <translation id="840084489713044809">A Google Chrome exportálni szeretné a jelszavakat.</translation>
+<translation id="8433638294851456451">Ha innen szeretne számot küldeni Android-telefonjára, jelentkezzen be a Chrome-ba mindkét eszközén.</translation>
 <translation id="8498858610309223613">A rendszer egy speciális biztonsági frissítést alkalmazott a Google Chrome-on. Indítsa újra a számítógépet, a lapokat majd mi visszaállítjuk.</translation>
 <translation id="8521348052903287641">Bejövő szabály a Google Chrome Devhez az mDNS forgalom engedélyezése céljából.</translation>
 <translation id="8540666473246803645">Google Chrome</translation>
@@ -263,6 +267,7 @@
 <translation id="884296878221830158">Továbbá azt is szabályozza, hogy melyik oldal jelenik meg a Chrome indításakor vagy a Kezdőlap gombra történő kattintáskor.</translation>
 <translation id="8862326446509486874">Nincsenek meg a megfelelő jogai a rendszerszintű telepítéshez. Indítsa újra a telepítőt rendszergazdaként.</translation>
 <translation id="8914504000324227558">A Chrome újraindítása</translation>
+<translation id="8922193594870374009">Ha innen: <ph name="ORIGIN" /> szeretne számot küldeni Android-telefonjára, jelentkezzen be a Chrome-ba mindkét eszközén.</translation>
 <translation id="8999208279178790196">{0,plural, =0{Rendelkezésre áll egy Chrome-frissítés}=1{Rendelkezésre áll egy Chrome-frissítés}other{# napja rendelkezésre áll egy Chrome-frissítés}}</translation>
 <translation id="9026991721384951619">A Chrome OS nem tudta szinkronizálni az adatokat, mert a fiók bejelentkezési adatai elavultak.</translation>
 <translation id="9067395829937117663">A Google Chrome futtatásához Windows 7 vagy újabb verzió szükséges.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_it.xtb b/chrome/app/resources/google_chrome_strings_it.xtb
index 27b5539..bc6d54d 100644
--- a/chrome/app/resources/google_chrome_strings_it.xtb
+++ b/chrome/app/resources/google_chrome_strings_it.xtb
@@ -21,6 +21,7 @@
 <translation id="1553358976309200471">Aggiorna Chrome</translation>
 <translation id="1587223624401073077">Google Chrome sta utilizzando la videocamera.</translation>
 <translation id="1587325591171447154"><ph name="FILE_NAME" /> è pericoloso, pertanto è stato bloccato da Chrome.</translation>
+<translation id="1597911401261118146">Per controllare che le tue password siano protette da violazioni dei dati e altri problemi di sicurezza, <ph name="BEGIN_LINK" />accedi a Chrome<ph name="END_LINK" />.</translation>
 <translation id="1619887657840448962">Per rendere Chrome più sicuro, abbiamo disattivato la seguente estensione non presente nel <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> che potrebbe essere stata aggiunta a tua insaputa.</translation>
 <translation id="162448658176061655">Chrome verifica la presenza di software indesiderato una volta a settimana. Ultima verifica: qualche istante fa.</translation>
 <translation id="162629503687514352">Impossibile sincronizzare le password in Chrome OS.</translation>
@@ -34,6 +35,7 @@
 <translation id="1734234790201236882">Chrome salverà la password nel tuo Account Google affinché tu non debba memorizzarla.</translation>
 <translation id="174539241580958092">Impossibile sincronizzare i dati in Google Chrome a causa di un errore durante l'accesso.</translation>
 <translation id="1759842336958782510">Chrome</translation>
+<translation id="1786003790898721085">Assicurati di aver effettuato l'accesso a Chrome sul tuo dispositivo <ph name="TARGET_DEVICE_NAME" /> e prova a inviare di nuovo.</translation>
 <translation id="1812689907177901597">Se disattivi questa funzione, puoi accedere ai siti Google quali Gmail senza accedere a Chrome</translation>
 <translation id="1860536484129686729">Per questo sito Chrome ha bisogno dell'autorizzazione ad accedere alla fotocamera</translation>
 <translation id="1873233029667955273">Google Chrome non è il browser predefinito</translation>
@@ -78,6 +80,7 @@
 <translation id="3065168410429928842">Scheda Chrome</translation>
 <translation id="3080151273017101988">Continua a eseguire applicazioni in background dopo la chiusura di Google Chrome</translation>
 <translation id="3089968997497233615">È disponibile una nuova versione più sicura di Google Chrome.</translation>
+<translation id="3114643501466072395">Per controllare che le tue altre password siano protette da violazioni dei dati e altri problemi di sicurezza, <ph name="BEGIN_LINK" />accedi a Chrome<ph name="END_LINK" />.</translation>
 <translation id="3127818369811890733">Impossibile sincronizzare i dati in Chrome OS.</translation>
 <translation id="3149510190863420837">Applicazioni Chrome</translation>
 <translation id="3360895254066713204">Supporto Chrome</translation>
@@ -244,6 +247,7 @@
 <translation id="8344083974188970894">{NUM_MINS,plural, =1{Chrome verifica la presenza di software indesiderato una volta a settimana. Ultima verifica: 1 minuto fa.}other{Chrome verifica la presenza di software indesiderato una volta a settimana. Ultima verifica: {NUM_MINS} minuti fa.}}</translation>
 <translation id="8370517070665726704">Copyright <ph name="YEAR" /> Google LLC Tutti i diritti riservati.</translation>
 <translation id="840084489713044809">Google Chrome vuole esportare le password.</translation>
+<translation id="8433638294851456451">Per inviare un numero da questo dispositivo al tuo telefono Android, accedi a Chrome su entrambi i dispositivi.</translation>
 <translation id="8498858610309223613">È stato appena applicato un aggiornamento di sicurezza speciale per Google Chrome. Riavvia ora e le schede verranno ripristinate.</translation>
 <translation id="8521348052903287641">Regola inbound per consentire il traffico mDNS in Google Chrome Dev.</translation>
 <translation id="8540666473246803645">Google Chrome</translation>
@@ -263,6 +267,7 @@
 <translation id="884296878221830158">Controlla anche la pagina visualizzata all'avvio di Chrome o quando fai clic sul pulsante Pagina iniziale.</translation>
 <translation id="8862326446509486874">Non disponi dei diritti appropriati per l'installazione a livello di sistema. Prova a eseguire nuovamente il programma di installazione come Amministratore.</translation>
 <translation id="8914504000324227558">Riavvia Chrome</translation>
+<translation id="8922193594870374009">Per inviare un numero da <ph name="ORIGIN" /> al tuo telefono Android, accedi a Chrome su entrambi i dispositivi.</translation>
 <translation id="8999208279178790196">{0,plural, =0{È disponibile un aggiornamento di Chrome}=1{È disponibile un aggiornamento di Chrome}other{È disponibile un aggiornamento di Chrome da # giorni}}</translation>
 <translation id="9026991721384951619">Impossibile sincronizzare i dati in Chrome OS perché i dati di accesso dell'account sono obsoleti.</translation>
 <translation id="9067395829937117663">Google Chrome richiede Windows 7 o versioni successive.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ml.xtb b/chrome/app/resources/google_chrome_strings_ml.xtb
index 50a97c0..d96bef39 100644
--- a/chrome/app/resources/google_chrome_strings_ml.xtb
+++ b/chrome/app/resources/google_chrome_strings_ml.xtb
@@ -23,6 +23,7 @@
 <translation id="1553358976309200471">Chrome അപ്‌ഡേറ്റുചെയ്യുക</translation>
 <translation id="1587223624401073077">Google Chrome നിങ്ങളുടെ ക്യാമറ ഉപയോഗിക്കുന്നു.</translation>
 <translation id="1587325591171447154"><ph name="FILE_NAME" /> അപകടകരമായതിനാൽ, Chrome ഇതിനെ ബ്ലോക്കുചെയ്‌തു.</translation>
+<translation id="1597911401261118146">ഡാറ്റാ ലംഘനങ്ങളിൽ നിന്നും മറ്റ് സുരക്ഷാ പ്രശ്‌നങ്ങളിൽ നിന്നും നിങ്ങളുടെ പാസ്‌വേഡുകൾ സുരക്ഷിതമാണോ എന്ന് പരിശോധിക്കാൻ, <ph name="BEGIN_LINK" />Chrome-ൽ സൈൻ ഇൻ ചെയ്യുക<ph name="END_LINK" />.</translation>
 <translation id="1619887657840448962">Chrome സുരക്ഷിതമാക്കാൻ, <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> എന്നതിൽ ലിസ്റ്റ് ചെയ്യാത്ത ചില വിപുലീകരണങ്ങൾ ഞങ്ങൾ പ്രവർത്തനരഹിതമാക്കി, അവ നിങ്ങളുടെ അറിവില്ലാതെ ചേർത്തിരിക്കാനിടയുണ്ട്.</translation>
 <translation id="162448658176061655">ആഴ്‌ചയിൽ ഒരിക്കൽ അനാവശ്യ സോഫ്‌റ്റ്‌വെയർ കണ്ടെത്താൻ Chrome പരിശോധിക്കുന്നു. അവസാനം പരിശോധിച്ചത്: അൽപ്പം മുമ്പ്.</translation>
 <translation id="162629503687514352">Chrome OS-ന് നിങ്ങളുടെ പാസ്‌വേഡുകൾ സമന്വയിപ്പിക്കാനായില്ല.</translation>
@@ -38,6 +39,7 @@
 <translation id="1734234790201236882">നിങ്ങളുടെ Google അക്കൗണ്ടിൽ Chrome ഈ പാസ്‌വേഡ് സംരക്ഷിക്കും. നിങ്ങൾ അത് ഓർത്ത് വയ്‌ക്കേണ്ടതില്ല.</translation>
 <translation id="174539241580958092">സൈൻ ഇൻ ചെയ്യുന്നതിലെ ഒരു പിശകിനാൽ Google Chrome-ന് നിങ്ങളുടെ ഡാറ്റ സമന്വയിപ്പിക്കാനായില്ല.</translation>
 <translation id="1759842336958782510">Chrome</translation>
+<translation id="1786003790898721085">നിങ്ങൾ <ph name="TARGET_DEVICE_NAME" /> ഉപകരണത്തിൽ Chrome-ലാണ് സൈൻ ഇൻ ചെയ്‌തിരിക്കുന്നതെന്ന് ഉറപ്പാക്കുക, തുടർന്ന് വീണ്ടും അയയ്‌ക്കാൻ ശ്രമിക്കുക.</translation>
 <translation id="1812689907177901597">ഇത് ഓഫാക്കുന്നതിലൂടെ, Chrome-ലേക്ക് സൈൻ ഇൻ ചെയ്യാതെ തന്നെ Gmail പോലുള്ള Google സൈറ്റുകളിൽ നിങ്ങൾക്ക് സൈൻ ഇൻ ചെയ്യാനാവും</translation>
 <translation id="1860536484129686729">ഈ സൈറ്റിനായി, Chrome-ന് നിങ്ങളുടെ ക്യാമറ ആക്‌സസ് ചെയ്യാനുള്ള അനുമതി ആവശ്യമാണ്</translation>
 <translation id="1873233029667955273">Google Chrome നിങ്ങളുടെ ഡിഫോൾട്ട് ബ്രൗസറല്ല</translation>
@@ -82,6 +84,7 @@
 <translation id="3065168410429928842">Chrome ടാബ്</translation>
 <translation id="3080151273017101988">Google Chrome അടച്ചാലും പശ്ചാത്തല ആപ്ലിക്കേഷനുകള്‍ പ്രവര്‍ത്തിപ്പിക്കുന്നത് തുടരുക</translation>
 <translation id="3089968997497233615">Google Chrome-ന്റെ പുതിയതും സുരക്ഷിതവുമായ പതിപ്പ് ലഭ്യമാണ്.</translation>
+<translation id="3114643501466072395">ഡാറ്റാ ലംഘനങ്ങളിൽ നിന്നും മറ്റ് സുരക്ഷാ പ്രശ്‌നങ്ങളിൽ നിന്നും നിങ്ങളുടെ മറ്റ് പാസ്‌വേഡുകൾ സുരക്ഷിതമാണോ എന്ന് പരിശോധിക്കാൻ, <ph name="BEGIN_LINK" />Chrome-ൽ സൈൻ ഇൻ ചെയ്യുക<ph name="END_LINK" />.</translation>
 <translation id="3127818369811890733">Chrome OS-ന് നിങ്ങളുടെ ഡാറ്റ സമന്വയിപ്പിക്കാനായില്ല.</translation>
 <translation id="3149510190863420837">Chrome അപ്ലിക്കേഷനുകൾ</translation>
 <translation id="3360895254066713204">Chrome സഹായി‌</translation>
@@ -253,6 +256,7 @@
 <translation id="8344083974188970894">{NUM_MINS,plural, =1{ആഴ്‌ചയിൽ ഒരിക്കൽ അനാവശ്യ സോഫ്‌റ്റ്‌വെയർ കണ്ടെത്താൻ Chrome പരിശോധിക്കുന്നു. അവസാനം പരിശോധിച്ചത്: ഒരു മിനിറ്റ് മുമ്പ്.}other{ആഴ്‌ചയിൽ ഒരിക്കൽ അനാവശ്യ സോഫ്‌റ്റ്‌വെയർ കണ്ടെത്താൻ Chrome പരിശോധിക്കുന്നു. അവസാനം പരിശോധിച്ചത്: {NUM_MINS} മിനിറ്റ് മുമ്പ്.}}</translation>
 <translation id="8370517070665726704">പകർപ്പവകാശം <ph name="YEAR" /> Google LLC. എല്ലാ അവകാശങ്ങളും നിക്ഷിപ്‍തം.</translation>
 <translation id="840084489713044809">നിങ്ങളുടെ പാസ്‌വേഡുകൾ എക്‌സ്‌പോർട്ട് ചെയ്യാൻ Google Chrome ആഗ്രഹിക്കുന്നു.</translation>
+<translation id="8433638294851456451">ഇവിടെ നിന്ന് നിങ്ങളുടെ Android ഫോണിലേക്ക് ഒരു നമ്പർ അയയ്‌ക്കാൻ, രണ്ട് ഉപകരണങ്ങളിൽ നിന്നും Chrome-ൽ സൈൻ ഇൻ ചെയ്യുക.</translation>
 <translation id="8498858610309223613">Google Chrome-നുള്ള ഒരു പ്രത്യേക സുരക്ഷാ അപ്ഡേറ്റ് പ്രയോഗിച്ചിരിക്കുന്നു. ഇപ്പോൾ റീസ്‌റ്റാർട്ട് ചെയ്യുക, ഞങ്ങൾ നിങ്ങളുടെ ടാബുകൾ പുനഃസ്ഥാപിക്കും.</translation>
 <translation id="8521348052903287641">mDNS ട്രാഫിക് അനുവദിക്കുന്നതിന് Google Chrome Dev-ന് വേണ്ടിയുള്ള ഇൻബൗണ്ട് റൂൾ.</translation>
 <translation id="8540666473246803645">Google Chrome</translation>
@@ -272,6 +276,7 @@
 <translation id="884296878221830158">നിങ്ങൾ Chrome ആരംഭിക്കുമ്പോഴോ ഹോം ബട്ടൺ ക്ലിക്ക് ചെയ്യുമ്പോഴോ ഏത് പേജാണ് കാണിക്കേണ്ടതെന്നും അത് നിയന്ത്രിയ്ക്കുന്നു.</translation>
 <translation id="8862326446509486874">സിസ്റ്റം തലത്തിൽ ഇന്‍‌സ്റ്റാള്‍‌ ചെയ്യുന്നതിന് നിങ്ങള്‍‌ക്ക് ഉചിതമായ അവകാശങ്ങളില്ല. അഡ്‌മിനിസ്‌ട്രേറ്ററായി ഇന്‍‌സ്റ്റാളര്‍‌ റണ്‍ ചെയ്യിക്കാൻ വീണ്ടും ശ്രമിക്കൂ.</translation>
 <translation id="8914504000324227558">Chrome വീണ്ടും സമാരംഭിക്കുക</translation>
+<translation id="8922193594870374009"><ph name="ORIGIN" /> എന്നതിൽ നിന്ന് നിങ്ങളുടെ Android ഫോണിലേക്ക് ഒരു നമ്പർ അയയ്‌ക്കാൻ, രണ്ട് ഉപകരണങ്ങളിൽ നിന്നും Chrome-ൽ സൈൻ ഇൻ ചെയ്യുക.</translation>
 <translation id="8999208279178790196">{0,plural, =0{Chrome-നൊരു അപ്‌ഡേറ്റ് ലഭ്യമാണ്}=1{Chrome-നൊരു അപ്‌ഡേറ്റ് ലഭ്യമാണ്}other{# ദിവസമായി Chrome-നൊരു അപ്‌ഡേറ്റ് ലഭ്യമാണ്}}</translation>
 <translation id="9026991721384951619">നിങ്ങളുടെ അക്കൗണ്ടിന്റെ സൈൻ ഇൻ വിശദാംശങ്ങൾ കാലഹരണപ്പെട്ടതിനാൽ Chrome OS-ന് നിങ്ങളുടെ ഡാറ്റ സമന്വയിപ്പിക്കാനായില്ല.</translation>
 <translation id="9067395829937117663">Google Chrome-ന് Windows 7 അല്ലെങ്കിൽ അതിനുശേഷമുള്ള പതിപ്പ് ആവശ്യമാണ്.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_no.xtb b/chrome/app/resources/google_chrome_strings_no.xtb
index b9e140e..62c55b5 100644
--- a/chrome/app/resources/google_chrome_strings_no.xtb
+++ b/chrome/app/resources/google_chrome_strings_no.xtb
@@ -21,6 +21,7 @@
 <translation id="1553358976309200471">Oppdater Chrome</translation>
 <translation id="1587223624401073077">Google Chrome bruker kameraet ditt.</translation>
 <translation id="1587325591171447154"><ph name="FILE_NAME" /> er farlig, så Chrome har blokkert den.</translation>
+<translation id="1597911401261118146">For å sjekke om passordene dine er trygge mot databrudd og andre sikkerhetsproblemer, <ph name="BEGIN_LINK" />logg på Chrome<ph name="END_LINK" />.</translation>
 <translation id="1619887657840448962">For å gjøre Chrome tryggere har vi slått av følgende utvidelse som ikke finnes i <ph name="IDS_EXTENSION_WEB_STORE_TITLE" />, og som kan ha blitt lagt til uten at du vet det.</translation>
 <translation id="162448658176061655">Chrome sjekker én gang i uken om du har uønsket programvare. Sist sjekket for et øyeblikk siden.</translation>
 <translation id="162629503687514352">Chrome OS kunne ikke synkronisere passordene dine.</translation>
@@ -34,6 +35,7 @@
 <translation id="1734234790201236882">Chrome lagrer passordet i Google-kontoen din, så du trenger ikke å huske det.</translation>
 <translation id="174539241580958092">Google Chrome kunne ikke synkronisere dataene dine på grunn av en påloggingsfeil.</translation>
 <translation id="1759842336958782510">Chrome</translation>
+<translation id="1786003790898721085">Sørg for at du er logget på Chrome på <ph name="TARGET_DEVICE_NAME" />, og prøv å sende på nytt.</translation>
 <translation id="1812689907177901597">Ved å slå dette av kan du logge på Google-sider, som Gmail, uten å logge på Chrome</translation>
 <translation id="1860536484129686729">Chrome trenger tilgang til kameraet ditt for dette nettstedet</translation>
 <translation id="1873233029667955273">Google Chrome er ikke standardnettleseren din</translation>
@@ -78,6 +80,7 @@
 <translation id="3065168410429928842">Chrome-fane</translation>
 <translation id="3080151273017101988">Fortsett kjøringen av bakgrunnsprogrammer når Google Chrome er lukket</translation>
 <translation id="3089968997497233615">En ny, sikrere versjon av Google Chrome er tilgjengelig</translation>
+<translation id="3114643501466072395">For å sjekke om de andre passordene dine er trygge mot databrudd og andre sikkerhetsproblemer, <ph name="BEGIN_LINK" />logg på Chrome<ph name="END_LINK" />.</translation>
 <translation id="3127818369811890733">Chrome OS kunne ikke synkronisere dataene dine.</translation>
 <translation id="3149510190863420837">Chrome-apper</translation>
 <translation id="3360895254066713204">Chrome-hjelper</translation>
@@ -245,6 +248,7 @@
 <translation id="8344083974188970894">{NUM_MINS,plural, =1{Chrome sjekker én gang i uken om du har uønsket programvare. Sist sjekket for ett minutt siden.}other{Chrome sjekker én gang i uken om du har uønsket programvare. Sist sjekket for {NUM_MINS} minutter siden.}}</translation>
 <translation id="8370517070665726704">Copyright <ph name="YEAR" /> Google LLC. Med enerett.</translation>
 <translation id="840084489713044809">Google Chrome forsøker å eksportere passordene dine.</translation>
+<translation id="8433638294851456451">For å sende numre herfra til Android-telefonen din, logg på Chrome på begge enhetene.</translation>
 <translation id="8498858610309223613">En spesiell sikkerhetsoppdatering for Google Chrome ble nettopp installert. Start på nytt nå, så gjenoppretter vi fanene dine.</translation>
 <translation id="8521348052903287641">Regel for å tillate innkommende mDNS-trafikk i Google Chrome Dev.</translation>
 <translation id="8540666473246803645">Google Chrome</translation>
@@ -264,6 +268,7 @@
 <translation id="884296878221830158">Den styrer også hvilken side som vises når du starter Chrome eller klikker på Startside-knappen.</translation>
 <translation id="8862326446509486874">Du har ikke de nødvendige rettighetene for å installere på systemnivå. Prøv å kjøre installasjonsprogrammet som administrator.</translation>
 <translation id="8914504000324227558">Start Chrome på nytt</translation>
+<translation id="8922193594870374009">For å sende numre fra <ph name="ORIGIN" /> til Android-telefonen din, logg på Chrome på begge enhetene.</translation>
 <translation id="8999208279178790196">{0,plural, =0{En Chrome-oppdatering er tilgjengelig}=1{En Chrome-oppdatering er tilgjengelig}other{En Chrome-oppdatering har vært tilgjengelig i # dager}}</translation>
 <translation id="9026991721384951619">Chrome OS kunne ikke synkronisere dataene fordi påloggingsopplysningene dine er foreldede.</translation>
 <translation id="9067395829937117663">Google Chrome krever Windows 7 eller nyere.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_pl.xtb b/chrome/app/resources/google_chrome_strings_pl.xtb
index b77b5787..4ac0d6e 100644
--- a/chrome/app/resources/google_chrome_strings_pl.xtb
+++ b/chrome/app/resources/google_chrome_strings_pl.xtb
@@ -21,6 +21,7 @@
 <translation id="1553358976309200471">Zaktualizuj Chrome</translation>
 <translation id="1587223624401073077">Google Chrome używa Twojej kamery.</translation>
 <translation id="1587325591171447154">Plik <ph name="FILE_NAME" /> jest niebezpieczny, dlatego został zablokowany przez Chrome.</translation>
+<translation id="1597911401261118146">Aby sprawdzić, czy Twoje hasła są chronione przed naruszeniami bezpieczeństwa danych i innymi zagrożeniami tego typu, <ph name="BEGIN_LINK" />zaloguj się w Chrome<ph name="END_LINK" />.</translation>
 <translation id="1619887657840448962">Aby poprawić bezpieczeństwo Chrome, wyłączyliśmy to rozszerzenie. Nie jest ono dostępne w <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> i mogło zostać dodane bez Twojej wiedzy.</translation>
 <translation id="162448658176061655">Raz w tygodniu Chrome sprawdza, czy nie masz zainstalowanego niechcianego oprogramowania. Sprawdzano: przed chwilą.</translation>
 <translation id="162629503687514352">System operacyjny Chrome nie może zsynchronizować haseł.</translation>
@@ -34,6 +35,7 @@
 <translation id="1734234790201236882">Chrome zapisze to hasło na Twoim koncie Google. Nie musisz go pamiętać.</translation>
 <translation id="174539241580958092">Google Chrome nie może zsynchronizować danych z powodu błędu podczas logowania.</translation>
 <translation id="1759842336958782510">Chrome</translation>
+<translation id="1786003790898721085">Najpierw zaloguj się w Chrome na swoim urządzeniu <ph name="TARGET_DEVICE_NAME" />, a potem ponów próbę wysyłania.</translation>
 <translation id="1812689907177901597">Jeśli wyłączysz tę opcję, możesz logować się na stronach Google takich jak Gmail bez logowania się w Chrome</translation>
 <translation id="1860536484129686729">Chrome potrzebuje uprawnień dostępu do aparatu na tej stronie</translation>
 <translation id="1873233029667955273">Google Chrome nie jest domyślną przeglądarką</translation>
@@ -78,6 +80,7 @@
 <translation id="3065168410429928842">Karta Chrome</translation>
 <translation id="3080151273017101988">Kontynuuj działanie aplikacji w tle po zamknięciu przeglądarki Google Chrome</translation>
 <translation id="3089968997497233615">Dostępna jest nowa, bezpieczniejsza wersja przeglądarki Google Chrome.</translation>
+<translation id="3114643501466072395">Aby sprawdzić, czy Twoje pozostałe hasła są chronione przed naruszeniami bezpieczeństwa danych i innymi zagrożeniami tego typu, <ph name="BEGIN_LINK" />zaloguj się w Chrome<ph name="END_LINK" />.</translation>
 <translation id="3127818369811890733">System operacyjny Chrome nie może zsynchronizować danych.</translation>
 <translation id="3149510190863420837">Aplikacje Chrome</translation>
 <translation id="3360895254066713204">Pomoc Chrome</translation>
@@ -244,6 +247,7 @@
 <translation id="8344083974188970894">{NUM_MINS,plural, =1{Raz w tygodniu Chrome sprawdza, czy nie masz zainstalowanego niechcianego oprogramowania. Sprawdzano: minutę temu.}few{Raz w tygodniu Chrome sprawdza, czy nie masz zainstalowanego niechcianego oprogramowania. Sprawdzano: {NUM_MINS} minuty temu.}many{Raz w tygodniu Chrome sprawdza, czy nie masz zainstalowanego niechcianego oprogramowania. Sprawdzano: {NUM_MINS} minut temu.}other{Raz w tygodniu Chrome sprawdza, czy nie masz zainstalowanego niechcianego oprogramowania. Sprawdzano: {NUM_MINS} minuty temu.}}</translation>
 <translation id="8370517070665726704">Copyright <ph name="YEAR" /> Google LLC. Wszelkie prawa zastrzeżone.</translation>
 <translation id="840084489713044809">Google Chrome chce wyeksportować Twoje hasła.</translation>
+<translation id="8433638294851456451">Aby wysłać stąd numer na swój telefon z Androidem, zaloguj się w Chrome na obu urządzeniach.</translation>
 <translation id="8498858610309223613">Właśnie została zastosowana specjalna aktualizacja zabezpieczeń Google Chrome. Uruchom ponownie Chrome teraz. Karty zostaną przywrócone.</translation>
 <translation id="8521348052903287641">Reguła dla ruchu przychodzącego w wersji deweloperskiej Google Chrome zezwalająca na ruch mDNS.</translation>
 <translation id="8540666473246803645">Google Chrome</translation>
@@ -263,6 +267,7 @@
 <translation id="884296878221830158">Kontroluje także to, jaka strona wyświetla się po uruchomieniu Chrome lub kliknięciu przycisku strony głównej.</translation>
 <translation id="8862326446509486874">Nie masz odpowiednich uprawnień do przeprowadzenia instalacji na poziomie systemowym. Uruchom ponownie program instalacyjny jako administrator.</translation>
 <translation id="8914504000324227558">Uruchom Chrome ponownie</translation>
+<translation id="8922193594870374009">Aby wysłać numer z <ph name="ORIGIN" /> na swój telefon z Androidem, zaloguj się w Chrome na obu urządzeniach.</translation>
 <translation id="8999208279178790196">{0,plural, =0{Dostępna jest aktualizacja Chrome}=1{Dostępna jest aktualizacja Chrome}few{Aktualizacja Chrome jest dostępna od # dni}many{Aktualizacja Chrome jest dostępna od # dni}other{Aktualizacja Chrome jest dostępna od # dnia}}</translation>
 <translation id="9026991721384951619">Google Chrome nie może zsynchronizować danych, ponieważ dane logowania na Twoje konto są nieaktualne.</translation>
 <translation id="9067395829937117663">Google Chrome wymaga systemu Windows 7 lub nowszego.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_pt-BR.xtb b/chrome/app/resources/google_chrome_strings_pt-BR.xtb
index 9494221a..895b61b 100644
--- a/chrome/app/resources/google_chrome_strings_pt-BR.xtb
+++ b/chrome/app/resources/google_chrome_strings_pt-BR.xtb
@@ -21,6 +21,7 @@
 <translation id="1553358976309200471">Atualizar o Google Chrome</translation>
 <translation id="1587223624401073077">O Google Chrome está usando sua câmera.</translation>
 <translation id="1587325591171447154">O arquivo <ph name="FILE_NAME" /> é perigoso. Por isso ele foi bloqueado pelo Chrome.</translation>
+<translation id="1597911401261118146">Para verificar se suas senhas estão protegidas contra violações de dados e outros problemas de segurança, <ph name="BEGIN_LINK" />faça login no Chrome<ph name="END_LINK" />.</translation>
 <translation id="1619887657840448962">Para tornar o Chrome mais seguro, desativamos a extensão a seguir, que não está listada na <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> e pode ter sido adicionada sem seu conhecimento.</translation>
 <translation id="162448658176061655">O Chrome verifica se há softwares indesejados uma vez por semana. Última verificação: há alguns segundos.</translation>
 <translation id="162629503687514352">Não foi possível sincronizar suas senhas no Chrome OS.</translation>
@@ -34,6 +35,7 @@
 <translation id="1734234790201236882">O Chrome salvará essa senha na sua Conta do Google. Você não precisará se lembrar dela.</translation>
 <translation id="174539241580958092">O Google Chrome não pôde sincronizar seus dados devido a um erro no login.</translation>
 <translation id="1759842336958782510">Chrome</translation>
+<translation id="1786003790898721085">Verifique se sua conta está conectada ao Chrome no <ph name="TARGET_DEVICE_NAME" /> e tente fazer o envio novamente.</translation>
 <translation id="1812689907177901597">Desative essa opção para fazer login em sites do Google, como o Gmail, sem fazer login no Chrome</translation>
 <translation id="1860536484129686729">O Chrome precisa de permissão para este site acessar sua câmera</translation>
 <translation id="1873233029667955273">O Google Chrome não é seu navegador padrão</translation>
@@ -78,6 +80,7 @@
 <translation id="3065168410429928842">Guia do Chrome</translation>
 <translation id="3080151273017101988">Executar aplicativos em segundo plano quando o Google Chrome estiver fechado</translation>
 <translation id="3089968997497233615">Há uma versão nova e mais segura do Google Chrome disponível.</translation>
+<translation id="3114643501466072395">Para verificar se suas outras senhas estão protegidas contra violações de dados e outros problemas de segurança, <ph name="BEGIN_LINK" />faça login no Chrome<ph name="END_LINK" />.</translation>
 <translation id="3127818369811890733">Não foi possível sincronizar seus dados no Chrome OS.</translation>
 <translation id="3149510190863420837">apps do Chrome</translation>
 <translation id="3360895254066713204">Auxiliar do Google Chrome</translation>
@@ -244,6 +247,7 @@
 <translation id="8344083974188970894">{NUM_MINS,plural, =1{O Chrome verifica se há softwares indesejados uma vez por semana. Última verificação: 1 minuto atrás.}one{O Chrome verifica se há softwares indesejados uma vez por semana. Última verificação: {NUM_MINS} minuto atrás.}other{O Chrome verifica se há softwares indesejados uma vez por semana. Última verificação: {NUM_MINS} minutos atrás.}}</translation>
 <translation id="8370517070665726704">Copyright <ph name="YEAR" /> Google LLC. Todos os direitos reservados.</translation>
 <translation id="840084489713044809">O Google Chrome quer exportar suas senhas.</translation>
+<translation id="8433638294851456451">Para enviar um número daqui para seu smartphone Android, faça login no Chrome nos dois dispositivos.</translation>
 <translation id="8498858610309223613">Uma atualização especial de segurança para o Google Chrome acabou de ser aplicada. Reinicie agora, e suas guias serão restauradas.</translation>
 <translation id="8521348052903287641">Regra interna do Google Chrome Dev que permite o tráfego mDNS.</translation>
 <translation id="8540666473246803645">Google Chrome</translation>
@@ -263,6 +267,7 @@
 <translation id="884296878221830158">Controla também qual página deve ser exibida quando você inicia o Chrome ou clica no botão "Página inicial".</translation>
 <translation id="8862326446509486874">Você não tem os direitos adequados para instalação no nível do sistema. Tente executar o instalador novamente como administrador.</translation>
 <translation id="8914504000324227558">Reiniciar o Google Chrome</translation>
+<translation id="8922193594870374009">Para enviar um número de <ph name="ORIGIN" /> ao seu smartphone Android, faça login no Chrome nos dois dispositivos.</translation>
 <translation id="8999208279178790196">{0,plural, =0{Uma atualização do Chrome está disponível}=1{Uma atualização do Chrome está disponível}one{Uma atualização do Chrome está disponível há # dia}other{Uma atualização do Chrome está disponível há # dias}}</translation>
 <translation id="9026991721384951619">O Chrome OS não pôde sincronizar seus dados porque os detalhes de login da sua conta estão desatualizados.</translation>
 <translation id="9067395829937117663">O Google Chrome requer o Windows 7 ou versão superior.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_pt-PT.xtb b/chrome/app/resources/google_chrome_strings_pt-PT.xtb
index dcf5fdf..83f4415a 100644
--- a/chrome/app/resources/google_chrome_strings_pt-PT.xtb
+++ b/chrome/app/resources/google_chrome_strings_pt-PT.xtb
@@ -21,6 +21,7 @@
 <translation id="1553358976309200471">Atualizar o Chrome</translation>
 <translation id="1587223624401073077">O Google Chrome está a utilizar a câmara.</translation>
 <translation id="1587325591171447154"><ph name="FILE_NAME" /> é perigoso, por isso o Chrome bloqueou-o.</translation>
+<translation id="1597911401261118146">Para verificar se as suas palavras-passe estão protegidas contra violação de dados e outros problemas de segurança, <ph name="BEGIN_LINK" />inicie sessão no Chrome<ph name="END_LINK" />.</translation>
 <translation id="1619887657840448962">Para tornar o Chrome mais seguro, desativámos a seguinte extensão, que não está listada na <ph name="IDS_EXTENSION_WEB_STORE_TITLE" />, e é possível que tenha sido adicionada sem o seu conhecimento.</translation>
 <translation id="162448658176061655">O Chrome verifica a existência de software indesejável uma vez por semana. Última verificação: há uns momentos.</translation>
 <translation id="162629503687514352">O Chrome OS não conseguiu sincronizar as suas palavras-passe.</translation>
@@ -34,6 +35,7 @@
 <translation id="1734234790201236882">O Chrome vai guardar esta palavra-passe na sua Conta Google. Não tem de a memorizar.</translation>
 <translation id="174539241580958092">O Google Chrome não conseguiu sincronizar os dados devido a um erro no início de sessão.</translation>
 <translation id="1759842336958782510">Chrome</translation>
+<translation id="1786003790898721085">Certifique-se de que tem sessão iniciada no Chrome no seu <ph name="TARGET_DEVICE_NAME" /> e, em seguida, tente enviar novamente.</translation>
 <translation id="1812689907177901597">Ao desativar esta opção, pode iniciar sessão nos sites Google como o Gmail sem iniciar sessão no Chrome.</translation>
 <translation id="1860536484129686729">O Chrome necessita de autorização de acesso à câmara para este site.</translation>
 <translation id="1873233029667955273">O Google Chrome não é o seu navegador predefinido.</translation>
@@ -78,6 +80,7 @@
 <translation id="3065168410429928842">Separador do Chrome</translation>
 <translation id="3080151273017101988">Continuar a executar aplicações em segundo plano quando o Google Chrome está fechado</translation>
 <translation id="3089968997497233615">Está disponível uma versão nova e mais segura do Google Chrome.</translation>
+<translation id="3114643501466072395">Para verificar se as suas outras palavras-passe estão protegidas contra violação de dados e outros problemas de segurança, <ph name="BEGIN_LINK" />inicie sessão no Chrome<ph name="END_LINK" />.</translation>
 <translation id="3127818369811890733">O Chrome OS não conseguiu sincronizar os seus dados.</translation>
 <translation id="3149510190863420837">Apps do Chrome</translation>
 <translation id="3360895254066713204">Ajudante do Chrome</translation>
@@ -245,6 +248,7 @@
 <translation id="8344083974188970894">{NUM_MINS,plural, =1{O Chrome verifica a existência de software indesejável uma vez por semana. Última verificação: há 1 minuto.}other{O Chrome verifica a existência de software indesejável uma vez por semana. Última verificação: há {NUM_MINS} minutos.}}</translation>
 <translation id="8370517070665726704">Copyright <ph name="YEAR" /> Google LLC. Todos os direitos reservados.</translation>
 <translation id="840084489713044809">O Google Chrome pretende exportar as suas palavras-passe.</translation>
+<translation id="8433638294851456451">Para enviar um número daqui para o seu telemóvel Android, inicie sessão no Chrome em ambos os dispositivos.</translation>
 <translation id="8498858610309223613">Acabou de ser instalada uma atualização de segurança especial para o Google Chrome. Reinicie agora e iremos restaurar os seus separadores.</translation>
 <translation id="8521348052903287641">Regra de importação para o Google Chrome Dev permitir o tráfego mDNS.</translation>
 <translation id="8540666473246803645">Google Chrome</translation>
@@ -264,6 +268,7 @@
 <translation id="884296878221830158">Também controla a página apresentada quando inicia o Chrome ou clica no botão Página Inicial.</translation>
 <translation id="8862326446509486874">Não tem os direitos adequados para uma instalação ao nível do sistema. Tente executar o programa de instalação novamente como Administrador.</translation>
 <translation id="8914504000324227558">Reiniciar o Chrome</translation>
+<translation id="8922193594870374009">Para enviar um número de <ph name="ORIGIN" /> para o seu telemóvel Android, inicie sessão no Chrome em ambos os dispositivos.</translation>
 <translation id="8999208279178790196">{0,plural, =0{Está disponível uma atualização do Chrome}=1{Está disponível uma atualização do Chrome}other{Está disponível uma atualização do Chrome há # dias}}</translation>
 <translation id="9026991721384951619">O Chrome OS não conseguiu sincronizar os dados porque os detalhes de início de sessão da sua conta estão desatualizados.</translation>
 <translation id="9067395829937117663">O Google Chrome requer o Windows 7 ou superior.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_sl.xtb b/chrome/app/resources/google_chrome_strings_sl.xtb
index 9f8a260..3712cd5 100644
--- a/chrome/app/resources/google_chrome_strings_sl.xtb
+++ b/chrome/app/resources/google_chrome_strings_sl.xtb
@@ -23,6 +23,7 @@
 <translation id="1553358976309200471">Posodobi Chrome</translation>
 <translation id="1587223624401073077">Google Chrome uporablja vašo kamero.</translation>
 <translation id="1587325591171447154">Datoteka <ph name="FILE_NAME" /> je nevarna, zato jo je Chrome blokiral.</translation>
+<translation id="1597911401261118146">Če želite preveriti, ali so gesla varna pred podatkovnimi kršitvami in drugimi varnostnimi težavami, <ph name="BEGIN_LINK" />se prijavite v Chrome<ph name="END_LINK" />.</translation>
 <translation id="1619887657840448962">Zaradi večje varnosti smo v Chromu onemogočili to razširitev, ki ni navedena tukaj in je bila morda dodana brez vaše vednosti: <ph name="IDS_EXTENSION_WEB_STORE_TITLE" />.</translation>
 <translation id="162448658176061655">Chrome enkrat tedensko preveri, ali je nameščena neželena programska oprema. Nazadnje preverjeno: Pravkar.</translation>
 <translation id="162629503687514352">Chrome OS ni mogel sinhronizirati gesel.</translation>
@@ -38,6 +39,7 @@
 <translation id="1734234790201236882">Chrome bo shranil to geslo v Google Računu. Ni si vam ga treba zapomniti.</translation>
 <translation id="174539241580958092">Google Chrome ni mogel sinhronizirati podatkov zaradi napake pri prijavi.</translation>
 <translation id="1759842336958782510">Chrome</translation>
+<translation id="1786003790898721085">Preverite, ali ste v napravi <ph name="TARGET_DEVICE_NAME" /> prijavljeni v Chrome, nato poskusite znova poslati.</translation>
 <translation id="1812689907177901597">Če to izklopite, se lahko prijavite na Googlovih spletnih mestih, kot je Gmail, ne da bi se morali prijaviti v Chrome</translation>
 <translation id="1860536484129686729">Chrome potrebuje dovoljenje za dostop do fotoaparata za to spletno mesto</translation>
 <translation id="1873233029667955273">Google Chrome ni privzeti brskalnik</translation>
@@ -82,6 +84,7 @@
 <translation id="3065168410429928842">Zavihek v Chromu</translation>
 <translation id="3080151273017101988">Nadaljuj izvajanje programov v ozadju, ko je Google Chrome zaprt</translation>
 <translation id="3089968997497233615">Na voljo je nova, varnejša različica Google Chroma.</translation>
+<translation id="3114643501466072395">Če želite preveriti, ali so druga gesla varna pred podatkovnimi kršitvami in drugimi varnostnimi težavami, <ph name="BEGIN_LINK" />se prijavite v Chrome<ph name="END_LINK" />.</translation>
 <translation id="3127818369811890733">Chrome OS ni mogel sinhronizirati podatkov.</translation>
 <translation id="3149510190863420837">Aplikacije za Chrome</translation>
 <translation id="3360895254066713204">Pomočnik za Chrome</translation>
@@ -253,6 +256,7 @@
 <translation id="8344083974188970894">{NUM_MINS,plural, =1{Chrome enkrat tedensko preveri, ali je nameščena neželena programska oprema. Nazadnje preverjeno: Pred 1 minuto.}one{Chrome enkrat tedensko preveri, ali je nameščena neželena programska oprema. Nazadnje preverjeno: Pred {NUM_MINS} minuto.}two{Chrome enkrat tedensko preveri, ali je nameščena neželena programska oprema. Nazadnje preverjeno: Pred {NUM_MINS} minutama.}few{Chrome enkrat tedensko preveri, ali je nameščena neželena programska oprema. Nazadnje preverjeno: Pred {NUM_MINS} minutami.}other{Chrome enkrat tedensko preveri, ali je nameščena neželena programska oprema. Nazadnje preverjeno: Pred {NUM_MINS} minutami.}}</translation>
 <translation id="8370517070665726704">Copyright <ph name="YEAR" /> Google LLC. Vse pravice pridržane.</translation>
 <translation id="840084489713044809">Google Chrome želi izvoziti gesla.</translation>
+<translation id="8433638294851456451">Če želite poslati telefonsko številko iz te naprave v telefon Android, se prijavite v Chrome v obeh napravah.</translation>
 <translation id="8498858610309223613">Pravkar je bila nameščena posebna varnostna posodobitev za Google Chrome. Znova ga zaženite (vaše zavihke bomo obnovili).</translation>
 <translation id="8521348052903287641">Pravilo za dohodni promet za Google Chrome Dev, ki dovoli promet mDNS.</translation>
 <translation id="8540666473246803645">Google Chrome</translation>
@@ -272,6 +276,7 @@
 <translation id="884296878221830158">Določa tudi, katera stran je prikazana, ko zaženete Chrome ali kliknete gumb za domačo stran.</translation>
 <translation id="8862326446509486874">Nimate ustreznih pravic za namestitev na ravni sistema. Poskusite znova zagnati namestitveni program kot skrbnik.</translation>
 <translation id="8914504000324227558">Znova zaženi Chrome</translation>
+<translation id="8922193594870374009">Če želite telefonsko številko iz naprave <ph name="ORIGIN" /> poslati v telefon Android, se prijavite v Chrome v obeh napravah.</translation>
 <translation id="8999208279178790196">{0,plural, =0{Posodobitev za Chrome je na voljo}=1{Posodobitev za Chrome je na voljo}one{Posodobitev za Chrome je na voljo že # dan}two{Posodobitev za Chrome je na voljo že # dneva}few{Posodobitev za Chrome je na voljo že # dni}other{Posodobitev za Chrome je na voljo že # dni}}</translation>
 <translation id="9026991721384951619">Chrome OS ni mogel sinhronizirati podatkov, ker so podatki za prijavo v račun zastareli.</translation>
 <translation id="9067395829937117663">Za Google Chrome potrebujete Windows 7 ali novejši.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_sr-Latn.xtb b/chrome/app/resources/google_chrome_strings_sr-Latn.xtb
index d16eed3..1e2ff5b 100644
--- a/chrome/app/resources/google_chrome_strings_sr-Latn.xtb
+++ b/chrome/app/resources/google_chrome_strings_sr-Latn.xtb
@@ -23,6 +23,7 @@
 <translation id="1553358976309200471">Ažuriraj Chrome</translation>
 <translation id="1587223624401073077">Google Chrome koristi kameru.</translation>
 <translation id="1587325591171447154">Datoteka <ph name="FILE_NAME" /> je opasna, pa ju je Chrome blokirao.</translation>
+<translation id="1597911401261118146">Da biste proverili da li su lozinke bezbedne od upada u podatke i drugih bezbednosnih problema, <ph name="BEGIN_LINK" />prijavite se u Chrome<ph name="END_LINK" />.</translation>
 <translation id="1619887657840448962">Da bismo učinili Chrome bezbednijim, onemogućili smo sledeći dodatak koji <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> ne navodi i koji je možda dodat bez vašeg znanja.</translation>
 <translation id="162448658176061655">Chrome proverava da li je prisutan neželjeni softver jednom nedeljno. Poslednji put provereno: malopre.</translation>
 <translation id="162629503687514352">Chrome OS nije uspeo da sinhronizuje lozinke.</translation>
@@ -38,6 +39,7 @@
 <translation id="1734234790201236882">Chrome će sačuvati ovu lozinku na Google nalogu. Nećete morati da je pamtite.</translation>
 <translation id="174539241580958092">Google Chrome ne može da sinhronizuje podatke zbog greške pri prijavljivanju.</translation>
 <translation id="1759842336958782510">Chrome</translation>
+<translation id="1786003790898721085">Uverite se da ste prijavljeni u Chrome na uređaju <ph name="TARGET_DEVICE_NAME" /> i probajte da pošaljete ponovo.</translation>
 <translation id="1812689907177901597">Kada to uključite, možete da se prijavljujete na Google sajtove, kao što je Gmail, ali se ne prijavljujete u Chrome</translation>
 <translation id="1860536484129686729">Chrome traži dozvolu da pristupi kameri za ovaj sajt</translation>
 <translation id="1873233029667955273">Google Chrome nije podrazumevani pregledač</translation>
@@ -82,6 +84,7 @@
 <translation id="3065168410429928842">Kartica Chrome</translation>
 <translation id="3080151273017101988">Nastavi sa pokretanjem aplikacija u pozadini kada se Google Chrome zatvori</translation>
 <translation id="3089968997497233615">Dostupna je nova, bezbednija verzija Google Chrome pregledača.</translation>
+<translation id="3114643501466072395">Da biste proverili da li su ostale lozinke bezbedne od upada u podatke i drugih bezbednosnih problema, <ph name="BEGIN_LINK" />prijavite se u Chrome<ph name="END_LINK" />.</translation>
 <translation id="3127818369811890733">Chrome OS nije uspeo da sinhronizuje podatke.</translation>
 <translation id="3149510190863420837">Chrome aplikacije</translation>
 <translation id="3360895254066713204">Chrome pomoćnik</translation>
@@ -253,6 +256,7 @@
 <translation id="8344083974188970894">{NUM_MINS,plural, =1{Chrome proverava da li je prisutan neželjeni softver jednom nedeljno. Poslednji put provereno: pre 1 minut.}one{Chrome proverava da li je prisutan neželjeni softver jednom nedeljno. Poslednji put provereno: pre {NUM_MINS} minut.}few{Chrome proverava da li je prisutan neželjeni softver jednom nedeljno. Poslednji put provereno: pre {NUM_MINS} minuta.}other{Chrome proverava da li je prisutan neželjeni softver jednom nedeljno. Poslednji put provereno: pre {NUM_MINS} minuta.}}</translation>
 <translation id="8370517070665726704">Autorska prava <ph name="YEAR" />. Google LLC. Sva prava zadržana.</translation>
 <translation id="840084489713044809">Google Chrome želi da izveze lozinke.</translation>
+<translation id="8433638294851456451">Da biste poslali broj sa ovog uređaja na Android telefon, prijavite se u Chrome na oba uređaja.</translation>
 <translation id="8498858610309223613">Posebno bezbednosno ažuriranje za Google Chrome je upravo primenjeno. Restartujte ga i vratićemo vam kartice.</translation>
 <translation id="8521348052903287641">Pravilo za dolazni saobraćaj za programersku verziju Google Chrome-a da biste omogućili mDNS saobraćaj.</translation>
 <translation id="8540666473246803645">Google Chrome</translation>
@@ -272,6 +276,7 @@
 <translation id="884296878221830158">Kontroliše i stranicu koja se prikazuje kada pokrenete Chrome ili kliknete na dugme Početak.</translation>
 <translation id="8862326446509486874">Nemate odgovarajuća prava za instalaciju na nivou sistema. Probajte ponovo da pokrenete program za instalaciju, ovoga puta kao administrator.</translation>
 <translation id="8914504000324227558">Ponovo pokreni Chrome</translation>
+<translation id="8922193594870374009">Da biste poslali broj sa <ph name="ORIGIN" /> na Android telefon, prijavite se u Chrome na oba uređaja.</translation>
 <translation id="8999208279178790196">{0,plural, =0{Ažuriranje za Chrome je dostupno}=1{Ažuriranje za Chrome je dostupno}one{Ažuriranje za Chrome je dostupno već # dan}few{Ažuriranje za Chrome je dostupno već # dana}other{Ažuriranje za Chrome je dostupno već # dana}}</translation>
 <translation id="9026991721384951619">Chrome OS ne može da sinhronizuje podatke zato što su podaci za prijavljivanje na nalog zastareli.</translation>
 <translation id="9067395829937117663">Za Google Chrome je potreban Windows 7 ili novija verzija.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_sr.xtb b/chrome/app/resources/google_chrome_strings_sr.xtb
index 0c572352..c60f8010 100644
--- a/chrome/app/resources/google_chrome_strings_sr.xtb
+++ b/chrome/app/resources/google_chrome_strings_sr.xtb
@@ -23,6 +23,7 @@
 <translation id="1553358976309200471">Ажурирај Chrome</translation>
 <translation id="1587223624401073077">Google Chrome користи камеру.</translation>
 <translation id="1587325591171447154">Датотека <ph name="FILE_NAME" /> је опасна, па ју је Chrome блокирао.</translation>
+<translation id="1597911401261118146">Да бисте проверили да ли су лозинке безбедне од упада у податке и других безбедносних проблема, <ph name="BEGIN_LINK" />пријавите се у Chrome<ph name="END_LINK" />.</translation>
 <translation id="1619887657840448962">Да бисмо учинили Chrome безбеднијим, онемогућили смо следећи додатак који <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> не наводи и који је можда додат без вашег знања.</translation>
 <translation id="162448658176061655">Chrome проверава да ли је присутан нежељени софтвер једном недељно. Последњи пут проверено: малопре.</translation>
 <translation id="162629503687514352">Chrome ОС није успео да синхронизује лозинке.</translation>
@@ -38,6 +39,7 @@
 <translation id="1734234790201236882">Chrome ће сачувати ову лозинку на Google налогу. Нећете морати да је памтите.</translation>
 <translation id="174539241580958092">Google Chrome не може да синхронизује податке због грешке при пријављивању.</translation>
 <translation id="1759842336958782510">Chrome</translation>
+<translation id="1786003790898721085">Уверите се да сте пријављени у Chrome на уређају <ph name="TARGET_DEVICE_NAME" /> и пробајте да пошаљете поново.</translation>
 <translation id="1812689907177901597">Када то укључите, можете да се пријављујете на Google сајтове, као што је Gmail, али се не пријављујете у Chrome</translation>
 <translation id="1860536484129686729">Chrome тражи дозволу да приступи камери за овај сајт</translation>
 <translation id="1873233029667955273">Google Chrome није подразумевани прегледач</translation>
@@ -82,6 +84,7 @@
 <translation id="3065168410429928842">Картица Chrome</translation>
 <translation id="3080151273017101988">Настави са покретањем апликација у позадини када се Google Chrome затвори</translation>
 <translation id="3089968997497233615">Доступна је нова, безбеднија верзија Google Chrome прегледача.</translation>
+<translation id="3114643501466072395">Да бисте проверили да ли су остале лозинке безбедне од упада у податке и других безбедносних проблема, <ph name="BEGIN_LINK" />пријавите се у Chrome<ph name="END_LINK" />.</translation>
 <translation id="3127818369811890733">Chrome ОС није успео да синхронизује податке.</translation>
 <translation id="3149510190863420837">Chrome апликације</translation>
 <translation id="3360895254066713204">Chrome помоћник</translation>
@@ -253,6 +256,7 @@
 <translation id="8344083974188970894">{NUM_MINS,plural, =1{Chrome проверава да ли је присутан нежељени софтвер једном недељно. Последњи пут проверено: пре 1 минут.}one{Chrome проверава да ли је присутан нежељени софтвер једном недељно. Последњи пут проверено: пре {NUM_MINS} минут.}few{Chrome проверава да ли је присутан нежељени софтвер једном недељно. Последњи пут проверено: пре {NUM_MINS} минута.}other{Chrome проверава да ли је присутан нежељени софтвер једном недељно. Последњи пут проверено: пре {NUM_MINS} минута.}}</translation>
 <translation id="8370517070665726704">Ауторска права <ph name="YEAR" />. Google LLC. Сва права задржана.</translation>
 <translation id="840084489713044809">Google Chrome жели да извезе лозинке.</translation>
+<translation id="8433638294851456451">Да бисте послали број са овог уређаја на Android телефон, пријавите се у Chrome на оба уређаја.</translation>
 <translation id="8498858610309223613">Посебно безбедносно ажурирање за Google Chrome је управо примењено. Рестартујте га и вратићемо вам картице.</translation>
 <translation id="8521348052903287641">Правило за долазни саобраћај за програмерску верзију Google Chrome-а да бисте омогућили mDNS саобраћај.</translation>
 <translation id="8540666473246803645">Google Chrome</translation>
@@ -272,6 +276,7 @@
 <translation id="884296878221830158">Контролише и страницу која се приказује када покренете Chrome или кликнете на дугме Почетак.</translation>
 <translation id="8862326446509486874">Немате одговарајућа права за инсталацију на нивоу система. Пробајте поново да покренете програм за инсталацију, овога пута као администратор.</translation>
 <translation id="8914504000324227558">Поново покрени Chrome</translation>
+<translation id="8922193594870374009">Да бисте послали број са <ph name="ORIGIN" /> на Android телефон, пријавите се у Chrome на оба уређаја.</translation>
 <translation id="8999208279178790196">{0,plural, =0{Ажурирање за Chrome је доступно}=1{Ажурирање за Chrome је доступно}one{Ажурирање за Chrome је доступно већ # дан}few{Ажурирање за Chrome је доступно већ # дана}other{Ажурирање за Chrome је доступно већ # дана}}</translation>
 <translation id="9026991721384951619">Chrome ОС не може да синхронизује податке зато што су подаци за пријављивање на налог застарели.</translation>
 <translation id="9067395829937117663">За Google Chrome је потребан Windows 7 или новија верзија.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_sv.xtb b/chrome/app/resources/google_chrome_strings_sv.xtb
index 94f3c50d..295be736 100644
--- a/chrome/app/resources/google_chrome_strings_sv.xtb
+++ b/chrome/app/resources/google_chrome_strings_sv.xtb
@@ -23,6 +23,7 @@
 <translation id="1553358976309200471">Uppdatera Chrome</translation>
 <translation id="1587223624401073077">Google Chrome använder din kamera.</translation>
 <translation id="1587325591171447154"><ph name="FILE_NAME" /> är skadlig och har blockerats av Chrome.</translation>
+<translation id="1597911401261118146"><ph name="BEGIN_LINK" />Logga in i Chrome<ph name="END_LINK" /> om du vill kontrollera att dina lösenord skyddas från dataintrång och andra säkerhetsproblem.</translation>
 <translation id="1619887657840448962">Vi har gjort Chromium säkrare genom att inaktivera följande tillägg som inte anges i <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> och som kan ha lagts till utan att du vet om det.</translation>
 <translation id="162448658176061655">Chrome söker efter oönskad programvara en gång i veckan. Senaste genomsökning: alldeles nyss.</translation>
 <translation id="162629503687514352">Det gick inte att synkronisera lösenord i Chrome OS.</translation>
@@ -38,6 +39,7 @@
 <translation id="1734234790201236882">Det här lösenordet sparas i ditt Google-konto. Du behöver inte komma ihåg det.</translation>
 <translation id="174539241580958092">Google Chrome kunde inte synkronisera data på grund av ett fel vid inloggningen.</translation>
 <translation id="1759842336958782510">Chrome</translation>
+<translation id="1786003790898721085">Se till att du är inloggad i Chrome på <ph name="TARGET_DEVICE_NAME" /> och försök skicka igen.</translation>
 <translation id="1812689907177901597">Om du inaktiverar detta kan du logga in på Googles webbplatser, till exempel Gmail, utan att logga in i Chrome</translation>
 <translation id="1860536484129686729">Du behöver ge Chrome behörighet att använda kameran på webbplatsen</translation>
 <translation id="1873233029667955273">Google Chrome är inte din standardwebbläsare</translation>
@@ -82,6 +84,7 @@
 <translation id="3065168410429928842">Chrome-flik</translation>
 <translation id="3080151273017101988">Fortsätt köra bakgrundsappar när Google Chrome avslutas</translation>
 <translation id="3089968997497233615">Det finns en ny, ännu säkrare version av Google Chrome.</translation>
+<translation id="3114643501466072395"><ph name="BEGIN_LINK" />Logga in i Chrome<ph name="END_LINK" /> om du vill kontrollera att dina andra lösenord skyddas från dataintrång och andra säkerhetsproblem.</translation>
 <translation id="3127818369811890733">Det gick inte att synkronisera data i Chrome OS.</translation>
 <translation id="3149510190863420837">Chrome-appar</translation>
 <translation id="3360895254066713204">Chrome Helper</translation>
@@ -254,6 +257,7 @@
 <translation id="8344083974188970894">{NUM_MINS,plural, =1{Chrome söker efter oönskad programvara en gång i veckan. Senaste genomsökning: 1 minut sedan.}other{Chrome söker efter oönskad programvara en gång i veckan. Senaste genomsökning: {NUM_MINS} minuter sedan.}}</translation>
 <translation id="8370517070665726704">Copyright <ph name="YEAR" /> Google LLC. Med ensamrätt.</translation>
 <translation id="840084489713044809">Lösenorden exporteras från Google Chrome.</translation>
+<translation id="8433638294851456451">Logga in på Chrome på båda enheterna om du vill skicka ett nummer från Android-telefonen.</translation>
 <translation id="8498858610309223613">En särskild säkerhetsuppdatering för Google Chrome installerades precis. Starta om webbläsaren nu. Flikarna återställs efteråt.</translation>
 <translation id="8521348052903287641">Regel som tillåter inkommande mDNS-trafik för Google Chrome Dev.</translation>
 <translation id="8540666473246803645">Google Chrome</translation>
@@ -273,6 +277,7 @@
 <translation id="884296878221830158">Det styr också vilken sida som visas när du startar Chrome eller klickar på hemknappen.</translation>
 <translation id="8862326446509486874">Du har inte behörighet att göra en installation på systemnivå. Försök köra installationsprogrammet igen som administratör.</translation>
 <translation id="8914504000324227558">Starta om Chrome</translation>
+<translation id="8922193594870374009">Logga in på Chrome på båda enheterna om du vill skicka ett nummer från <ph name="ORIGIN" /> till Android-telefonen.</translation>
 <translation id="8999208279178790196">{0,plural, =0{Det finns en uppdatering för Chrome}=1{Det finns en uppdatering för Chrome}other{Det finns en uppdatering för Chrome sedan # dagar}}</translation>
 <translation id="9026991721384951619">Det gick inte att synkronisera data med Chrome OS eftersom inloggningsuppgifterna för kontot är inaktuella.</translation>
 <translation id="9067395829937117663">För Google Chrome krävs Windows 7 eller senare.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_te.xtb b/chrome/app/resources/google_chrome_strings_te.xtb
index 9b741d6..f28e84b 100644
--- a/chrome/app/resources/google_chrome_strings_te.xtb
+++ b/chrome/app/resources/google_chrome_strings_te.xtb
@@ -21,6 +21,7 @@
 <translation id="1553358976309200471">Chromeని నవీకరించు</translation>
 <translation id="1587223624401073077">Google Chrome మీ కెమెరాను ఉపయోగిస్తోంది.</translation>
 <translation id="1587325591171447154"><ph name="FILE_NAME" /> హానికరం, కావున Chrome దాన్ని బ్లాక్ చేసింది.</translation>
+<translation id="1597911401261118146">డేటా ఉల్లంఘనల నుండి, ఇతర భద్రతా సమస్యల నుండి మీ పాస్‌వర్డ్‌లు సురక్షితంగా ఉన్నాయో లేదో చెక్ చేయడానికి, <ph name="BEGIN_LINK" />Chromeకు సైన్ ఇన్ చేయండి<ph name="END_LINK" />.</translation>
 <translation id="1619887657840448962">Chromeని సురక్షితం చేయడానికి, మేము క్రింది పొడిగింపుని నిలిపివేసాము, ఇది <ph name="IDS_EXTENSION_WEB_STORE_TITLE" />లో జాబితా చేయబడలేదు మరియు మీకు తెలియకుండా జోడించబడి ఉండవచ్చు.</translation>
 <translation id="162448658176061655">అవాంఛిత సాఫ్ట్‌వేర్ ఏదైనా ఉందా? అని వారానికి ఒకసారి Chromium తనిఖీ చేస్తుంది. చివరగా తనిఖీ చేసిన సమయం: ఒక క్షణం క్రితం.</translation>
 <translation id="162629503687514352">Chrome OS మీ పాస్‌వర్డ్‌లను సింక్ చేయలేకపోయింది.</translation>
@@ -34,6 +35,7 @@
 <translation id="1734234790201236882">Chrome ఈ పాస్‌వర్డ్‌ను మీ Google ఖాతాలో సేవ్ చేస్తుంది. మీరు దీనిని గుర్తుంచుకోవాల్సిన అవసరం లేదు.</translation>
 <translation id="174539241580958092">సైన్ ఇన్ చేయడంలో ఎర్రర్ ఏర్పడినందున Google Chrome మీ డేటాను సింక్ చేయలేకపోయింది.</translation>
 <translation id="1759842336958782510">Chrome</translation>
+<translation id="1786003790898721085">మీ <ph name="TARGET_DEVICE_NAME" />లో మీరు Chromeకు సైన్ ఇన్ చేశారని నిర్ధారించుకుని, ఆపై మళ్లీ పంపడానికి ట్రై చేయండి.</translation>
 <translation id="1812689907177901597">దీనిని ఆఫ్ చేయడం ద్వారా, మీరు Chromeకి సైన్ ఇన్ చేయకుండానే Gmail లాంటి Google సైట్‌లలో సైన్ ఇన్ చేయగలరు</translation>
 <translation id="1860536484129686729">ఈ సైట్ కోసం మీ కెమెరాను ఉపయోగించడానికి Chromeకు అనుమతి అవసరం</translation>
 <translation id="1873233029667955273">Google Chrome మీ ఆటోమేటిక్ బ్రౌజర్ కాదు</translation>
@@ -78,6 +80,7 @@
 <translation id="3065168410429928842">Chrome ట్యాబ్</translation>
 <translation id="3080151273017101988">Google Chromeను మూసివేసినపుడు, యాప్‌లను బ్యాక్‌గ్రౌండ్‌లో రన్ చేయడాన్ని కొనసాగించు</translation>
 <translation id="3089968997497233615">Google Chrome యొక్క కొత్తదైన, మరింత సురక్షిత వెర్షన్ అందుబాటులో ఉంది.</translation>
+<translation id="3114643501466072395">డేటా ఉల్లంఘనల నుండి, ఇతర భద్రతా సమస్యల నుండి మీ ఇతర పాస్‌వర్డ్‌లు సురక్షితంగా ఉన్నాయో లేదో చెక్ చేయడానికి, <ph name="BEGIN_LINK" />Chromeకు సైన్ ఇన్ చేయండి<ph name="END_LINK" />.</translation>
 <translation id="3127818369811890733">Chrome OS మీ డేటాను సింక్ చేయలేకపోయింది.</translation>
 <translation id="3149510190863420837">Chrome యాప్‌లు</translation>
 <translation id="3360895254066713204">Chrome సహాయకారుడు</translation>
@@ -245,6 +248,7 @@
 <translation id="8344083974188970894">{NUM_MINS,plural, =1{అవాంఛిత సాఫ్ట్‌వేర్ ఏదైనా ఉందా? అని వారానికి ఒకసారి Chromium తనిఖీ చేస్తుంది. చివరగా తనిఖీ చేసిన సమయం: 1 నిమిషం క్రితం.}other{అవాంఛిత సాఫ్ట్‌వేర్ ఏదైనా ఉందా? అని వారానికి ఒకసారి Chromium తనిఖీ చేస్తుంది. చివరగా తనిఖీ చేసిన సమయం: {NUM_MINS} నిమిషాల క్రితం.}}</translation>
 <translation id="8370517070665726704">కాపీరైట్ <ph name="YEAR" /> Google LLC. సర్వ హక్కులు ప్రత్యేకించబడ్డాయి.</translation>
 <translation id="840084489713044809">Google Chrome మీ పాస్‌వర్డ్‌లను ఎగుమతి చేయాలనుకుంటోంది.</translation>
+<translation id="8433638294851456451">ఇక్కడి నుండి మీ Android ఫోన్‌కు నంబర్‌ను పంపడానికి, రెండు పరికరాలలోని Chromeకు సైన్ ఇన్ చేయండి.</translation>
 <translation id="8498858610309223613">Google Chromeకి సంబంధించిన ప్రత్యేక భద్రతా అప్‌డేట్ వర్తింపజేయబడింది. ఇప్పుడే పునఃప్రారంభించండి, మేము మీ ట్యాబ్‌లను పునరుద్ధరిస్తాము.</translation>
 <translation id="8521348052903287641">mDNS ట్రాఫిక్‌ను అనుమతించడానికి Google Chrome డెవలపర్ కోసం ఇన్‌బౌండ్ నియమం.</translation>
 <translation id="8540666473246803645">Google Chrome</translation>
@@ -264,6 +268,7 @@
 <translation id="884296878221830158">ఇది మీరు Chromeను ప్రారంభించేటప్పుడు లేదా హోమ్ బటన్‌ను క్లిక్ చేసేటప్పుడు చూపబడే పేజీని కూడా నియంత్రిస్తుంది.</translation>
 <translation id="8862326446509486874">సిస్టమ్-స్థాయిలో ఇన్‌స్టాల్‌ చేయ‌డానికి మీకు సరైన హక్కులు లేవు. నిర్వాహకుడి లాగా ఇన్‌స్టాలర్‌ను మ‌ళ్లీ రన్ చేయ‌డానికి ప్రయత్నించండి.</translation>
 <translation id="8914504000324227558">Chromeను పునఃప్రారంభించు</translation>
+<translation id="8922193594870374009"><ph name="ORIGIN" /> నుండి మీ Android ఫోన్‌కు నంబర్‌ను పంపడానికి, రెండు పరికరాలలోని Chromeకు సైన్ ఇన్ చేయండి.</translation>
 <translation id="8999208279178790196">{0,plural, =0{ఒక Chrome అప్‌డేట్ అందుబాటులో ఉంది}=1{ఒక Chrome అప్‌డేట్ అందుబాటులో ఉంది}other{ఒక Chrome అప్‌డేట్ # రోజులుగా అందుబాటులో ఉంది}}</translation>
 <translation id="9026991721384951619">మీ ఖాతా సైన్-ఇన్ వివరాల గడువు ముగిసినందున Chrome OS మీ డేటాను సింక్ చేయ‌లేకపోయింది.</translation>
 <translation id="9067395829937117663">Google Chromeకి Windows 7 లేదా అంతకంటే ఆధునికమైనది ఉండటం ఆవశ్యకం.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_th.xtb b/chrome/app/resources/google_chrome_strings_th.xtb
index 95485a6..868ccf2 100644
--- a/chrome/app/resources/google_chrome_strings_th.xtb
+++ b/chrome/app/resources/google_chrome_strings_th.xtb
@@ -21,6 +21,7 @@
 <translation id="1553358976309200471">อัปเดต Chrome</translation>
 <translation id="1587223624401073077">Google Chrome ใช้กล้องของคุณอยู่</translation>
 <translation id="1587325591171447154"><ph name="FILE_NAME" /> เป็นอันตราย Chromium จึงบล็อกไว้</translation>
+<translation id="1597911401261118146"><ph name="BEGIN_LINK" />ลงชื่อเข้าใช้ Chrome<ph name="END_LINK" /> เพื่อตรวจสอบว่ารหัสผ่านของคุณไม่ได้รับผลกระทบจากการละเมิดข้อมูลและปัญหาด้านความปลอดภัยอื่นๆ</translation>
 <translation id="1619887657840448962">เพื่อให้ Chrome ปลอดภัยขึ้น เราได้ปิดส่วนขยายต่อไปนี้ซึ่งไม่ได้แสดงอยู่ใน <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> และอาจมีการเพิ่มเข้ามาโดยที่คุณไม่รู้ตัว</translation>
 <translation id="162448658176061655">Chrome จะตรวจหาซอฟต์แวร์ไม่พึงประสงค์สัปดาห์ละครั้ง ตรวจสอบล่าสุด: เมื่อสักครู่</translation>
 <translation id="162629503687514352">Chrome OS ซิงค์รหัสผ่านของคุณไม่ได้</translation>
@@ -34,6 +35,7 @@
 <translation id="1734234790201236882">Chrome จะบันทึกรหัสผ่านนี้ในบัญชี Google คุณจะได้ไม่ต้องจำรหัสผ่านเอง</translation>
 <translation id="174539241580958092">Google Chrome ไม่สามารถซิงค์ข้อมูลของคุณเนื่องจากเกิดข้อผิดพลาดในการลงชื่อเข้าใช้</translation>
 <translation id="1759842336958782510">Chrome</translation>
+<translation id="1786003790898721085">ตรวจสอบว่าคุณลงชื่อเข้าใช้ Chrome ใน <ph name="TARGET_DEVICE_NAME" /> แล้วลองส่งอีกครั้ง</translation>
 <translation id="1812689907177901597">เมื่อปิดการตั้งค่านี้ คุณจะลงชื่อเข้าใช้เว็บไซต์ของ Google อย่างเช่น Gmail ได้โดยไม่ต้องลงชื่อเข้าใช้ Chrome</translation>
 <translation id="1860536484129686729">Chrome ต้องการสิทธิ์เข้าถึงกล้องถ่ายรูปของคุณสำหรับเว็บไซต์นี้</translation>
 <translation id="1873233029667955273">Google Chrome ไม่ใช่เบราว์เซอร์เริ่มต้น</translation>
@@ -78,6 +80,7 @@
 <translation id="3065168410429928842">แท็บ Chrome</translation>
 <translation id="3080151273017101988">เรียกใช้แอปพลิเคชันเบื้องหลังต่อไปเมื่อ Google Chrome ถูกปิดลง</translation>
 <translation id="3089968997497233615">Google Chrome มีรุ่นใหม่ที่ปลอดภัยกว่าให้ใช้งานแล้ว</translation>
+<translation id="3114643501466072395"><ph name="BEGIN_LINK" />ลงชื่อเข้าใช้ Chrome<ph name="END_LINK" /> เพื่อตรวจสอบว่ารหัสผ่านรายการอื่นไม่ได้รับผลกระทบจากการละเมิดข้อมูลและปัญหาด้านความปลอดภัยอื่นๆ</translation>
 <translation id="3127818369811890733">Chrome OS ซิงค์ข้อมูลของคุณไม่ได้</translation>
 <translation id="3149510190863420837">แอป Chrome</translation>
 <translation id="3360895254066713204">ตัวช่วยเหลือของ Chrome</translation>
@@ -244,6 +247,7 @@
 <translation id="8344083974188970894">{NUM_MINS,plural, =1{Chrome จะตรวจหาซอฟต์แวร์ไม่พึงประสงค์สัปดาห์ละครั้ง ตรวจสอบล่าสุด: 1 นาทีที่ผ่านมา}other{Chrome จะตรวจหาซอฟต์แวร์ไม่พึงประสงค์สัปดาห์ละครั้ง ตรวจสอบล่าสุด: {NUM_MINS} นาทีที่ผ่านมา}}</translation>
 <translation id="8370517070665726704">ลิขสิทธิ์ <ph name="YEAR" /> Google LLC สงวนลิขสิทธิ์</translation>
 <translation id="840084489713044809">Google Chrome ต้องการส่งออกรหัสผ่านของคุณ</translation>
+<translation id="8433638294851456451">หากต้องการส่งหมายเลขจากที่นี่ไปยังโทรศัพท์ Android ให้ลงชื่อเข้าใช้ Chrome ในอุปกรณ์ทั้งสองเครื่อง</translation>
 <translation id="8498858610309223613">ระบบเพิ่งนำการอัปเดตความปลอดภัยพิเศษไปใช้กับ Google Chrome รีสตาร์ทเลย แล้วเราจะคืนค่าแท็บให้คุณ</translation>
 <translation id="8521348052903287641">กฎขาเข้าสำหรับ Google Chrome Dev เพื่ออนุญาตการเข้าชมแบบ mDNS</translation>
 <translation id="8540666473246803645">Google Chrome</translation>
@@ -263,6 +267,7 @@
 <translation id="884296878221830158">อีกทั้งยังควบคุมหน้าที่จะแสดงเมื่อคุณเปิด Chrome หรือคลิกปุ่ม "หน้าแรก"</translation>
 <translation id="8862326446509486874">คุณไม่มีสิทธิ์ในการติดตั้งระดับระบบ ทดลองใช้งานโปรแกรมติดตั้งอีกครั้งโดยกำหนดให้เป็นผู้ดูแลระบบ</translation>
 <translation id="8914504000324227558">เปิด Chrome ขึ้นใหม่</translation>
+<translation id="8922193594870374009">หากต้องการส่งหมายเลขจาก <ph name="ORIGIN" /> ไปยังโทรศัพท์ Android ให้ลงชื่อเข้าใช้ Chrome ในอุปกรณ์ทั้งสองเครื่อง</translation>
 <translation id="8999208279178790196">{0,plural, =0{มีอัปเดต Chrome พร้อมให้ใช้งาน}=1{มีอัปเดต Chrome พร้อมให้ใช้งาน}other{อัปเดต Chrome พร้อมให้ใช้งานมาแล้ว # วัน}}</translation>
 <translation id="9026991721384951619">Chrome OS ไม่สามารถซิงค์ข้อมูลของคุณเนื่องจากรายละเอียดการลงชื่อเข้าใช้บัญชีของคุณล้าสมัย</translation>
 <translation id="9067395829937117663">Google Chrome ต้องใช้ Windows 7 ขึ้นไป</translation>
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
index 29db2f6..f0353c39d 100644
--- a/chrome/browser/BUILD.gn
+++ b/chrome/browser/BUILD.gn
@@ -76,7 +76,6 @@
 buildflag_header("buildflags") {
   header = "buildflags.h"
   flags = [
-    "CLANG_PGO=$chrome_pgo_phase",
     "ENABLE_KALEIDOSCOPE=$enable_kaleidoscope",
     "USE_THIN_LTO=$use_thin_lto",
   ]
@@ -596,6 +595,8 @@
     "installable/installable_utils.h",
     "internal_auth.cc",
     "internal_auth.h",
+    "interstitials/chrome_settings_page_helper.cc",
+    "interstitials/chrome_settings_page_helper.h",
     "interstitials/enterprise_util.cc",
     "interstitials/enterprise_util.h",
     "intranet_redirect_detector.cc",
@@ -1880,6 +1881,7 @@
     "//base/util/values:values_util",
     "//build:branding_buildflags",
     "//build:chromeos_buildflags",
+    "//build/config/compiler:compiler_buildflags",
     "//cc",
     "//chrome:extra_resources",
     "//chrome:resources",
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
index 69f0b7d..3958565 100644
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -2707,6 +2707,9 @@
      FEATURE_VALUE_TYPE(display::features::kUseHDRTransferFunction)},
 #endif  // OS_CHROMEOS
 #if defined(OS_CHROMEOS)
+    {"screen-capture", flag_descriptions::kScreenCaptureTestName,
+     flag_descriptions::kScreenCaptureTestDescription, kOsCrOS,
+     FEATURE_VALUE_TYPE(ash::features::kCaptureMode)},
     {"ash-limit-alt-tab-to-active-desk",
      flag_descriptions::kLimitAltTabToActiveDeskName,
      flag_descriptions::kLimitAltTabToActiveDeskDescription, kOsCrOS,
@@ -4347,10 +4350,6 @@
         // defined(OS_CHROMEOS)
 
 #if !defined(OS_ANDROID)
-    {"ntp-dismiss-promos", flag_descriptions::kNtpDismissPromosName,
-     flag_descriptions::kNtpDismissPromosDescription, kOsDesktop,
-     FEATURE_VALUE_TYPE(ntp_features::kDismissPromos)},
-
     {"ntp-iframe-one-google-bar", flag_descriptions::kNtpIframeOneGoogleBarName,
      flag_descriptions::kNtpIframeOneGoogleBarDescription, kOsDesktop,
      FEATURE_VALUE_TYPE(ntp_features::kIframeOneGoogleBar)},
@@ -4360,15 +4359,6 @@
      flag_descriptions::kNtpOneGoogleBarModalOverlaysDescription, kOsDesktop,
      FEATURE_VALUE_TYPE(ntp_features::kOneGoogleBarModalOverlays)},
 
-    {"ntp-realbox", flag_descriptions::kNtpRealboxName,
-     flag_descriptions::kNtpRealboxDescription, kOsDesktop,
-     FEATURE_VALUE_TYPE(ntp_features::kRealbox)},
-
-    {"ntp-realbox-match-omnibox-theme",
-     flag_descriptions::kNtpRealboxMatchOmniboxThemeName,
-     flag_descriptions::kNtpRealboxMatchOmniboxThemeDescription, kOsDesktop,
-     FEATURE_VALUE_TYPE(ntp_features::kRealboxMatchOmniboxTheme)},
-
     {"ntp-repeatable-queries", flag_descriptions::kNtpRepeatableQueriesName,
      flag_descriptions::kNtpRepeatableQueriesDescription, kOsDesktop,
      FEATURE_VALUE_TYPE(ntp_features::kNtpRepeatableQueries)},
@@ -5370,6 +5360,10 @@
      flag_descriptions::kPhoneHubDescription, kOsCrOS,
      FEATURE_VALUE_TYPE(chromeos::features::kPhoneHub)},
 
+    {"enable-phone-hub-use-ble", flag_descriptions::kPhoneHubUseBleName,
+     flag_descriptions::kPhoneHubUseBleDescription, kOsCrOS,
+     FEATURE_VALUE_TYPE(chromeos::features::kPhoneHubUseBle)},
+
     {"wifi-sync-android", flag_descriptions::kWifiSyncAndroidName,
      flag_descriptions::kWifiSyncAndroidDescription, kOsCrOS,
      FEATURE_VALUE_TYPE(chromeos::features::kWifiSyncAndroid)},
diff --git a/chrome/browser/android/reading_list/reading_list_manager_factory.cc b/chrome/browser/android/reading_list/reading_list_manager_factory.cc
index f42604ee..ddcc299 100644
--- a/chrome/browser/android/reading_list/reading_list_manager_factory.cc
+++ b/chrome/browser/android/reading_list/reading_list_manager_factory.cc
@@ -6,13 +6,11 @@
 
 #include <memory>
 
-#include "chrome/browser/profiles/profile_key.h"
-#include "chrome/browser/profiles/profile_manager.h"
 #include "chrome/browser/reading_list/android/empty_reading_list_manager.h"
 #include "chrome/browser/reading_list/android/reading_list_manager_impl.h"
 #include "chrome/browser/ui/read_later/reading_list_model_factory.h"
 #include "chrome/browser/ui/ui_features.h"
-#include "components/keyed_service/core/simple_dependency_manager.h"
+#include "components/keyed_service/content/browser_context_dependency_manager.h"
 
 // static
 ReadingListManagerFactory* ReadingListManagerFactory::GetInstance() {
@@ -20,29 +18,27 @@
 }
 
 // static
-ReadingListManager* ReadingListManagerFactory::GetForKey(
-    SimpleFactoryKey* key) {
+ReadingListManager* ReadingListManagerFactory::GetForBrowserContext(
+    content::BrowserContext* context) {
   return static_cast<ReadingListManager*>(
-      GetInstance()->GetServiceForKey(key, /*create=*/true));
+      GetInstance()->GetServiceForBrowserContext(context, /*create=*/true));
 }
 
 ReadingListManagerFactory::ReadingListManagerFactory()
-    : SimpleKeyedServiceFactory("ReadingListManager",
-                                SimpleDependencyManager::GetInstance()) {
+    : BrowserContextKeyedServiceFactory(
+          "ReadingListManager",
+          BrowserContextDependencyManager::GetInstance()) {
   DependsOn(ReadingListModelFactory::GetInstance());
 }
 
 ReadingListManagerFactory::~ReadingListManagerFactory() = default;
 
-std::unique_ptr<KeyedService>
-ReadingListManagerFactory::BuildServiceInstanceFor(
-    SimpleFactoryKey* key) const {
+KeyedService* ReadingListManagerFactory::BuildServiceInstanceFor(
+    content::BrowserContext* context) const {
   if (!base::FeatureList::IsEnabled(features::kReadLater))
-    return std::make_unique<EmptyReadingListManager>();
+    return new EmptyReadingListManager();
 
-  auto* profile = ProfileManager::GetProfileFromProfileKey(
-      ProfileKey::FromSimpleFactoryKey(key));
   auto* reading_list_model =
-      ReadingListModelFactory::GetForBrowserContext(profile);
-  return std::make_unique<ReadingListManagerImpl>(reading_list_model);
+      ReadingListModelFactory::GetForBrowserContext(context);
+  return new ReadingListManagerImpl(reading_list_model);
 }
diff --git a/chrome/browser/android/reading_list/reading_list_manager_factory.h b/chrome/browser/android/reading_list/reading_list_manager_factory.h
index c3965ef..45e202d 100644
--- a/chrome/browser/android/reading_list/reading_list_manager_factory.h
+++ b/chrome/browser/android/reading_list/reading_list_manager_factory.h
@@ -6,15 +6,16 @@
 #define CHROME_BROWSER_ANDROID_READING_LIST_READING_LIST_MANAGER_FACTORY_H_
 
 #include "base/memory/singleton.h"
-#include "components/keyed_service/core/simple_keyed_service_factory.h"
+#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
 
 class ReadingListManager;
 
 // A factory to create the ReadingListManager singleton.
-class ReadingListManagerFactory : public SimpleKeyedServiceFactory {
+class ReadingListManagerFactory : public BrowserContextKeyedServiceFactory {
  public:
   static ReadingListManagerFactory* GetInstance();
-  static ReadingListManager* GetForKey(SimpleFactoryKey* key);
+  static ReadingListManager* GetForBrowserContext(
+      content::BrowserContext* context);
 
  private:
   friend struct base::DefaultSingletonTraits<ReadingListManagerFactory>;
@@ -26,8 +27,8 @@
   ReadingListManagerFactory& operator=(const ReadingListManagerFactory&) =
       delete;
 
-  std::unique_ptr<KeyedService> BuildServiceInstanceFor(
-      SimpleFactoryKey* key) const override;
+  KeyedService* BuildServiceInstanceFor(
+      content::BrowserContext* context) const override;
 };
 
 #endif  // CHROME_BROWSER_ANDROID_READING_LIST_READING_LIST_MANAGER_FACTORY_H_
diff --git a/chrome/browser/apps/app_service/borealis_apps.cc b/chrome/browser/apps/app_service/borealis_apps.cc
index d129ae5..1d59629 100644
--- a/chrome/browser/apps/app_service/borealis_apps.cc
+++ b/chrome/browser/apps/app_service/borealis_apps.cc
@@ -7,6 +7,8 @@
 #include "ash/public/cpp/app_menu_constants.h"
 #include "chrome/browser/apps/app_service/app_icon_factory.h"
 #include "chrome/browser/apps/app_service/menu_util.h"
+#include "chrome/browser/chromeos/borealis/borealis_features.h"
+#include "chrome/browser/chromeos/borealis/borealis_features_factory.h"
 #include "chrome/browser/chromeos/borealis/borealis_util.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/webui/app_management/app_management.mojom.h"
@@ -64,7 +66,9 @@
     mojo::PendingRemote<apps::mojom::Subscriber> subscriber_remote,
     apps::mojom::ConnectOptionsPtr opts) {
   std::vector<apps::mojom::AppPtr> apps;
-  apps.push_back(GetBorealisLauncher(profile_, borealis::IsBorealisAllowed()));
+  apps.push_back(GetBorealisLauncher(
+      profile_,
+      borealis::BorealisFeaturesFactory::GetForProfile(profile_)->IsAllowed()));
 
   mojo::Remote<apps::mojom::Subscriber> subscriber(
       std::move(subscriber_remote));
@@ -95,7 +99,8 @@
                           apps::mojom::LaunchSource launch_source,
                           int64_t display_id) {
   DCHECK_EQ(borealis::kBorealisAppId, app_id);
-  DCHECK_EQ(borealis::IsBorealisAllowed(), true);
+  DCHECK(
+      borealis::BorealisFeaturesFactory::GetForProfile(profile_)->IsAllowed());
   borealis::ShowBorealisInstallerView(profile_);
 }
 
diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc
index bb8a16f7..9bf2c19 100644
--- a/chrome/browser/chrome_content_browser_client.cc
+++ b/chrome/browser/chrome_content_browser_client.cc
@@ -4449,7 +4449,6 @@
 void ChromeContentBrowserClient::RegisterNonNetworkNavigationURLLoaderFactories(
     int frame_tree_node_id,
     base::UkmSourceId ukm_source_id,
-    NonNetworkURLLoaderFactoryDeprecatedMap* uniquely_owned_factories,
     NonNetworkURLLoaderFactoryMap* factories) {
 #if BUILDFLAG(ENABLE_EXTENSIONS) || defined(OS_CHROMEOS)
   content::WebContents* web_contents =
@@ -4608,7 +4607,6 @@
     RegisterNonNetworkSubresourceURLLoaderFactories(
         int render_process_id,
         int render_frame_id,
-        NonNetworkURLLoaderFactoryDeprecatedMap* uniquely_owned_factories,
         NonNetworkURLLoaderFactoryMap* factories) {
 #if defined(OS_CHROMEOS) || BUILDFLAG(ENABLE_EXTENSIONS)
   content::RenderFrameHost* frame_host =
diff --git a/chrome/browser/chrome_content_browser_client.h b/chrome/browser/chrome_content_browser_client.h
index 30171cdc..3252055 100644
--- a/chrome/browser/chrome_content_browser_client.h
+++ b/chrome/browser/chrome_content_browser_client.h
@@ -465,7 +465,6 @@
   void RegisterNonNetworkNavigationURLLoaderFactories(
       int frame_tree_node_id,
       base::UkmSourceId ukm_source_id,
-      NonNetworkURLLoaderFactoryDeprecatedMap* uniquely_owned_factories,
       NonNetworkURLLoaderFactoryMap* factories) override;
   void RegisterNonNetworkWorkerMainResourceURLLoaderFactories(
       content::BrowserContext* browser_context,
@@ -476,7 +475,6 @@
   void RegisterNonNetworkSubresourceURLLoaderFactories(
       int render_process_id,
       int render_frame_id,
-      NonNetworkURLLoaderFactoryDeprecatedMap* uniquely_owned_factories,
       NonNetworkURLLoaderFactoryMap* factories) override;
   bool WillCreateURLLoaderFactory(
       content::BrowserContext* browser_context,
diff --git a/chrome/browser/chromeos/BUILD.gn b/chrome/browser/chromeos/BUILD.gn
index dab6dc2..0524dccf 100644
--- a/chrome/browser/chromeos/BUILD.gn
+++ b/chrome/browser/chromeos/BUILD.gn
@@ -829,12 +829,18 @@
     "bluetooth/debug_logs_manager_factory.h",
     "boot_times_recorder.cc",
     "boot_times_recorder.h",
+    "borealis/borealis_features.cc",
+    "borealis/borealis_features.h",
+    "borealis/borealis_features_factory.cc",
+    "borealis/borealis_features_factory.h",
     "borealis/borealis_installer.cc",
     "borealis/borealis_installer.h",
     "borealis/borealis_installer_factory.cc",
     "borealis/borealis_installer_factory.h",
     "borealis/borealis_installer_impl.cc",
     "borealis/borealis_installer_impl.h",
+    "borealis/borealis_prefs.cc",
+    "borealis/borealis_prefs.h",
     "borealis/borealis_util.cc",
     "borealis/borealis_util.h",
     "browser_context_keyed_service_factories.cc",
@@ -3192,6 +3198,7 @@
     "authpolicy/authpolicy_helper.unittest.cc",
     "base/file_flusher_unittest.cc",
     "bluetooth/debug_logs_manager_unittest.cc",
+    "borealis/borealis_features_unittest.cc",
     "borealis/borealis_installer_unittest.cc",
     "cert_provisioning/cert_provisioning_invalidator_unittest.cc",
     "cert_provisioning/cert_provisioning_platform_keys_helpers_unittest.cc",
diff --git a/chrome/browser/chromeos/borealis/borealis_features.cc b/chrome/browser/chromeos/borealis/borealis_features.cc
new file mode 100644
index 0000000..60cae446
--- /dev/null
+++ b/chrome/browser/chromeos/borealis/borealis_features.cc
@@ -0,0 +1,29 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/chromeos/borealis/borealis_features.h"
+
+#include "chrome/browser/chromeos/borealis/borealis_features_factory.h"
+#include "chrome/browser/chromeos/borealis/borealis_prefs.h"
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/common/chrome_features.h"
+#include "components/prefs/pref_service.h"
+
+namespace borealis {
+
+BorealisFeatures::BorealisFeatures(Profile* profile) : profile_(profile) {}
+
+BorealisFeatures::~BorealisFeatures() = default;
+
+bool BorealisFeatures::IsAllowed() {
+  return base::FeatureList::IsEnabled(features::kBorealis);
+}
+
+bool BorealisFeatures::IsEnabled() {
+  if (!IsAllowed())
+    return false;
+  return profile_->GetPrefs()->GetBoolean(prefs::kBorealisInstalledOnDevice);
+}
+
+}  // namespace borealis
diff --git a/chrome/browser/chromeos/borealis/borealis_features.h b/chrome/browser/chromeos/borealis/borealis_features.h
new file mode 100644
index 0000000..53645e3
--- /dev/null
+++ b/chrome/browser/chromeos/borealis/borealis_features.h
@@ -0,0 +1,34 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_CHROMEOS_BOREALIS_BOREALIS_FEATURES_H_
+#define CHROME_BROWSER_CHROMEOS_BOREALIS_BOREALIS_FEATURES_H_
+
+#include "components/keyed_service/core/keyed_service.h"
+
+class Profile;
+
+namespace borealis {
+
+class BorealisFeatures : public KeyedService {
+ public:
+  // Creates a per-profile instance of the feature-checker for borealis.
+  explicit BorealisFeatures(Profile* profile);
+
+  ~BorealisFeatures() override;
+
+  // Returns true if borealis can be installed on the profile associated with
+  // this feature check.
+  bool IsAllowed();
+
+  // Returns true if borealis has been installed and can be run in the profile.
+  bool IsEnabled();
+
+ private:
+  Profile* profile_;
+};
+
+}  // namespace borealis
+
+#endif  // CHROME_BROWSER_CHROMEOS_BOREALIS_BOREALIS_FEATURES_H_
diff --git a/chrome/browser/chromeos/borealis/borealis_features_factory.cc b/chrome/browser/chromeos/borealis/borealis_features_factory.cc
new file mode 100644
index 0000000..730598b
--- /dev/null
+++ b/chrome/browser/chromeos/borealis/borealis_features_factory.cc
@@ -0,0 +1,35 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/chromeos/borealis/borealis_features_factory.h"
+
+#include "chrome/browser/profiles/profile.h"
+#include "components/keyed_service/content/browser_context_dependency_manager.h"
+
+namespace borealis {
+BorealisFeatures* BorealisFeaturesFactory::GetForProfile(Profile* profile) {
+  return static_cast<BorealisFeatures*>(
+      GetInstance()->GetServiceForBrowserContext(profile,
+                                                 /* create */ true));
+}
+
+BorealisFeaturesFactory* BorealisFeaturesFactory::GetInstance() {
+  static base::NoDestructor<BorealisFeaturesFactory> factory;
+  return factory.get();
+}
+
+// This service does not depend on any other services.
+BorealisFeaturesFactory::BorealisFeaturesFactory()
+    : BrowserContextKeyedServiceFactory(
+          "BorealisFeaturesService",
+          BrowserContextDependencyManager::GetInstance()) {}
+
+BorealisFeaturesFactory::~BorealisFeaturesFactory() = default;
+
+KeyedService* BorealisFeaturesFactory::BuildServiceInstanceFor(
+    content::BrowserContext* context) const {
+  return new BorealisFeatures(Profile::FromBrowserContext(context));
+}
+
+}  // namespace borealis
diff --git a/chrome/browser/chromeos/borealis/borealis_features_factory.h b/chrome/browser/chromeos/borealis/borealis_features_factory.h
new file mode 100644
index 0000000..5798c19
--- /dev/null
+++ b/chrome/browser/chromeos/borealis/borealis_features_factory.h
@@ -0,0 +1,40 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_CHROMEOS_BOREALIS_BOREALIS_FEATURES_FACTORY_H_
+#define CHROME_BROWSER_CHROMEOS_BOREALIS_BOREALIS_FEATURES_FACTORY_H_
+
+#include "base/no_destructor.h"
+#include "chrome/browser/chromeos/borealis/borealis_features.h"
+#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+
+namespace borealis {
+
+// Implementation of the factory used to access profile-keyed instances of the
+// features service.
+class BorealisFeaturesFactory : public BrowserContextKeyedServiceFactory {
+ public:
+  static BorealisFeatures* GetForProfile(Profile* profile);
+
+  static BorealisFeaturesFactory* GetInstance();
+
+  // Can not be moved or copied.
+  BorealisFeaturesFactory(const BorealisFeaturesFactory&) = delete;
+  BorealisFeaturesFactory(BorealisFeaturesFactory&&) = delete;
+  BorealisFeaturesFactory& operator=(const BorealisFeaturesFactory&) = delete;
+  BorealisFeaturesFactory& operator=(BorealisFeaturesFactory&&) = delete;
+
+ private:
+  friend base::NoDestructor<BorealisFeaturesFactory>;
+
+  BorealisFeaturesFactory();
+  ~BorealisFeaturesFactory() override;
+
+  KeyedService* BuildServiceInstanceFor(
+      content::BrowserContext* context) const override;
+};
+
+}  // namespace borealis
+
+#endif  // CHROME_BROWSER_CHROMEOS_BOREALIS_BOREALIS_FEATURES_FACTORY_H_
diff --git a/chrome/browser/chromeos/borealis/borealis_features_unittest.cc b/chrome/browser/chromeos/borealis/borealis_features_unittest.cc
new file mode 100644
index 0000000..d5db4d6
--- /dev/null
+++ b/chrome/browser/chromeos/borealis/borealis_features_unittest.cc
@@ -0,0 +1,50 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/chromeos/borealis/borealis_features.h"
+
+#include "base/test/scoped_feature_list.h"
+#include "chrome/browser/chromeos/borealis/borealis_features_factory.h"
+#include "chrome/browser/chromeos/borealis/borealis_prefs.h"
+#include "chrome/common/chrome_features.h"
+#include "chrome/test/base/testing_profile.h"
+#include "components/prefs/pref_service.h"
+#include "content/public/test/browser_task_environment.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace borealis {
+namespace {
+
+class BorealisFeaturesTest : public testing::Test {
+ protected:
+  content::BrowserTaskEnvironment task_environment_;
+  TestingProfile profile_;
+};
+
+TEST_F(BorealisFeaturesTest, DisallowedWhenFeatureIsDisabled) {
+  base::test::ScopedFeatureList features;
+  features.InitAndDisableFeature(features::kBorealis);
+  EXPECT_FALSE(BorealisFeaturesFactory::GetForProfile(&profile_)->IsAllowed());
+}
+
+TEST_F(BorealisFeaturesTest, AllowedWhenFeatureIsEnabled) {
+  base::test::ScopedFeatureList features;
+  features.InitAndEnableFeature(features::kBorealis);
+  EXPECT_TRUE(BorealisFeaturesFactory::GetForProfile(&profile_)->IsAllowed());
+}
+
+TEST_F(BorealisFeaturesTest, EnablednessDependsOnInstallation) {
+  base::test::ScopedFeatureList features;
+  features.InitAndEnableFeature(features::kBorealis);
+
+  // The pref is false by default
+  EXPECT_FALSE(BorealisFeaturesFactory::GetForProfile(&profile_)->IsEnabled());
+
+  profile_.GetPrefs()->SetBoolean(prefs::kBorealisInstalledOnDevice, true);
+
+  EXPECT_TRUE(BorealisFeaturesFactory::GetForProfile(&profile_)->IsEnabled());
+}
+
+}  // namespace
+}  // namespace borealis
diff --git a/chrome/browser/chromeos/borealis/borealis_installer_factory.cc b/chrome/browser/chromeos/borealis/borealis_installer_factory.cc
index 1f1111ed..3525b9d 100644
--- a/chrome/browser/chromeos/borealis/borealis_installer_factory.cc
+++ b/chrome/browser/chromeos/borealis/borealis_installer_factory.cc
@@ -35,7 +35,7 @@
 
 KeyedService* BorealisInstallerFactory::BuildServiceInstanceFor(
     content::BrowserContext* context) const {
-  return new BorealisInstallerImpl();
+  return new BorealisInstallerImpl(Profile::FromBrowserContext(context));
 }
 
 content::BrowserContext* BorealisInstallerFactory::GetBrowserContextToUse(
diff --git a/chrome/browser/chromeos/borealis/borealis_installer_impl.cc b/chrome/browser/chromeos/borealis/borealis_installer_impl.cc
index 2ce67455..3411d770 100644
--- a/chrome/browser/chromeos/borealis/borealis_installer_impl.cc
+++ b/chrome/browser/chromeos/borealis/borealis_installer_impl.cc
@@ -5,12 +5,18 @@
 #include "chrome/browser/chromeos/borealis/borealis_installer_impl.h"
 
 #include "base/bind.h"
+#include "chrome/browser/chromeos/borealis/borealis_features.h"
+#include "chrome/browser/chromeos/borealis/borealis_features_factory.h"
 #include "chrome/browser/chromeos/borealis/borealis_util.h"
 #include "content/public/browser/browser_thread.h"
 
 namespace borealis {
 
-BorealisInstallerImpl::BorealisInstallerImpl() = default;
+BorealisInstallerImpl::BorealisInstallerImpl(Profile* profile)
+    : state_(State::kIdle),
+      installing_state_(InstallingState::kInactive),
+      profile_(profile),
+      weak_ptr_factory_(this) {}
 
 BorealisInstallerImpl::~BorealisInstallerImpl() = default;
 
@@ -19,7 +25,7 @@
 }
 
 void BorealisInstallerImpl::Start() {
-  if (!IsBorealisAllowed()) {
+  if (!BorealisFeaturesFactory::GetForProfile(profile_)->IsAllowed()) {
     LOG(ERROR) << "Installation of Borealis cannot be started because "
                << "Borealis is not allowed.";
     InstallationEnded(InstallationResult::kNotAllowed);
diff --git a/chrome/browser/chromeos/borealis/borealis_installer_impl.h b/chrome/browser/chromeos/borealis/borealis_installer_impl.h
index dfdea00e..457ce49 100644
--- a/chrome/browser/chromeos/borealis/borealis_installer_impl.h
+++ b/chrome/browser/chromeos/borealis/borealis_installer_impl.h
@@ -8,6 +8,8 @@
 #include "chrome/browser/chromeos/borealis/borealis_installer.h"
 #include "chromeos/dbus/dlcservice/dlcservice_client.h"
 
+class Profile;
+
 namespace borealis {
 
 // This class is responsible for installing the Borealis VM. Currently
@@ -16,7 +18,7 @@
 // chrome/browser/ui/views/borealis/borealis_installer_view.h.
 class BorealisInstallerImpl : public BorealisInstaller {
  public:
-  BorealisInstallerImpl();
+  explicit BorealisInstallerImpl(Profile* profile);
 
   // Disallow copy and assign.
   BorealisInstallerImpl(const BorealisInstallerImpl&) = delete;
@@ -51,11 +53,12 @@
   void OnDlcInstallationCompleted(
       const chromeos::DlcserviceClient::InstallResult& install_result);
 
-  State state_ = State::kIdle;
-  InstallingState installing_state_ = InstallingState::kInactive;
-  double progress_ = 0;
+  State state_;
+  InstallingState installing_state_;
+  double progress_;
+  Profile* profile_;
 
-  base::WeakPtrFactory<BorealisInstallerImpl> weak_ptr_factory_{this};
+  base::WeakPtrFactory<BorealisInstallerImpl> weak_ptr_factory_;
 };
 
 }  // namespace borealis
diff --git a/chrome/browser/chromeos/borealis/borealis_prefs.cc b/chrome/browser/chromeos/borealis/borealis_prefs.cc
new file mode 100644
index 0000000..5555855
--- /dev/null
+++ b/chrome/browser/chromeos/borealis/borealis_prefs.cc
@@ -0,0 +1,18 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/chromeos/borealis/borealis_prefs.h"
+#include "components/prefs/pref_registry_simple.h"
+
+namespace borealis {
+namespace prefs {
+
+const char kBorealisInstalledOnDevice[] = "borealis.installed_on_device";
+
+void RegisterProfilePrefs(PrefRegistrySimple* registry) {
+  registry->RegisterBooleanPref(kBorealisInstalledOnDevice, false);
+}
+
+}  // namespace prefs
+}  // namespace borealis
diff --git a/chrome/browser/chromeos/borealis/borealis_prefs.h b/chrome/browser/chromeos/borealis/borealis_prefs.h
new file mode 100644
index 0000000..af2baa0
--- /dev/null
+++ b/chrome/browser/chromeos/borealis/borealis_prefs.h
@@ -0,0 +1,22 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_CHROMEOS_BOREALIS_BOREALIS_PREFS_H_
+#define CHROME_BROWSER_CHROMEOS_BOREALIS_BOREALIS_PREFS_H_
+
+class PrefRegistrySimple;
+
+namespace borealis {
+namespace prefs {
+
+// A boolean pref which records whether borealis has been successfully installed
+// on the device.
+extern const char kBorealisInstalledOnDevice[];
+
+void RegisterProfilePrefs(PrefRegistrySimple* registry);
+
+}  // namespace prefs
+}  // namespace borealis
+
+#endif  // CHROME_BROWSER_CHROMEOS_BOREALIS_BOREALIS_PREFS_H_
diff --git a/chrome/browser/chromeos/borealis/borealis_util.cc b/chrome/browser/chromeos/borealis/borealis_util.cc
index 717a92c..8a368857 100644
--- a/chrome/browser/chromeos/borealis/borealis_util.cc
+++ b/chrome/browser/chromeos/borealis/borealis_util.cc
@@ -4,16 +4,9 @@
 
 #include "chrome/browser/chromeos/borealis/borealis_util.h"
 
-#include "chrome/common/chrome_features.h"
-
 namespace borealis {
 
 const char kBorealisAppId[] = "dkecggknbdokeipkgnhifhiokailichf";
 const char kBorealisDlcName[] = "borealis-dlc";
 
-bool IsBorealisAllowed() {
-  // Check that the Borealis feature is enabled.
-  return base::FeatureList::IsEnabled(features::kBorealis);
-}
-
 }  // namespace borealis
diff --git a/chrome/browser/chromeos/borealis/borealis_util.h b/chrome/browser/chromeos/borealis/borealis_util.h
index f2ff877..7dc6fe41 100644
--- a/chrome/browser/chromeos/borealis/borealis_util.h
+++ b/chrome/browser/chromeos/borealis/borealis_util.h
@@ -15,9 +15,6 @@
 // This is used to install the Borealis DLC component.
 extern const char kBorealisDlcName[];
 
-// Checks if Borealis is allowed to run in the current environment.
-bool IsBorealisAllowed();
-
 // Shows the Borealis installer (borealis_installer_view).
 void ShowBorealisInstallerView(Profile* profile);
 
diff --git a/chrome/browser/chromeos/net/network_diagnostics/http_firewall_routine.h b/chrome/browser/chromeos/net/network_diagnostics/http_firewall_routine.h
index f760a56..3495fef 100644
--- a/chrome/browser/chromeos/net/network_diagnostics/http_firewall_routine.h
+++ b/chrome/browser/chromeos/net/network_diagnostics/http_firewall_routine.h
@@ -76,7 +76,7 @@
   void AttemptNextResolution();
   void AttemptSocketConnections();
   void Connect(int socket_index);
-  void OnSocketConnected(int result, int socket_index);
+  void OnSocketConnected(int socket_index, int result);
 
   // Unowned
   net::ClientSocketFactory* client_socket_factory_ = nullptr;
diff --git a/chrome/browser/extensions/api/developer_private/developer_private_apitest.cc b/chrome/browser/extensions/api/developer_private/developer_private_apitest.cc
index 952e5bbc..bc469d11 100644
--- a/chrome/browser/extensions/api/developer_private/developer_private_apitest.cc
+++ b/chrome/browser/extensions/api/developer_private/developer_private_apitest.cc
@@ -4,6 +4,7 @@
 
 #include "base/path_service.h"
 #include "base/strings/stringprintf.h"
+#include "build/build_config.h"
 #include "chrome/browser/devtools/devtools_window.h"
 #include "chrome/browser/devtools/devtools_window_testing.h"
 #include "chrome/browser/extensions/api/developer_private/developer_private_api.h"
@@ -137,8 +138,17 @@
   EXPECT_TRUE(DevToolsWindow::GetInstanceForInspectedWebContents(wc));
 }
 
+// Crashes on Linux only.  http://crbug.com/1134506
+#if defined(OS_LINUX)
+#define MAYBE_InspectInactiveServiceWorkerBackground \
+  DISABLED_InspectInactiveServiceWorkerBackground
+#else
+#define MAYBE_InspectInactiveServiceWorkerBackground \
+  InspectInactiveServiceWorkerBackground
+#endif
+
 IN_PROC_BROWSER_TEST_F(DeveloperPrivateApiTest,
-                       InspectInactiveServiceWorkerBackground) {
+                       MAYBE_InspectInactiveServiceWorkerBackground) {
   ResultCatcher result_catcher;
   // Load an extension that is service worker based.
   const Extension* extension =
diff --git a/chrome/browser/extensions/api/metrics_private/metrics_apitest.cc b/chrome/browser/extensions/api/metrics_private/metrics_apitest.cc
index 272f8656..28ad13f 100644
--- a/chrome/browser/extensions/api/metrics_private/metrics_apitest.cc
+++ b/chrome/browser/extensions/api/metrics_private/metrics_apitest.cc
@@ -14,6 +14,7 @@
 #include "chrome/browser/extensions/extension_apitest.h"
 #include "components/variations/variations_associated_data.h"
 #include "content/public/test/browser_test.h"
+#include "extensions/common/scoped_worker_based_extensions_channel.h"
 
 namespace extensions {
 
@@ -131,18 +132,49 @@
 
 }  // namespace
 
-IN_PROC_BROWSER_TEST_F(ExtensionApiTest, Metrics) {
+using ContextType = ExtensionBrowserTest::ContextType;
+
+class ExtensionMetricsApiTest
+    : public ExtensionApiTest,
+      public testing::WithParamInterface<ContextType> {
+ public:
+  ExtensionMetricsApiTest() {
+    // Service Workers are currently only available on certain channels, so set
+    // the channel for those tests.
+    if (GetParam() == ContextType::kServiceWorker)
+      current_channel_ = std::make_unique<ScopedWorkerBasedExtensionsChannel>();
+  }
+
+  bool RunComponentTestWithParamFlag(const std::string& extension_name) {
+    int flags = kFlagEnableFileAccess;
+    if (GetParam() == ContextType::kServiceWorker)
+      flags |= ExtensionBrowserTest::kFlagRunAsServiceWorkerBasedExtension;
+
+    return RunExtensionTestWithFlags(extension_name, flags,
+                                     kFlagLoadAsComponent);
+  }
+
+ private:
+  std::unique_ptr<ScopedWorkerBasedExtensionsChannel> current_channel_;
+};
+
+INSTANTIATE_TEST_SUITE_P(PersistentBackground,
+                         ExtensionMetricsApiTest,
+                         ::testing::Values(ContextType::kPersistentBackground));
+
+INSTANTIATE_TEST_SUITE_P(ServiceWorker,
+                         ExtensionMetricsApiTest,
+                         ::testing::Values(ContextType::kServiceWorker));
+
+IN_PROC_BROWSER_TEST_P(ExtensionMetricsApiTest, Metrics) {
   base::UserActionTester user_action_tester;
 
   base::FieldTrialList::CreateFieldTrial("apitestfieldtrial2", "group1");
 
-  std::map<std::string, std::string> params;
-  params["a"] = "aa";
-  params["b"] = "bb";
   ASSERT_TRUE(variations::AssociateVariationParams(
-      "apitestfieldtrial2", "group1", params));
+      "apitestfieldtrial2", "group1", {{"a", "aa"}, {"b", "bb"}}));
 
-  ASSERT_TRUE(RunComponentExtensionTest("metrics")) << message_;
+  ASSERT_TRUE(RunComponentTestWithParamFlag("metrics")) << message_;
 
   ValidateUserActions(user_action_tester, g_user_actions,
                       base::size(g_user_actions));
diff --git a/chrome/browser/extensions/service_worker_apitest.cc b/chrome/browser/extensions/service_worker_apitest.cc
index 8e1fc02..6139360a 100644
--- a/chrome/browser/extensions/service_worker_apitest.cc
+++ b/chrome/browser/extensions/service_worker_apitest.cc
@@ -417,6 +417,12 @@
   EXPECT_EQ(2, histogram_tester.GetBucketCount(
                    "Extensions.Functions.ExtensionServiceWorkerCalls",
                    functions::HistogramValue::WINDOWS_GETALL));
+  EXPECT_EQ(1, histogram_tester.GetBucketCount(
+                   "Extensions.Functions.ExtensionServiceWorkerCalls",
+                   functions::HistogramValue::WINDOWS_GET));
+  EXPECT_EQ(1, histogram_tester.GetBucketCount(
+                   "Extensions.Functions.ExtensionServiceWorkerCalls",
+                   functions::HistogramValue::WINDOWS_GETCURRENT));
 }
 
 // Tests chrome.webRequest APIs.
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json
index 950cba5..14a1ef52 100644
--- a/chrome/browser/flag-metadata.json
+++ b/chrome/browser/flag-metadata.json
@@ -1924,7 +1924,12 @@
     "expiry_milestone": 87
   },
   { "name": "enable-phone-hub",
-    "owners": [ "cros-customization@google.com", "tjohnsonkanu", "khorimoto" ],
+    "owners": [ "better-together-dev@google.com", "tjohnsonkanu", "khorimoto" ],
+    "expiry_milestone": 90
+  },
+  {
+    "name": "enable-phone-hub-use-ble",
+    "owners": [ "better-together-dev@google.com", "khorimoto"],
     "expiry_milestone": 90
   },
   {
@@ -3202,14 +3207,9 @@
     "expiry_milestone": 89
   },
   {
-    "name": "ntp-dismiss-promos",
-    "owners": [ "aee", "mahmadi", "tiborg" ],
-    "expiry_milestone": 86
-  },
-  {
     "name": "ntp-iframe-one-google-bar",
     "owners": [ "aee", "mahmadi", "tiborg" ],
-    "expiry_milestone": 87
+    "expiry_milestone": 88
   },
   {
     "name": "ntp-modules",
@@ -3219,17 +3219,7 @@
   {
     "name": "ntp-one-google-bar-modal-overlays",
     "owners": [ "aee", "mahmadi", "tiborg" ],
-    "expiry_milestone": 87
-  },
-  {
-    "name": "ntp-realbox",
-    "owners": [ "aee", "mahmadi", "tiborg" ],
-    "expiry_milestone": 86
-  },
-  {
-    "name": "ntp-realbox-match-omnibox-theme",
-    "owners": [ "aee", "mahmadi", "tiborg" ],
-    "expiry_milestone": 86
+    "expiry_milestone": 88
   },
   {
     "name": "ntp-repeatable-queries",
@@ -3244,7 +3234,7 @@
   {
     "name": "ntp-webui",
     "owners": [ "aee", "mahmadi", "tiborg" ],
-    "expiry_milestone": 87
+    "expiry_milestone": 88
   },
   {
     "name": "offline-indicator-always-http-probe",
@@ -4096,6 +4086,11 @@
     "expiry_milestone": 90
   },
   {
+    "name": "screen-capture",
+    "owners": [ "afakhry", "gzadina" ],
+    "expiry_milestone": 91
+  },
+  {
     "name": "screen-time-integration-ios",
     "owners": [ "edchin", "bling-flags@google.com" ],
     "expiry_milestone": 92
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
index db4131e..52bdbee 100644
--- a/chrome/browser/flag_descriptions.cc
+++ b/chrome/browser/flag_descriptions.cc
@@ -2037,6 +2037,14 @@
     "registrable domain but different schemes are considered cross-site. This "
     "change only applies to cookies with the 'SameSite' attribute.";
 
+const char kScreenCaptureTestName[] = "Screen capture test";
+const char kScreenCaptureTestDescription[] =
+    "Enables an improved screen capture experience which aims to increase "
+    "productivity by making screen capture discoverable, intuitive, and "
+    "powerful. When enabled, access a new screen capture entry point from "
+    "quick settings. Select the capture type and selection default from the "
+    "capture mode UI bar. Try out new screen recording functionality.";
+
 const char kScrollableTabStripName[] = "Scrollable TabStrip";
 const char kScrollableTabStripDescription[] =
     "Allows users to access tabs by scrolling when they no longer fit in the "
@@ -3286,11 +3294,6 @@
     "Prevents new notifications from being shown while a screen is being "
     "shared.";
 
-const char kNtpDismissPromosName[] = "Dismiss promos on the New Tab Page";
-const char kNtpDismissPromosDescription[] =
-    "Enables a UI to persistently dismiss [non-emergency] promos on the "
-    "bottom/middle of the New Tab Page";
-
 const char kNtpIframeOneGoogleBarName[] = "Load OneGoogleBar in an iframe";
 const char kNtpIframeOneGoogleBarDescription[] =
     "Enables loading the OneGoogleBar in an iframe. Otherwise, the "
@@ -3303,18 +3306,6 @@
     "Otherwise, a clip-path definition is used to clip away parts of the"
     "OneGoogleBar that do not have visible elements.";
 
-const char kNtpRealboxName[] = "Real search box in New Tab Page";
-const char kNtpRealboxDescription[] =
-    "Enables a search box in the middle of the NTP that will accept input "
-    "directly (i.e. not be a \"fake\" box). Search results will show below the "
-    "non-fake input (\"realbox\").";
-
-const char kNtpRealboxMatchOmniboxThemeName[] =
-    "Make the New Tab page real search box match the omnibox's theme colors";
-const char kNtpRealboxMatchOmniboxThemeDescription[] =
-    "Themes the real search box in the middle of the NTP to match the omnibox. "
-    "Only has an an effect if #ntp-realbox is enabled.";
-
 const char kNtpRepeatableQueriesName[] =
     "Repeatable queries on the New Tab Page";
 const char kNtpRepeatableQueriesDescription[] =
@@ -4305,6 +4296,11 @@
     "Provides a UI for users to view information about their Android phone"
     "and perform phone-side actions within Chrome OS.";
 
+const char kPhoneHubUseBleName[] = "Enable Phone Hub connection with BLE";
+const char kPhoneHubUseBleDescription[] =
+    "If enabled, Phone Hub will use the BLE as the main source of connection "
+    "between the Chrome OS device and the remote phone.";
+
 const char kReduceDisplayNotificationsName[] = "Reduce display notifications";
 const char kReduceDisplayNotificationsDescription[] =
     "If enabled, notifications for display rotation, display removed, display "
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
index db1a60d5..c312296 100644
--- a/chrome/browser/flag_descriptions.h
+++ b/chrome/browser/flag_descriptions.h
@@ -1173,6 +1173,9 @@
 extern const char kSchemefulSameSiteName[];
 extern const char kSchemefulSameSiteDescription[];
 
+extern const char kScreenCaptureTestName[];
+extern const char kScreenCaptureTestDescription[];
+
 extern const char kScrollableTabStripName[];
 extern const char kScrollableTabStripDescription[];
 
@@ -1877,21 +1880,12 @@
 extern const char kMuteNotificationsDuringScreenShareName[];
 extern const char kMuteNotificationsDuringScreenShareDescription[];
 
-extern const char kNtpDismissPromosName[];
-extern const char kNtpDismissPromosDescription[];
-
 extern const char kNtpIframeOneGoogleBarName[];
 extern const char kNtpIframeOneGoogleBarDescription[];
 
 extern const char kNtpOneGoogleBarModalOverlaysName[];
 extern const char kNtpOneGoogleBarModalOverlaysDescription[];
 
-extern const char kNtpRealboxName[];
-extern const char kNtpRealboxDescription[];
-
-extern const char kNtpRealboxMatchOmniboxThemeName[];
-extern const char kNtpRealboxMatchOmniboxThemeDescription[];
-
 extern const char kNtpRepeatableQueriesName[];
 extern const char kNtpRepeatableQueriesDescription[];
 
@@ -2501,6 +2495,9 @@
 extern const char kPhoneHubName[];
 extern const char kPhoneHubDescription[];
 
+extern const char kPhoneHubUseBleName[];
+extern const char kPhoneHubUseBleDescription[];
+
 extern const char kReduceDisplayNotificationsName[];
 extern const char kReduceDisplayNotificationsDescription[];
 
diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc
index ab7080ba5..473a07d 100644
--- a/chrome/browser/flags/android/chrome_feature_list.cc
+++ b/chrome/browser/flags/android/chrome_feature_list.cc
@@ -97,6 +97,7 @@
     &features::kWebAuth,
     &features::kWebNfc,
     &feature_engagement::kIPHHomepagePromoCardFeature,
+    &feed::kInterestFeedV1ClicksAndViewsConditionalUpload,
     &feed::kInterestFeedContentSuggestions,
     &feed::kInterestFeedFeedback,
     &feed::kInterestFeedV2,
@@ -227,6 +228,7 @@
     &paint_preview::kPaintPreviewShowOnStartup,
     &language::kDetailedLanguageSettings,
     &language::kExplicitLanguageAsk,
+    &language::kTranslateAssistContent,
     &language::kTranslateIntent,
     &messages::kMessagesForAndroidInfrastructure,
     &offline_pages::kOfflineIndicatorFeature,
diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java
index c7105faf..404f4a80 100644
--- a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java
+++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java
@@ -306,6 +306,8 @@
     public static final String INLINE_UPDATE_FLOW = "InlineUpdateFlow";
     public static final String INSTALLABLE_AMBIENT_BADGE_INFOBAR = "InstallableAmbientBadgeInfoBar";
     public static final String INSTANT_START = "InstantStart";
+    public static final String INTEREST_FEEDV1_CLICKS_AND_VIEWS_CONDITIONAL_UPLOAD =
+            "InterestFeedV1ClickAndViewActionsConditionalUpload";
     public static final String INTEREST_FEED_CONTENT_SUGGESTIONS = "InterestFeedContentSuggestions";
     public static final String INTEREST_FEED_FEEDBACK = "InterestFeedFeedback";
     public static final String INTEREST_FEED_V2 = "InterestFeedV2";
@@ -424,6 +426,7 @@
     public static final String TEST_DEFAULT_DISABLED = "TestDefaultDisabled";
     public static final String TEST_DEFAULT_ENABLED = "TestDefaultEnabled";
     public static final String TOUCH_TO_FILL_ANDROID = "TouchToFillAndroid";
+    public static final String TRANSLATE_ASSIST_CONTENT = "TranslateAssistContent";
     public static final String TRANSLATE_INTENT = "TranslateIntent";
     public static final String TRUSTED_WEB_ACTIVITY_LOCATION_DELEGATION =
             "TrustedWebActivityLocationDelegation";
diff --git a/chrome/browser/google/google_update_win.cc b/chrome/browser/google/google_update_win.cc
index 8e1ce88c..c4758fa 100644
--- a/chrome/browser/google/google_update_win.cc
+++ b/chrome/browser/google/google_update_win.cc
@@ -17,7 +17,6 @@
 #include "base/files/file_path.h"
 #include "base/location.h"
 #include "base/metrics/histogram_functions.h"
-#include "base/metrics/histogram_macros.h"
 #include "base/no_destructor.h"
 #include "base/numerics/safe_conversions.h"
 #include "base/path_service.h"
@@ -449,11 +448,11 @@
 
   *GetLastUpdateStateStorage() = update_state_;
 
-  UMA_HISTOGRAM_ENUMERATION("GoogleUpdate.UpgradeResult", status_,
-                            NUM_UPGRADE_STATUS);
+  base::UmaHistogramEnumeration("GoogleUpdate.UpgradeResult", status_,
+                                NUM_UPGRADE_STATUS);
   if (status_ == UPGRADE_ERROR) {
-    UMA_HISTOGRAM_ENUMERATION("GoogleUpdate.UpdateErrorCode",
-                              update_state_.error_code, NUM_ERROR_CODES);
+    base::UmaHistogramEnumeration("GoogleUpdate.UpdateErrorCode",
+                                  update_state_.error_code, NUM_ERROR_CODES);
     if (FAILED(update_state_.hresult)) {
       base::UmaHistogramSparse("GoogleUpdate.ErrorHresult",
                                update_state_.hresult);
@@ -803,7 +802,6 @@
     case STATE_ERROR:
     default:
       NOTREACHED();
-      base::UmaHistogramSparse("GoogleUpdate.UnexpectedState", state_value);
       return false;
   }
   return true;
diff --git a/chrome/browser/interstitials/chrome_settings_page_helper.cc b/chrome/browser/interstitials/chrome_settings_page_helper.cc
new file mode 100644
index 0000000..a86971d
--- /dev/null
+++ b/chrome/browser/interstitials/chrome_settings_page_helper.cc
@@ -0,0 +1,32 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/interstitials/chrome_settings_page_helper.h"
+#include "build/build_config.h"
+#include "content/public/browser/web_contents.h"
+
+#if !defined(OS_ANDROID)
+#include "chrome/browser/ui/browser_finder.h"
+#include "chrome/browser/ui/chrome_pages.h"
+#endif
+
+namespace security_interstitials {
+
+// static
+std::unique_ptr<security_interstitials::SettingsPageHelper>
+ChromeSettingsPageHelper::CreateChromeSettingsPageHelper() {
+  return std::make_unique<security_interstitials::ChromeSettingsPageHelper>();
+}
+
+void ChromeSettingsPageHelper::OpenEnhancedProtectionSettings(
+    content::WebContents* web_contents) const {
+#if defined(OS_ANDROID)
+  // TODO(crbug.com/1130721): Implement on Android.
+#else
+  chrome::ShowSafeBrowsingEnhancedProtection(
+      chrome::FindBrowserWithWebContents(web_contents));
+#endif
+}
+
+}  // namespace security_interstitials
diff --git a/chrome/browser/interstitials/chrome_settings_page_helper.h b/chrome/browser/interstitials/chrome_settings_page_helper.h
new file mode 100644
index 0000000..6f8f1ed
--- /dev/null
+++ b/chrome/browser/interstitials/chrome_settings_page_helper.h
@@ -0,0 +1,40 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_INTERSTITIALS_CHROME_SETTINGS_PAGE_HELPER_H_
+#define CHROME_BROWSER_INTERSTITIALS_CHROME_SETTINGS_PAGE_HELPER_H_
+
+#include <memory>
+
+#include "components/security_interstitials/content/settings_page_helper.h"
+
+namespace content {
+class WebContents;
+}
+
+namespace security_interstitials {
+
+// This class is used to open a Chrome setting page in a security interstitial.
+// The implementation is different on desktop platforms and on Android. On
+// desktop, it opens a new tab and navigation to chrome://settings/*.
+// TODO(crbug.com/1130721): On Android, it creates an intent to launch a
+// Settings activity.
+class ChromeSettingsPageHelper : public SettingsPageHelper {
+ public:
+  static std::unique_ptr<security_interstitials::SettingsPageHelper>
+  CreateChromeSettingsPageHelper();
+
+  ChromeSettingsPageHelper() = default;
+  ~ChromeSettingsPageHelper() override = default;
+  ChromeSettingsPageHelper(const ChromeSettingsPageHelper&) = delete;
+  ChromeSettingsPageHelper& operator=(const ChromeSettingsPageHelper&) = delete;
+
+  // SettingsPageHelper:
+  void OpenEnhancedProtectionSettings(
+      content::WebContents* web_contents) const override;
+};
+
+}  // namespace security_interstitials
+
+#endif  // CHROME_BROWSER_INTERSTITIALS_CHROME_SETTINGS_PAGE_HELPER_H_
diff --git a/chrome/browser/lifetime/browser_shutdown.cc b/chrome/browser/lifetime/browser_shutdown.cc
index 0e35788..3d98a97 100644
--- a/chrome/browser/lifetime/browser_shutdown.cc
+++ b/chrome/browser/lifetime/browser_shutdown.cc
@@ -24,6 +24,7 @@
 #include "base/threading/thread.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
+#include "build/config/compiler/compiler_buildflags.h"
 #include "chrome/browser/about_flags.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/buildflags.h"
diff --git a/chrome/browser/lookalikes/lookalike_url_controller_client.cc b/chrome/browser/lookalikes/lookalike_url_controller_client.cc
index bebdf37a..5e66939 100644
--- a/chrome/browser/lookalikes/lookalike_url_controller_client.cc
+++ b/chrome/browser/lookalikes/lookalike_url_controller_client.cc
@@ -11,6 +11,7 @@
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/reputation/reputation_service.h"
 #include "chrome/common/url_constants.h"
+#include "components/security_interstitials/content/settings_page_helper.h"
 #include "components/security_interstitials/core/metrics_helper.h"
 #include "content/public/browser/page_navigator.h"
 #include "content/public/browser/web_contents.h"
@@ -36,7 +37,8 @@
           Profile::FromBrowserContext(web_contents->GetBrowserContext())
               ->GetPrefs(),
           g_browser_process->GetApplicationLocale(),
-          GURL(chrome::kChromeUINewTabURL)),
+          GURL(chrome::kChromeUINewTabURL),
+          /*settings_page_helper=*/nullptr),
       request_url_(request_url),
       safe_url_(safe_url) {}
 
diff --git a/chrome/browser/metrics/chrome_browser_main_extra_parts_metrics.cc b/chrome/browser/metrics/chrome_browser_main_extra_parts_metrics.cc
index 9d633b5..0145a584 100644
--- a/chrome/browser/metrics/chrome_browser_main_extra_parts_metrics.cc
+++ b/chrome/browser/metrics/chrome_browser_main_extra_parts_metrics.cc
@@ -21,6 +21,7 @@
 #include "base/threading/scoped_blocking_call.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
+#include "build/config/compiler/compiler_buildflags.h"
 #include "chrome/browser/about_flags.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/buildflags.h"
diff --git a/chrome/browser/paint_preview/android/java/src/org/chromium/chrome/browser/paint_preview/TabbedPaintPreviewPlayer.java b/chrome/browser/paint_preview/android/java/src/org/chromium/chrome/browser/paint_preview/TabbedPaintPreviewPlayer.java
index 495d7ec0..02dc488 100644
--- a/chrome/browser/paint_preview/android/java/src/org/chromium/chrome/browser/paint_preview/TabbedPaintPreviewPlayer.java
+++ b/chrome/browser/paint_preview/android/java/src/org/chromium/chrome/browser/paint_preview/TabbedPaintPreviewPlayer.java
@@ -121,9 +121,7 @@
         public void onHidden(Tab tab, @TabHidingType int hidingType) {
             releasePersistentToolbar();
             dismissSnackbar();
-            if (mProgressSimulatorNeededCallback != null) {
-                mProgressPreventionCallback.onResult(false);
-            }
+            setProgressPreventionNeeded(false);
 
             if (mPlayerManager == null || !isShowingAndNeedsBadge()) return;
 
@@ -138,9 +136,7 @@
             if (!isShowingAndNeedsBadge()) return;
 
             showToolbarPersistent();
-            if (mProgressSimulatorNeededCallback != null) {
-                mProgressPreventionCallback.onResult(true);
-            }
+            setProgressPreventionNeeded(true);
         }
     }
 
@@ -318,6 +314,12 @@
         SnackbarManagerProvider.from(mTab.getWindowAndroid()).dismissSnackbars(mSnackbarController);
     }
 
+    private void setProgressPreventionNeeded(boolean progressPrevention) {
+        if (mProgressPreventionCallback == null) return;
+
+        mProgressPreventionCallback.onResult(progressPrevention);
+    }
+
     public boolean isShowingAndNeedsBadge() {
         if (mTab == null) return false;
 
@@ -363,14 +365,14 @@
     @Override
     public void onShown() {
         showToolbarPersistent();
-        if (mProgressSimulatorNeededCallback != null) mProgressPreventionCallback.onResult(true);
+        setProgressPreventionNeeded(true);
     }
 
     @Override
     public void onHidden() {
         releasePersistentToolbar();
         dismissSnackbar();
-        if (mProgressSimulatorNeededCallback != null) mProgressPreventionCallback.onResult(false);
+        setProgressPreventionNeeded(false);
     }
 
     @Override
diff --git a/chrome/browser/preferences/BUILD.gn b/chrome/browser/preferences/BUILD.gn
index f06f098b..7b1719e 100644
--- a/chrome/browser/preferences/BUILD.gn
+++ b/chrome/browser/preferences/BUILD.gn
@@ -31,6 +31,7 @@
     "//components/autofill/core/common/autofill_prefs.cc",
     "//components/dom_distiller/core/pref_names.cc",
     "//components/embedder_support/pref_names.cc",
+    "//components/feed/core/common/pref_names.cc",
     "//components/feed/core/shared_prefs/pref_names.cc",
     "//components/offline_pages/core/prefetch/prefetch_prefs.cc",
     "//components/password_manager/core/common/password_manager_pref_names.cc",
diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browser_prefs.cc
index 2c28af6c..d73e13cc 100644
--- a/chrome/browser/prefs/browser_prefs.cc
+++ b/chrome/browser/prefs/browser_prefs.cc
@@ -273,6 +273,7 @@
 #if defined(USE_CUPS)
 #include "chrome/browser/chromeos/extensions/printing/printing_api_handler.h"
 #endif
+#include "chrome/browser/chromeos/borealis/borealis_prefs.h"
 #include "chrome/browser/chromeos/child_accounts/secondary_account_consent_logger.h"
 #include "chrome/browser/chromeos/file_system_provider/registry.h"
 #include "chrome/browser/chromeos/first_run/first_run.h"
@@ -963,6 +964,7 @@
   RegisterChromeLauncherUserPrefs(registry);
   ::onc::RegisterProfilePrefs(registry);
   chromeos::cert_provisioning::RegisterProfilePrefs(registry);
+  borealis::prefs::RegisterProfilePrefs(registry);
 #endif  // defined(OS_CHROMEOS)
 
 #if defined(OS_WIN)
diff --git a/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc b/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc
index 236db35..59377e7 100644
--- a/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc
+++ b/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc
@@ -105,6 +105,7 @@
 
 #if defined(OS_ANDROID)
 #include "chrome/browser/android/explore_sites/explore_sites_service_factory.h"
+#include "chrome/browser/android/reading_list/reading_list_manager_factory.h"
 #include "chrome/browser/android/search_permissions/search_permissions_service.h"
 #include "chrome/browser/android/thin_webview/chrome_thin_webview_initializer.h"
 #include "chrome/browser/media/android/cdm/media_drm_origin_id_manager_factory.h"
@@ -342,10 +343,14 @@
   ProfileThemeUpdateServiceFactory::GetInstance();
 #endif
   ProtocolHandlerRegistryFactory::GetInstance();
-#if !defined(OS_ANDROID)
-  if (base::FeatureList::IsEnabled(features::kReadLater))
+  if (base::FeatureList::IsEnabled(features::kReadLater)) {
     ReadingListModelFactory::GetInstance();
+
+#if defined(OS_ANDROID)
+    ReadingListManagerFactory::GetInstance();
 #endif
+  }
+
   RendererUpdaterFactory::GetInstance();
 #if !defined(OS_ANDROID)
   performance_manager::SiteDataCacheFacadeFactory::GetInstance();
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/background_test.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/background_test.js
index 57d800a7..091b6ff 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/background_test.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/background_test.js
@@ -3105,3 +3105,18 @@
         .replay();
   });
 });
+
+TEST_F('ChromeVoxBackgroundTest', 'WrapTextFieldAtEndOfDoc', function() {
+  const mockFeedback = this.createMockFeedback();
+  const site = `<p>start</p><div role="textbox" contenteditable></div>`;
+  this.runWithLoadedTree(site, function() {
+    mockFeedback.call(doCmd('nextObject'))
+        .expectSpeech('Edit text')
+        .call(doCmd('nextObject'))
+        .expectEarcon(Earcon.WRAP)
+        .expectSpeech('Web Content')
+        .call(doCmd('nextObject'))
+        .expectSpeech('start')
+        .replay();
+  });
+});
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/cursors.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/cursors.js
index 0529f6b..bec866b4 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/cursors.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/cursors.js
@@ -564,7 +564,7 @@
       newIndex = cursors.NODE_INDEX;
     }
 
-    return new cursors.Cursor(newNode, newIndex);
+    return new this.constructor(newNode, newIndex);
   }
 
   /**
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/smart_sticky_mode.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/smart_sticky_mode.js
index 4f69435..4d82ac0f 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/smart_sticky_mode.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/smart_sticky_mode.js
@@ -35,6 +35,7 @@
   /** @override */
   onCurrentRangeChanged(newRange) {
     if (!newRange || this.ignoreRangeChanges_ ||
+        ChromeVoxState.isReadingContinuously ||
         localStorage['smartStickyMode'] !== 'true') {
       return;
     }
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/smart_sticky_mode_test.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/smart_sticky_mode_test.js
index d00b3c7..f79b92c 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/smart_sticky_mode_test.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/smart_sticky_mode_test.js
@@ -174,3 +174,27 @@
             .replay();
       });
 });
+
+TEST_F('ChromeVoxSmartStickyModeTest', 'ContinuousRead', function() {
+  const mockFeedback = this.createMockFeedback();
+  const site = `
+    <p>start</p>
+    <input type="text"></input>
+    <button>end</button>
+  `;
+  this.runWithLoadedTree(site, function(root) {
+    // Fake the read from here/continuous read state.
+    ChromeVoxState.isReadingContinuously = true;
+    mockFeedback.call(doCmd('toggleStickyMode'))
+        .expectSpeech('Sticky mode enabled')
+        .call(doCmd('nextObject'))
+        .expectNextSpeechUtteranceIsNot('Sticky mode disabled')
+        .expectSpeech('Edit text')
+        .call(() => assertTrue(ChromeVox.isStickyModeOn()))
+        .call(doCmd('nextObject'))
+        .expectNextSpeechUtteranceIsNot('Sticky mode enabled')
+        .expectSpeech('Button')
+        .call(() => assertTrue(ChromeVox.isStickyModeOn()))
+        .replay();
+  });
+});
diff --git a/chrome/browser/resources/optimize_webui.py b/chrome/browser/resources/optimize_webui.py
index ced44401..00da924 100755
--- a/chrome/browser/resources/optimize_webui.py
+++ b/chrome/browser/resources/optimize_webui.py
@@ -359,7 +359,7 @@
     # Pass the JS files through Uglify and write the output to its final
     # destination.
     for index, js_out_file in enumerate(args.js_out_files):
-      node.RunNode([node_modules.PathToTerser(),
+      node.RunNode([node_modules.PathToUglify(),
                     os.path.join(tmp_out_dir, js_out_file),
                     '--comments', '/Copyright|license|LICENSE|\<\/?if/',
                     '--output', os.path.join(out_path, js_out_file)])
diff --git a/chrome/browser/resources/pdf/open_pdf_params_parser.js b/chrome/browser/resources/pdf/open_pdf_params_parser.js
index d03df1e..1828eaa8 100644
--- a/chrome/browser/resources/pdf/open_pdf_params_parser.js
+++ b/chrome/browser/resources/pdf/open_pdf_params_parser.js
@@ -4,6 +4,7 @@
 
 import {assert} from 'chrome://resources/js/assert.m.js';
 import {FittingType, NamedDestinationMessageData, Point} from './constants.js';
+import {Size} from './viewport.js';
 
 /**
  * @typedef {{
@@ -27,6 +28,28 @@
   constructor(getNamedDestinationCallback) {
     /** @private {!function(string):!Promise<!NamedDestinationMessageData>} */
     this.getNamedDestinationCallback_ = getNamedDestinationCallback;
+
+    /** @private {!Size} */
+    this.viewportDimensions_;
+  }
+
+  /**
+   * Calculate the zoom level needed for making viewport focus on a rectangular
+   * area in the PDF document.
+   * @param {!Size} size The dimensions of the rectangular area to be focused
+   *     on.
+   * @return {number} The zoom level needed for focusing on the rectangular
+   *     area. A zoom level of 0 indicates that the zoom level cannot be
+   *     calculated with the given information.
+   * @private
+   */
+  calculateRectZoomLevel_(size) {
+    if (size.height === 0 || size.width === 0) {
+      return 0;
+    }
+    return Math.min(
+        this.viewportDimensions_.height / size.height,
+        this.viewportDimensions_.width / size.width);
   }
 
   /**
@@ -129,7 +152,26 @@
     }
 
     if (viewMode === 'fitr' && viewModeComponents.length === 5) {
-      // TODO(crbug.com/535978): Add support for fit type "FitR" in nameddest.
+      assert(this.viewportDimensions_ !== undefined);
+      let x1 = parseFloat(viewModeComponents[1]);
+      let y1 = parseFloat(viewModeComponents[2]);
+      let x2 = parseFloat(viewModeComponents[3]);
+      let y2 = parseFloat(viewModeComponents[4]);
+      if (!Number.isNaN(x1) && !Number.isNaN(y1) && !Number.isNaN(x2) &&
+          !Number.isNaN(y2)) {
+        if (x1 > x2) {
+          [x1, x2] = [x2, x1];
+        }
+        if (y1 > y2) {
+          [y1, y2] = [y2, y1];
+        }
+        const rectSize = {width: x2 - x1, height: y2 - y1};
+        params['position'] = {x: x1, y: y1};
+        const zoom = this.calculateRectZoomLevel_(rectSize);
+        if (zoom !== 0) {
+          params['zoom'] = zoom;
+        }
+      }
       return params;
     }
 
@@ -161,6 +203,14 @@
   }
 
   /**
+   * Store current viewport's dimensions.
+   * @param {!Size} dimensions
+   */
+  setViewportDimensions(dimensions) {
+    this.viewportDimensions_ = dimensions;
+  }
+
+  /**
    * @param {string} url that needs to be parsed.
    * @return {boolean} Whether the toolbar UI element should be shown.
    */
@@ -184,7 +234,7 @@
     const urlParams = this.parseUrlParams_(url);
 
     if (urlParams.has('page')) {
-      // |pageNumber| is 1-based, but goToPage() take a zero-based page number.
+      // |pageNumber| is 1-based, but goToPage() take a zero-based page index.
       const pageNumber = parseInt(urlParams.get('page'), 10);
       if (!Number.isNaN(pageNumber) && pageNumber > 0) {
         params['page'] = pageNumber - 1;
diff --git a/chrome/browser/resources/pdf/pdf_viewer_base.js b/chrome/browser/resources/pdf/pdf_viewer_base.js
index 9ba0272..36c24bd 100644
--- a/chrome/browser/resources/pdf/pdf_viewer_base.js
+++ b/chrome/browser/resources/pdf/pdf_viewer_base.js
@@ -370,6 +370,8 @@
     const visiblePage = this.viewport_.getMostVisiblePage();
     const visiblePageDimensions = this.viewport_.getPageScreenRect(visiblePage);
     const size = this.viewport_.size;
+    this.paramsParser.setViewportDimensions(size);
+
     this.sendScriptingMessage({
       type: 'viewport',
       pageX: visiblePageDimensions.x,
@@ -426,6 +428,7 @@
     this.documentDimensions = documentDimensions;
     this.isUserInitiatedEvent = false;
     this.viewport_.setDocumentDimensions(this.documentDimensions);
+    this.paramsParser.setViewportDimensions(this.viewport_.size);
     this.isUserInitiatedEvent = true;
   }
 
diff --git a/chrome/browser/resources/pdf/viewport.js b/chrome/browser/resources/pdf/viewport.js
index 11ef512b..6bc964a 100644
--- a/chrome/browser/resources/pdf/viewport.js
+++ b/chrome/browser/resources/pdf/viewport.js
@@ -32,7 +32,7 @@
 export let PartialPoint;
 
 /** @typedef {{width: number, height: number}} */
-let Size;
+export let Size;
 
 /** @typedef {{x: number, y: number, width: number, height: number}} */
 let ViewportRect;
diff --git a/chrome/browser/resources/settings/chromeos/internet_page/BUILD.gn b/chrome/browser/resources/settings/chromeos/internet_page/BUILD.gn
index 19cc416..0489b69 100644
--- a/chrome/browser/resources/settings/chromeos/internet_page/BUILD.gn
+++ b/chrome/browser/resources/settings/chromeos/internet_page/BUILD.gn
@@ -201,7 +201,7 @@
     ":internet_page_browser_proxy.m",
     ":internet_shared_css.m",
 
-    #    ":internet_subpage.m",
+    ":internet_subpage.m",
     ":network_proxy_section.m",
     ":network_summary.m",
     ":network_summary_item.m",
@@ -336,7 +336,25 @@
 js_library("internet_subpage.m") {
   sources = [ "$root_gen_dir/chrome/browser/resources/settings/chromeos/internet_page/internet_subpage.m.js" ]
   deps = [
-    # TODO: Fill those in.
+    ":internet_page_browser_proxy.m",
+    "//chrome/browser/resources/settings/chromeos/localized_link:localized_link.m",
+    "//chrome/browser/resources/settings/chromeos:deep_linking_behavior.m",
+    "//chrome/browser/resources/settings/chromeos:metrics_recorder.m",
+    "//chrome/browser/resources/settings/chromeos:os_route.m",
+    "//chrome/browser/resources/settings/chromeos:route_origin_behavior.m",
+    "//chrome/browser/resources/settings:router.m",
+    "//third_party/polymer/v3_0/components-chromium/iron-flex-layout:iron-flex-layout-classes",
+    "//third_party/polymer/v3_0/components-chromium/iron-icon:iron-icon",
+    "//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled",
+    "//ui/webui/resources/cr_components/chromeos/network:cr_policy_network_behavior_mojo.m",
+    "//ui/webui/resources/cr_components/chromeos/network:network_list.m",
+    "//ui/webui/resources/cr_components/chromeos/network:network_listener_behavior.m",
+    "//ui/webui/resources/cr_components/chromeos/network:onc_mojo.m",
+    "//ui/webui/resources/cr_elements/cr_icon_button:cr_icon_button.m",
+    "//ui/webui/resources/cr_elements/cr_link_row:cr_link_row.m",
+    "//ui/webui/resources/cr_elements/cr_toggle:cr_toggle.m",
+    "//ui/webui/resources/cr_elements/policy:cr_policy_indicator.m",
+    "//ui/webui/resources/js:i18n_behavior.m",
   ]
   extra_deps = [ ":internet_subpage_module" ]
 }
@@ -467,6 +485,8 @@
   js_file = "internet_subpage.js"
   html_file = "internet_subpage.html"
   html_type = "dom-module"
+  auto_imports = os_settings_auto_imports
+  namespace_rewrites = os_settings_namespace_rewrites
 }
 
 polymer_modulizer("network_proxy_section") {
diff --git a/chrome/browser/resources/settings/chromeos/internet_page/internet_subpage.html b/chrome/browser/resources/settings/chromeos/internet_page/internet_subpage.html
index 20bf86b..78dc009 100644
--- a/chrome/browser/resources/settings/chromeos/internet_page/internet_subpage.html
+++ b/chrome/browser/resources/settings/chromeos/internet_page/internet_subpage.html
@@ -1,6 +1,7 @@
 <link rel="import" href="chrome://resources/html/polymer.html">
 
 <link rel="import" href="chrome://resources/cr_components/chromeos/network/cr_policy_network_behavior_mojo.html">
+<link rel="import" href="chrome://resources/cr_components/chromeos/network/mojo_interface_provider.html">
 <link rel="import" href="chrome://resources/cr_components/chromeos/network/network_list.html">
 <link rel="import" href="chrome://resources/cr_components/chromeos/network/network_listener_behavior.html">
 <link rel="import" href="chrome://resources/cr_components/chromeos/network/onc_mojo.html">
@@ -10,19 +11,19 @@
 <link rel="import" href="chrome://resources/cr_elements/policy/cr_policy_indicator.html">
 <link rel="import" href="chrome://resources/cr_elements/shared_style_css.html">
 <link rel="import" href="chrome://resources/cr_elements/shared_vars_css.html">
+<link rel="import" href="chrome://resources/html/assert.html">
 <link rel="import" href="chrome://resources/html/i18n_behavior.html">
 <link rel="import" href="chrome://resources/polymer/v1_0/iron-flex-layout/iron-flex-layout-classes.html">
 <link rel="import" href="chrome://resources/polymer/v1_0/iron-icon/iron-icon.html">
-<link rel="import" href="internet_page_browser_proxy.html">
-<link rel="import" href="../localized_link/localized_link.html">
 <link rel="import" href="../../chromeos/os_settings_icons_css.html">
-<link rel="import" href="../../i18n_setup.html">
-<link rel="import" href="../deep_linking_behavior.html">
-<link rel="import" href="../os_route.html">
 <link rel="import" href="../../router.html">
-<link rel="import" href="../route_origin_behavior.html">
 <link rel="import" href="../../settings_shared_css.html">
+<link rel="import" href="../deep_linking_behavior.html">
+<link rel="import" href="../localized_link/localized_link.html">
 <link rel="import" href="../metrics_recorder.html">
+<link rel="import" href="../os_route.html">
+<link rel="import" href="../route_origin_behavior.html">
+<link rel="import" href="internet_page_browser_proxy.html">
 
 <dom-module id="settings-internet-subpage">
   <template>
diff --git a/chrome/browser/resources/settings/chromeos/os_settings.gni b/chrome/browser/resources/settings/chromeos/os_settings.gni
index 63d59a07..f75a662 100644
--- a/chrome/browser/resources/settings/chromeos/os_settings.gni
+++ b/chrome/browser/resources/settings/chromeos/os_settings.gni
@@ -98,6 +98,7 @@
                              "chrome/browser/resources/settings/chromeos/ambient_mode_page/ambient_mode_browser_proxy.html|AmbientModeBrowserProxy,AmbientModeBrowserProxyImpl",
                              "chrome/browser/resources/settings/chromeos/ambient_mode_page/constants.html|AmbientModeTopicSource,AmbientModeTemperatureUnit,AmbientModeAlbum,AmbientModeSettings,TopicSourceItem",
                              "chrome/browser/resources/settings/chromeos/internet_page/cellular_setup_settings_delegate.html|CellularSetupSettingsDelegate",
+                             "chrome/browser/resources/settings/chromeos/internet_page/internet_page_browser_proxy.html|InternetPageBrowserProxy,InternetPageBrowserProxyImpl",
                              "chrome/browser/resources/settings/chromeos/deep_linking_behavior.html|DeepLinkingBehavior",
                              "chrome/browser/resources/settings/chromeos/metrics_recorder.html|recordSettingChange",
                              "chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_browser_proxy.html|MultiDeviceBrowserProxy,MultiDeviceBrowserProxyImpl",
diff --git a/chrome/browser/resources/settings/chromeos/os_settings.js b/chrome/browser/resources/settings/chromeos/os_settings.js
index 751143bc..1ed4c02 100644
--- a/chrome/browser/resources/settings/chromeos/os_settings.js
+++ b/chrome/browser/resources/settings/chromeos/os_settings.js
@@ -11,6 +11,7 @@
 import './internet_page/internet_config.m.js';
 import './internet_page/internet_detail_page.m.js';
 import './internet_page/internet_known_networks_page.m.js';
+import './internet_page/internet_subpage.m.js';
 import './internet_page/network_proxy_section.m.js';
 import './internet_page/network_summary.m.js';
 import './internet_page/network_summary_item.m.js';
diff --git a/chrome/browser/resources/settings/chromeos/os_settings_resources_v3.grdp b/chrome/browser/resources/settings/chromeos/os_settings_resources_v3.grdp
index f6475e37..d3424cd5 100644
--- a/chrome/browser/resources/settings/chromeos/os_settings_resources_v3.grdp
+++ b/chrome/browser/resources/settings/chromeos/os_settings_resources_v3.grdp
@@ -65,6 +65,11 @@
            use_base_dir="false"
            compress="false"
            type="BINDATA" />
+  <include name="IDR_OS_SETTINGS_INTERNET_SUBPAGE_M_JS"
+           file="${root_gen_dir}/chrome/browser/resources/settings/chromeos/internet_page/internet_subpage.m.js"
+           use_base_dir="false"
+           compress="false"
+           type="BINDATA" />
   <include name="IDR_OS_SETTINGS_NETWORK_PROXY_SECTION_M_JS"
            file="${root_gen_dir}/chrome/browser/resources/settings/chromeos/internet_page/network_proxy_section.m.js"
            use_base_dir="false"
@@ -673,6 +678,11 @@
            use_base_dir="false"
            compress="false" type="BINDATA"
            preprocess="true" />
+  <include name="IDR_OS_SETTINGS_OS_SETTINGS_ICONS_CSS_M_JS"
+           file="${root_gen_dir}/chrome/browser/resources/settings/chromeos/os_settings_icons_css.m.js"
+           use_base_dir="false"
+           compress="false"
+           type="BINDATA" />
   <include name="IDR_OS_SETTINGS_SETTINGS_OS_ROUTE_M_JS"
            file="${root_gen_dir}/chrome/browser/resources/settings/chromeos/os_route.m.js"
            use_base_dir="false"
diff --git a/chrome/browser/resources/tab_strip/drag_manager.js b/chrome/browser/resources/tab_strip/drag_manager.js
index 6c1604e..0cecd6d 100644
--- a/chrome/browser/resources/tab_strip/drag_manager.js
+++ b/chrome/browser/resources/tab_strip/drag_manager.js
@@ -108,6 +108,9 @@
      */
     this.hasMoved_ = false;
 
+    /** @private {!Object<{x: number, y: number}>} */
+    this.lastPoint_ = {x: 0, y: 0};
+
     /** @const {number} */
     this.srcIndex = srcIndex;
 
@@ -221,7 +224,8 @@
     return dstIndex;
   }
 
-  cancel() {
+  /** @param {!DragEvent} event */
+  cancel(event) {
     if (this.isDraggingPlaceholder()) {
       this.element_.remove();
       return;
@@ -238,6 +242,14 @@
 
     this.element_.setDragging(false);
     this.element_.setDraggedOut(false);
+
+    if (event.type === 'dragend' && isTabElement(this.element_) &&
+        !this.hasMoved_) {
+      // If the user was dragging a tab and the tab has not ever been moved,
+      // show a context menu instead.
+      this.tabStripEmbedderProxy_.showTabContextMenu(
+          this.element_.tab.id, this.lastPoint_.x, this.lastPoint_.y);
+    }
   }
 
   /** @return {boolean} */
@@ -290,13 +302,6 @@
 
     this.element_.setDragging(false);
     this.element_.setDraggedOut(false);
-
-    if (isTabElement(this.element_) && !this.hasMoved_) {
-      // If the user was dragging a tab and the tab has not ever been moved,
-      // show a context menu instead.
-      this.tabStripEmbedderProxy_.showTabContextMenu(
-          this.element_.tab.id, event.clientX, event.clientY);
-    }
   }
 
   /**
@@ -314,6 +319,7 @@
 
   /** @param {!DragEvent} event */
   start(event) {
+    this.lastPoint_ = {x: event.clientX, y: event.clientY};
     event.dataTransfer.effectAllowed = 'move';
     const draggedItemRect = event.composedPath()[0].getBoundingClientRect();
     this.element_.setDragging(true);
@@ -368,6 +374,8 @@
 
   /** @param {!DragEvent} event */
   update(event) {
+    this.lastPoint_ = {x: event.clientX, y: event.clientY};
+
     if (event.type === 'dragleave') {
       this.element_.setDraggedOut(true);
       this.hasMoved_ = true;
@@ -489,7 +497,7 @@
    */
   onDragLeave_(event) {
     if (this.dragSession_ && this.dragSession_.isDraggingPlaceholder()) {
-      this.dragSession_.cancel();
+      this.dragSession_.cancel(event);
       this.dragSession_ = null;
       return;
     }
@@ -529,7 +537,7 @@
       return;
     }
 
-    this.dragSession_.cancel();
+    this.dragSession_.cancel(event);
     this.dragSession_ = null;
   }
 
diff --git a/chrome/browser/safe_browsing/chrome_controller_client.cc b/chrome/browser/safe_browsing/chrome_controller_client.cc
index 52d814e..599bc85 100644
--- a/chrome/browser/safe_browsing/chrome_controller_client.cc
+++ b/chrome/browser/safe_browsing/chrome_controller_client.cc
@@ -6,6 +6,7 @@
 
 #include "base/feature_list.h"
 #include "components/safe_browsing/core/features.h"
+#include "components/security_interstitials/content/settings_page_helper.h"
 #include "components/security_interstitials/core/metrics_helper.h"
 #include "extensions/buildflags/buildflags.h"
 
@@ -21,12 +22,16 @@
     std::unique_ptr<security_interstitials::MetricsHelper> metrics_helper,
     PrefService* prefs,
     const std::string& app_locale,
-    const GURL& default_safe_page)
-    : safe_browsing::SafeBrowsingControllerClient(web_contents,
-                                                  std::move(metrics_helper),
-                                                  prefs,
-                                                  app_locale,
-                                                  default_safe_page) {}
+    const GURL& default_safe_page,
+    std::unique_ptr<security_interstitials::SettingsPageHelper>
+        settings_page_helper)
+    : safe_browsing::SafeBrowsingControllerClient(
+          web_contents,
+          std::move(metrics_helper),
+          prefs,
+          app_locale,
+          default_safe_page,
+          std::move(settings_page_helper)) {}
 
 ChromeControllerClient::~ChromeControllerClient() {}
 
diff --git a/chrome/browser/safe_browsing/chrome_controller_client.h b/chrome/browser/safe_browsing/chrome_controller_client.h
index c0f20f7..642d75c 100644
--- a/chrome/browser/safe_browsing/chrome_controller_client.h
+++ b/chrome/browser/safe_browsing/chrome_controller_client.h
@@ -12,6 +12,10 @@
 class WebContents;
 }
 
+namespace security_interstitials {
+class SettingsPageHelper;
+}
+
 class PrefService;
 
 // Provides embedder-specific logic for the Safe Browsing interstitial page
@@ -24,7 +28,9 @@
       std::unique_ptr<security_interstitials::MetricsHelper> metrics_helper,
       PrefService* prefs,
       const std::string& app_locale,
-      const GURL& default_safe_page);
+      const GURL& default_safe_page,
+      std::unique_ptr<security_interstitials::SettingsPageHelper>
+          settings_page_helper);
   ~ChromeControllerClient() override;
 
   void Proceed() override;
diff --git a/chrome/browser/safe_browsing/safe_browsing_blocking_page.cc b/chrome/browser/safe_browsing/safe_browsing_blocking_page.cc
index 350cdb3..51f934f 100644
--- a/chrome/browser/safe_browsing/safe_browsing_blocking_page.cc
+++ b/chrome/browser/safe_browsing/safe_browsing_blocking_page.cc
@@ -13,6 +13,7 @@
 #include "base/metrics/histogram_macros.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/history/history_service_factory.h"
+#include "chrome/browser/interstitials/chrome_settings_page_helper.h"
 #include "chrome/browser/interstitials/enterprise_util.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/renderer_preferences_util.h"
@@ -26,6 +27,7 @@
 #include "components/safe_browsing/core/triggers/trigger_manager.h"
 #include "components/security_interstitials/content/content_metrics_helper.h"
 #include "components/security_interstitials/content/security_interstitial_controller_client.h"
+#include "components/security_interstitials/content/settings_page_helper.h"
 #include "components/security_interstitials/content/unsafe_resource_util.h"
 #include "components/security_interstitials/core/controller_client.h"
 #include "components/security_interstitials/core/unsafe_resource.h"
@@ -82,7 +84,8 @@
         IsEnhancedProtectionEnabled(*prefs), is_proceed_anyway_disabled,
         true,  // should_open_links_in_new_tab
         true,  // always_show_back_to_safety
-        kHelpCenterLink);
+        IsEnhancedProtectionMessageInInterstitialsEnabled(),
+        IsSafeBrowsingPolicyManaged(*prefs), kHelpCenterLink);
 
     return new SafeBrowsingBlockingPage(
         ui_manager, web_contents, main_frame_url, unsafe_resources,
@@ -239,9 +242,13 @@
               ServiceAccessType::EXPLICIT_ACCESS),
           unsafe_resources[0].url, GetReportingInfo(unsafe_resources));
 
+  auto chrome_settings_page_helper =
+      std::make_unique<security_interstitials::ChromeSettingsPageHelper>();
+
   return std::make_unique<ChromeControllerClient>(
       web_contents, std::move(metrics_helper), profile->GetPrefs(),
-      ui_manager->app_locale(), ui_manager->default_safe_page());
+      ui_manager->app_locale(), ui_manager->default_safe_page(),
+      std::move(chrome_settings_page_helper));
 }
 
 }  // namespace safe_browsing
diff --git a/chrome/browser/safe_browsing/safe_browsing_blocking_page_test.cc b/chrome/browser/safe_browsing/safe_browsing_blocking_page_test.cc
index ee2e2bd8..e629ae1 100644
--- a/chrome/browser/safe_browsing/safe_browsing_blocking_page_test.cc
+++ b/chrome/browser/safe_browsing/safe_browsing_blocking_page_test.cc
@@ -29,6 +29,7 @@
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/interstitials/security_interstitial_idn_test.h"
 #include "chrome/browser/password_manager/password_manager_test_base.h"
+#include "chrome/browser/policy/policy_test_utils.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/renderer_context_menu/render_view_context_menu_test_util.h"
 #include "chrome/browser/safe_browsing/safe_browsing_blocking_page.h"
@@ -49,6 +50,9 @@
 #include "components/google/core/common/google_util.h"
 #include "components/omnibox/browser/omnibox_prefs.h"
 #include "components/permissions/permission_util.h"
+#include "components/policy/core/common/policy_map.h"
+#include "components/policy/core/common/policy_types.h"
+#include "components/policy/policy_constants.h"
 #include "components/prefs/pref_service.h"
 #include "components/safe_browsing/content/browser/threat_details.h"
 #include "components/safe_browsing/content/common/safe_browsing.mojom.h"
@@ -114,6 +118,7 @@
 const char kCrossOriginMaliciousIframeHost[] = "malware.test";
 const char kMaliciousIframe[] = "/safe_browsing/malware_iframe.html";
 const char kUnrelatedUrl[] = "https://www.google.com";
+const char kEnhancedProtectionUrl[] = "chrome://settings/security?q=enhanced";
 
 }  // namespace
 
@@ -173,7 +178,7 @@
 bool Click(Browser* browser, const std::string& node_id) {
   DCHECK(node_id == "primary-button" || node_id == "proceed-link" ||
          node_id == "whitepaper-link" || node_id == "details-button" ||
-         node_id == "opt-in-checkbox")
+         node_id == "opt-in-checkbox" || node_id == "enhanced-protection-link")
       << "Unexpected node_id: " << node_id;
   content::RenderFrameHost* rfh = GetRenderFrameHost(browser);
   if (!rfh)
@@ -436,6 +441,8 @@
         IsEnhancedProtectionEnabled(*prefs), is_proceed_anyway_disabled,
         true,  // should_open_links_in_new_tab
         always_show_back_to_safety_,
+        IsEnhancedProtectionMessageInInterstitialsEnabled(),
+        IsSafeBrowsingPolicyManaged(*prefs),
         "cpn_safe_browsing" /* help_center_article_link */);
     return new TestSafeBrowsingBlockingPage(
         delegate, web_contents, main_frame_url, unsafe_resources,
@@ -2604,4 +2611,142 @@
   EXPECT_TRUE(IsShowingInterstitial(contents));
 }
 
+class SafeBrowsingBlockingPageEnhancedProtectionMessageTest
+    : public policy::PolicyTest {
+ public:
+  SafeBrowsingBlockingPageEnhancedProtectionMessageTest() = default;
+
+  void SetUp() override {
+    scoped_feature_list_.InitAndEnableFeature(
+        safe_browsing::kEnhancedProtectionMessageInInterstitials);
+    InProcessBrowserTest::SetUp();
+  }
+
+  void SetUpOnMainThread() override {
+    host_resolver()->AddRule("*", "127.0.0.1");
+    content::SetupCrossSiteRedirector(embedded_test_server());
+    ASSERT_TRUE(embedded_test_server()->Start());
+  }
+
+  void CreatedBrowserMainParts(
+      content::BrowserMainParts* browser_main_parts) override {
+    // Test UI manager and test database manager should be set before
+    // the browser is started but after threads are created.
+    factory_.SetTestUIManager(new FakeSafeBrowsingUIManager());
+    factory_.SetTestDatabaseManager(new FakeSafeBrowsingDatabaseManager());
+    SafeBrowsingService::RegisterFactory(&factory_);
+    SafeBrowsingBlockingPage::RegisterFactory(&blocking_page_factory_);
+    ThreatDetails::RegisterFactory(&details_factory_);
+  }
+
+ protected:
+  void SetupWarningAndNavigateToURL(GURL url, Browser* browser) {
+    TestSafeBrowsingService* service = factory_.test_safe_browsing_service();
+    ASSERT_TRUE(service);
+
+    static_cast<FakeSafeBrowsingDatabaseManager*>(
+        service->database_manager().get())
+        ->SetURLThreatType(url, SB_THREAT_TYPE_URL_MALWARE);
+
+    ui_test_utils::NavigateToURL(browser, url);
+    EXPECT_TRUE(WaitForReady(browser));
+  }
+
+ private:
+  TestSafeBrowsingServiceFactory factory_;
+  TestSafeBrowsingBlockingPageFactory blocking_page_factory_;
+  TestThreatDetailsFactory details_factory_;
+  base::test::ScopedFeatureList scoped_feature_list_;
+
+  DISALLOW_COPY_AND_ASSIGN(
+      SafeBrowsingBlockingPageEnhancedProtectionMessageTest);
+};
+
+IN_PROC_BROWSER_TEST_F(SafeBrowsingBlockingPageEnhancedProtectionMessageTest,
+                       VerifyEnhancedProtectionMessageShownAndClicked) {
+  safe_browsing::SetExtendedReportingPrefForTests(
+      browser()->profile()->GetPrefs(), true);
+  safe_browsing::SetSafeBrowsingState(
+      browser()->profile()->GetPrefs(),
+      safe_browsing::SafeBrowsingState::STANDARD_PROTECTION);
+  SetupWarningAndNavigateToURL(embedded_test_server()->GetURL("/empty.html"),
+                               browser());
+
+  // Check SBER opt in is not shown.
+  EXPECT_EQ(HIDDEN, ::safe_browsing::GetVisibility(
+                        browser(), "extended-reporting-opt-in"));
+  // Check enhanced protection message is shown.
+  EXPECT_EQ(VISIBLE, ::safe_browsing::GetVisibility(
+                         browser(), "enhanced-protection-message"));
+  WebContents* interstitial_tab =
+      browser()->tab_strip_model()->GetActiveWebContents();
+  ASSERT_TRUE(interstitial_tab);
+  ASSERT_TRUE(IsShowingInterstitial(
+      browser()->tab_strip_model()->GetActiveWebContents()));
+
+  content::TestNavigationObserver nav_observer(nullptr);
+  nav_observer.StartWatchingNewWebContents();
+  // Click the enhanced protection link.
+  EXPECT_TRUE(Click(browser(), "enhanced-protection-link"));
+
+  nav_observer.Wait();
+
+  // There are two tabs open.
+  EXPECT_EQ(2, browser()->tab_strip_model()->count());
+  // The second tab is visible.
+  EXPECT_EQ(1, browser()->tab_strip_model()->active_index());
+
+  // Assert the interstitial is not present in the foreground tab.
+  ASSERT_FALSE(IsShowingInterstitial(
+      browser()->tab_strip_model()->GetActiveWebContents()));
+
+  // Foreground tab displays the setting page.
+  WebContents* new_tab = browser()->tab_strip_model()->GetActiveWebContents();
+  ASSERT_TRUE(new_tab);
+  EXPECT_EQ(GURL(kEnhancedProtectionUrl), new_tab->GetURL());
+
+  // Interstitial should still display in the background tab.
+  browser()->tab_strip_model()->ActivateTabAt(
+      0, {TabStripModel::GestureType::kOther});
+  EXPECT_EQ(0, browser()->tab_strip_model()->active_index());
+  EXPECT_EQ(interstitial_tab,
+            browser()->tab_strip_model()->GetActiveWebContents());
+  EXPECT_TRUE(IsShowingInterstitial(
+      browser()->tab_strip_model()->GetActiveWebContents()));
+}
+
+IN_PROC_BROWSER_TEST_F(SafeBrowsingBlockingPageEnhancedProtectionMessageTest,
+                       VerifyEnhancedProtectionMessageNotShownAlreadyInEp) {
+  safe_browsing::SetExtendedReportingPrefForTests(
+      browser()->profile()->GetPrefs(), true);
+  safe_browsing::SetSafeBrowsingState(
+      browser()->profile()->GetPrefs(),
+      safe_browsing::SafeBrowsingState::ENHANCED_PROTECTION);
+  SetupWarningAndNavigateToURL(embedded_test_server()->GetURL("/empty.html"),
+                               browser());
+  EXPECT_TRUE(IsShowingInterstitial(
+      browser()->tab_strip_model()->GetActiveWebContents()));
+  // Check enhanced protection message is not shown.
+  EXPECT_EQ(HIDDEN, ::safe_browsing::GetVisibility(
+                        browser(), "enhanced-protection-message"));
+}
+
+IN_PROC_BROWSER_TEST_F(SafeBrowsingBlockingPageEnhancedProtectionMessageTest,
+                       VerifyEnhancedProtectionMessageNotShownManaged) {
+  policy::PolicyMap policies;
+  policies.Set(policy::key::kSafeBrowsingProtectionLevel,
+               policy::POLICY_LEVEL_MANDATORY, policy::POLICY_SCOPE_USER,
+               policy::POLICY_SOURCE_CLOUD,
+               base::Value(/* standard protection */ 1), nullptr);
+  UpdateProviderPolicy(policies);
+  SetupWarningAndNavigateToURL(embedded_test_server()->GetURL("/empty.html"),
+                               browser());
+
+  EXPECT_TRUE(IsShowingInterstitial(
+      browser()->tab_strip_model()->GetActiveWebContents()));
+  // Check enhanced protection message is not shown.
+  EXPECT_EQ(HIDDEN, ::safe_browsing::GetVisibility(
+                        browser(), "enhanced-protection-message"));
+}
+
 }  // namespace safe_browsing
diff --git a/chrome/browser/safe_browsing/test_safe_browsing_blocking_page_quiet.cc b/chrome/browser/safe_browsing/test_safe_browsing_blocking_page_quiet.cc
index 2e4bbbe..f5d4b3c5 100644
--- a/chrome/browser/safe_browsing/test_safe_browsing_blocking_page_quiet.cc
+++ b/chrome/browser/safe_browsing/test_safe_browsing_blocking_page_quiet.cc
@@ -6,6 +6,7 @@
 
 #include "components/grit/components_resources.h"
 #include "components/security_interstitials/content/security_interstitial_controller_client.h"
+#include "components/security_interstitials/content/settings_page_helper.h"
 #include "ui/base/resource/resource_bundle.h"
 #include "ui/base/webui/jstemplate_builder.h"
 #include "ui/base/webui/web_ui_util.h"
@@ -20,15 +21,17 @@
     const UnsafeResourceList& unsafe_resources,
     const BaseSafeBrowsingErrorUI::SBErrorDisplayOptions& display_options,
     bool is_giant_webview)
-    : BaseBlockingPage(ui_manager,
-                       web_contents,
-                       main_frame_url,
-                       unsafe_resources,
-                       CreateControllerClient(web_contents,
-                                              unsafe_resources,
-                                              ui_manager,
-                                              nullptr),
-                       display_options),
+    : BaseBlockingPage(
+          ui_manager,
+          web_contents,
+          main_frame_url,
+          unsafe_resources,
+          CreateControllerClient(web_contents,
+                                 unsafe_resources,
+                                 ui_manager,
+                                 nullptr,
+                                 /* settings_page_helper */ nullptr),
+          display_options),
       sb_error_ui_(unsafe_resources[0].url,
                    main_frame_url,
                    GetInterstitialReason(unsafe_resources),
diff --git a/chrome/browser/safe_browsing/ui_manager_unittest.cc b/chrome/browser/safe_browsing/ui_manager_unittest.cc
index b706fe9d..6f248f8 100644
--- a/chrome/browser/safe_browsing/ui_manager_unittest.cc
+++ b/chrome/browser/safe_browsing/ui_manager_unittest.cc
@@ -453,6 +453,8 @@
                 false,                 // is_proceed_anyway_disabled
                 true,                  // should_open_links_in_new_tab
                 true,                  // always_show_back_to_safety
+                false,                 // is_enhanced_protection_message_enabled
+                false,                 // is_safe_browsing_managed
                 "cpn_safe_browsing"),  // help_center_article_link
             true) {                    // should_trigger_reporting
     // Don't delay details at all for the unittest.
diff --git a/chrome/browser/search/local_ntp_source.cc b/chrome/browser/search/local_ntp_source.cc
index 78e58825..1a9f3dc 100644
--- a/chrome/browser/search/local_ntp_source.cc
+++ b/chrome/browser/search/local_ntp_source.cc
@@ -628,8 +628,7 @@
 
     if (is_google) {
       config_data.SetBoolean("richerPicker", true);
-      config_data.SetBoolean("realboxEnabled",
-                             ntp_features::IsRealboxEnabled());
+      config_data.SetBoolean("realboxEnabled", true);
       config_data.SetBoolean("realboxMatchOmniboxTheme",
                              base::FeatureList::IsEnabled(
                                  ntp_features::kRealboxMatchOmniboxTheme));
@@ -1045,9 +1044,8 @@
                                     "\" as=\"image\">";
     }
 
-    bool realbox_enabled = ntp_features::IsRealboxEnabled();
-    replacements["hiddenIfRealboxEnabled"] = realbox_enabled ? "hidden" : "";
-    replacements["hiddenIfRealboxDisabled"] = realbox_enabled ? "" : "hidden";
+    replacements["hiddenIfRealboxEnabled"] = "hidden";
+    replacements["hiddenIfRealboxDisabled"] = "";
 
     bool use_google_g_icon =
         base::FeatureList::IsEnabled(ntp_features::kRealboxUseGoogleGIcon);
diff --git a/chrome/browser/search/ntp_features.cc b/chrome/browser/search/ntp_features.cc
index 993757f9..533eba1 100644
--- a/chrome/browser/search/ntp_features.cc
+++ b/chrome/browser/search/ntp_features.cc
@@ -6,9 +6,6 @@
 
 #include "base/feature_list.h"
 #include "build/build_config.h"
-#include "components/omnibox/browser/omnibox_field_trial.h"
-#include "components/omnibox/common/omnibox_features.h"
-#include "ui/base/ui_base_features.h"
 
 namespace ntp_features {
 
@@ -46,11 +43,6 @@
 const base::Feature kRealboxUseGoogleGIcon{"NtpRealboxUseGoogleGIcon",
                                            base::FEATURE_DISABLED_BY_DEFAULT};
 
-// If enabled, the search box in the middle of the NTP will accept input
-// directly (i.e. not be a "fake" box) and search results will show directly
-// below the non-fake input ("realbox").
-const base::Feature kRealbox{"NtpRealbox", base::FEATURE_ENABLED_BY_DEFAULT};
-
 // If enabled, shows Vasco suggestion chips in the NTP below fakebox/realbox
 // despite other config except DisableSearchSuggestChips below.
 const base::Feature kSearchSuggestChips{"SearchSuggestChips",
@@ -65,10 +57,6 @@
 // instead of the local NTP.
 const base::Feature kWebUI{"NtpWebUI", base::FEATURE_ENABLED_BY_DEFAULT};
 
-// If disabled, the realbox will not show on the WebUI new tab page.
-const base::Feature kWebUIRealbox{"WebUIRealbox",
-                                  base::FEATURE_ENABLED_BY_DEFAULT};
-
 // If enabled, the Doodle will be shown on themed and dark mode NTPs.
 const base::Feature kWebUIThemeModeDoodles{"WebUIThemeModeDoodles",
                                            base::FEATURE_ENABLED_BY_DEFAULT};
@@ -80,14 +68,4 @@
 const base::Feature kNtpShoppingTasksModule{"NtpShoppingTasksModule",
                                             base::FEATURE_DISABLED_BY_DEFAULT};
 
-bool IsRealboxEnabled() {
-  if (!base::FeatureList::IsEnabled(omnibox::kNewSearchFeatures))
-    return false;
-
-  return base::FeatureList::IsEnabled(kRealbox) ||
-         base::FeatureList::IsEnabled(omnibox::kZeroSuggestionsOnNTPRealbox) ||
-         base::FeatureList::IsEnabled(
-             omnibox::kReactiveZeroSuggestionsOnNTPRealbox);
-}
-
 }  // namespace ntp_features
diff --git a/chrome/browser/search/ntp_features.h b/chrome/browser/search/ntp_features.h
index a2f1e7f..787adb8 100644
--- a/chrome/browser/search/ntp_features.h
+++ b/chrome/browser/search/ntp_features.h
@@ -20,22 +20,13 @@
 extern const base::Feature kRealboxMatchOmniboxTheme;
 extern const base::Feature kRealboxUseGoogleGIcon;
 extern const base::Feature kWebUI;
-extern const base::Feature kWebUIRealbox;
 extern const base::Feature kWebUIThemeModeDoodles;
 extern const base::Feature kModules;
 extern const base::Feature kNtpShoppingTasksModule;
 
-// Note: only exposed for about:flags. Use IsNtpRealboxEnabled() instead.
-extern const base::Feature kRealbox;
-
 extern const base::Feature kSearchSuggestChips;
 extern const base::Feature kDisableSearchSuggestChips;
 
-// Returns true if either kRealbox or omnibox::kZeroSuggestionsOnNTPRealbox
-// are enabled; or omnibox::kOnFocusSuggestions is enabled and configured to
-// show suggestions of some type in the NTP Realbox.
-bool IsRealboxEnabled();
-
 }  // namespace ntp_features
 
 #endif  // CHROME_BROWSER_SEARCH_NTP_FEATURES_H_
diff --git a/chrome/browser/search/ntp_features_unittest.cc b/chrome/browser/search/ntp_features_unittest.cc
deleted file mode 100644
index 2c51ded..0000000
--- a/chrome/browser/search/ntp_features_unittest.cc
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright 2019 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/search/ntp_features.h"
-
-#include <map>
-#include <vector>
-
-#include "base/test/scoped_feature_list.h"
-#include "components/omnibox/common/omnibox_features.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace ntp_features {
-
-TEST(NTPFeaturesTest, IsRealboxEnabled) {
-  {
-    EXPECT_TRUE(IsRealboxEnabled());
-
-    base::test::ScopedFeatureList feature_list;
-    // Realbox is disabled when new search features are disabled.
-    feature_list.InitAndDisableFeature(omnibox::kNewSearchFeatures);
-    EXPECT_FALSE(IsRealboxEnabled());
-  }
-}
-
-}  // namespace ntp_features
diff --git a/chrome/browser/ssl/chrome_security_blocking_page_factory.cc b/chrome/browser/ssl/chrome_security_blocking_page_factory.cc
index 2762202e..5726307 100644
--- a/chrome/browser/ssl/chrome_security_blocking_page_factory.cc
+++ b/chrome/browser/ssl/chrome_security_blocking_page_factory.cc
@@ -9,6 +9,7 @@
 #include "base/time/time.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/history/history_service_factory.h"
+#include "chrome/browser/interstitials/chrome_settings_page_helper.h"
 #include "chrome/browser/net/secure_dns_config.h"
 #include "chrome/browser/net/stub_resolver_config_reader.h"
 #include "chrome/browser/profiles/profile.h"
@@ -18,6 +19,7 @@
 #include "chrome/browser/ssl/stateful_ssl_host_state_delegate_factory.h"
 #include "chrome/common/channel_info.h"
 #include "components/security_interstitials/content/content_metrics_helper.h"
+#include "components/security_interstitials/content/settings_page_helper.h"
 #include "components/security_interstitials/content/ssl_blocking_page.h"
 #include "components/security_interstitials/content/stateful_ssl_host_state_delegate.h"
 #include "components/security_interstitials/core/controller_client.h"
@@ -130,6 +132,12 @@
   return metrics_helper;
 }
 
+std::unique_ptr<security_interstitials::SettingsPageHelper>
+CreateSettingsPageHelper() {
+  return security_interstitials::ChromeSettingsPageHelper::
+      CreateChromeSettingsPageHelper();
+}
+
 }  // namespace
 
 std::unique_ptr<SSLBlockingPage>
@@ -173,7 +181,7 @@
 
   auto controller_client = std::make_unique<SSLErrorControllerClient>(
       web_contents, ssl_info, cert_error, request_url,
-      std::move(metrics_helper));
+      std::move(metrics_helper), CreateSettingsPageHelper());
 
   std::unique_ptr<SSLBlockingPage> page;
 
@@ -200,7 +208,8 @@
       std::make_unique<SSLErrorControllerClient>(
           web_contents, ssl_info, cert_error, request_url,
           CreateMetricsHelperAndStartRecording(web_contents, request_url,
-                                               "captive_portal", false)),
+                                               "captive_portal", false),
+          CreateSettingsPageHelper()),
       base::BindRepeating(&OpenLoginPage));
 
   DoChromeSpecificSetup(page.get());
@@ -222,7 +231,8 @@
       std::make_unique<SSLErrorControllerClient>(
           web_contents, ssl_info, cert_error, request_url,
           CreateMetricsHelperAndStartRecording(web_contents, request_url,
-                                               "bad_clock", false)));
+                                               "bad_clock", false),
+          CreateSettingsPageHelper()));
 
   ChromeSecurityBlockingPageFactory::DoChromeSpecificSetup(page.get());
   return page;
@@ -241,7 +251,8 @@
       std::make_unique<SSLErrorControllerClient>(
           web_contents, ssl_info, cert_error, request_url,
           CreateMetricsHelperAndStartRecording(web_contents, request_url,
-                                               "legacy_tls", false)));
+                                               "legacy_tls", false),
+          CreateSettingsPageHelper()));
 
   DoChromeSpecificSetup(page.get());
   return page;
@@ -261,7 +272,8 @@
       std::make_unique<SSLErrorControllerClient>(
           web_contents, ssl_info, cert_error, request_url,
           CreateMetricsHelperAndStartRecording(web_contents, request_url,
-                                               "mitm_software", false)));
+                                               "mitm_software", false),
+          CreateSettingsPageHelper()));
 
   DoChromeSpecificSetup(page.get());
   return page;
@@ -280,7 +292,8 @@
       std::make_unique<SSLErrorControllerClient>(
           web_contents, ssl_info, cert_error, request_url,
           CreateMetricsHelperAndStartRecording(web_contents, request_url,
-                                               "blocked_interception", false)));
+                                               "blocked_interception", false),
+          CreateSettingsPageHelper()));
 
   ChromeSecurityBlockingPageFactory::DoChromeSpecificSetup(page.get());
   return page;
diff --git a/chrome/browser/ssl/insecure_form/insecure_form_controller_client.cc b/chrome/browser/ssl/insecure_form/insecure_form_controller_client.cc
index 4cd6e61..dda03486 100644
--- a/chrome/browser/ssl/insecure_form/insecure_form_controller_client.cc
+++ b/chrome/browser/ssl/insecure_form/insecure_form_controller_client.cc
@@ -5,8 +5,10 @@
 #include "chrome/browser/ssl/insecure_form/insecure_form_controller_client.h"
 
 #include "chrome/browser/browser_process.h"
+#include "chrome/browser/interstitials/chrome_settings_page_helper.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/common/webui_url_constants.h"
+#include "components/security_interstitials/content/settings_page_helper.h"
 #include "content/public/browser/web_contents.h"
 
 // static
@@ -27,7 +29,8 @@
           Profile::FromBrowserContext(web_contents->GetBrowserContext())
               ->GetPrefs(),
           g_browser_process->GetApplicationLocale(),
-          GURL(chrome::kChromeUINewTabURL)),
+          GURL(chrome::kChromeUINewTabURL),
+          /*settings_page_helper=*/nullptr),
       web_contents_(web_contents) {}
 
 InsecureFormControllerClient::~InsecureFormControllerClient() = default;
diff --git a/chrome/browser/ssl/insecure_form/insecure_form_controller_client.h b/chrome/browser/ssl/insecure_form/insecure_form_controller_client.h
index 8ca3704..ba049f45 100644
--- a/chrome/browser/ssl/insecure_form/insecure_form_controller_client.h
+++ b/chrome/browser/ssl/insecure_form/insecure_form_controller_client.h
@@ -33,4 +33,4 @@
   content::WebContents* web_contents_;
 };
 
-#endif  // CHROME_BROWSER_SSL_INSECURE_FORM_INSECURE_FORM_CONTROLLER_CLIENT_H_
\ No newline at end of file
+#endif  // CHROME_BROWSER_SSL_INSECURE_FORM_INSECURE_FORM_CONTROLLER_CLIENT_H_
diff --git a/chrome/browser/ssl/ssl_browsertest.cc b/chrome/browser/ssl/ssl_browsertest.cc
index 033d824..281b835 100644
--- a/chrome/browser/ssl/ssl_browsertest.cc
+++ b/chrome/browser/ssl/ssl_browsertest.cc
@@ -91,6 +91,7 @@
 #include "components/policy/policy_constants.h"
 #include "components/prefs/testing_pref_service.h"
 #include "components/safe_browsing/core/common/safe_browsing_prefs.h"
+#include "components/safe_browsing/core/features.h"
 #include "components/security_interstitials/content/bad_clock_blocking_page.h"
 #include "components/security_interstitials/content/captive_portal_blocking_page.h"
 #include "components/security_interstitials/content/cert_report_helper.h"
@@ -8267,6 +8268,76 @@
   EXPECT_EQ(base::nullopt, timer);
 }
 
+class SSLUITestWithEnhancedProtectionMessage : public SSLUITest {
+ public:
+  SSLUITestWithEnhancedProtectionMessage() {
+    feature_list_.InitAndEnableFeature(
+        safe_browsing::kEnhancedProtectionMessageInInterstitials);
+  }
+
+ private:
+  base::test::ScopedFeatureList feature_list_;
+};
+
+IN_PROC_BROWSER_TEST_F(SSLUITestWithEnhancedProtectionMessage,
+                       VerifyEnhancedProtectionMessageShown) {
+  safe_browsing::SetExtendedReportingPrefForTests(
+      browser()->profile()->GetPrefs(), true);
+  safe_browsing::SetSafeBrowsingState(
+      browser()->profile()->GetPrefs(),
+      safe_browsing::SafeBrowsingState::STANDARD_PROTECTION);
+  ASSERT_TRUE(https_server_expired_.Start());
+  WebContents* contents = browser()->tab_strip_model()->GetActiveWebContents();
+  ASSERT_TRUE(contents);
+  ui_test_utils::NavigateToURL(
+      browser(), https_server_expired_.GetURL("/ssl/google.html"));
+  WaitForInterstitial(contents);
+  ASSERT_TRUE(chrome_browser_interstitials::IsShowingSSLInterstitial(contents));
+  ExpectInterstitialElementHidden(contents, "extended-reporting-opt-in",
+                                  true /* expect_hidden */);
+  ExpectInterstitialElementHidden(contents, "enhanced-protection-message",
+                                  false /* expect_hidden */);
+}
+
+IN_PROC_BROWSER_TEST_F(SSLUITestWithEnhancedProtectionMessage,
+                       VerifyEnhancedProtectionMessageNotShownAlreadyInEp) {
+  safe_browsing::SetExtendedReportingPrefForTests(
+      browser()->profile()->GetPrefs(), true);
+  safe_browsing::SetSafeBrowsingState(
+      browser()->profile()->GetPrefs(),
+      safe_browsing::SafeBrowsingState::ENHANCED_PROTECTION);
+  ASSERT_TRUE(https_server_expired_.Start());
+  WebContents* contents = browser()->tab_strip_model()->GetActiveWebContents();
+  ASSERT_TRUE(contents);
+  ui_test_utils::NavigateToURL(
+      browser(), https_server_expired_.GetURL("/ssl/google.html"));
+  WaitForInterstitial(contents);
+  ASSERT_TRUE(chrome_browser_interstitials::IsShowingSSLInterstitial(contents));
+  ExpectInterstitialElementHidden(contents, "extended-reporting-opt-in",
+                                  true /* expect_hidden */);
+  ExpectInterstitialElementHidden(contents, "enhanced-protection-message",
+                                  true /* expect_hidden */);
+}
+
+IN_PROC_BROWSER_TEST_F(SSLUITestWithEnhancedProtectionMessage,
+                       VerifyEnhancedProtectionMessageNotShownManaged) {
+  policy::PolicyMap policies;
+  policies.Set(policy::key::kSafeBrowsingProtectionLevel,
+               policy::POLICY_LEVEL_MANDATORY, policy::POLICY_SCOPE_USER,
+               policy::POLICY_SOURCE_CLOUD,
+               base::Value(/* standard protection */ 1), nullptr);
+  UpdateChromePolicy(policies);
+  ASSERT_TRUE(https_server_expired_.Start());
+  WebContents* contents = browser()->tab_strip_model()->GetActiveWebContents();
+  ASSERT_TRUE(contents);
+  ui_test_utils::NavigateToURL(
+      browser(), https_server_expired_.GetURL("/ssl/google.html"));
+  WaitForInterstitial(contents);
+  ASSERT_TRUE(chrome_browser_interstitials::IsShowingSSLInterstitial(contents));
+  ExpectInterstitialElementHidden(contents, "enhanced-protection-message",
+                                  true /* expect_hidden */);
+}
+
 // TODO(jcampan): more tests to do below.
 
 // Visit a page over https that contains a frame with a redirect.
diff --git a/chrome/browser/ssl/ssl_error_controller_client.cc b/chrome/browser/ssl/ssl_error_controller_client.cc
index 8a054a0..c84ef4a1 100644
--- a/chrome/browser/ssl/ssl_error_controller_client.cc
+++ b/chrome/browser/ssl/ssl_error_controller_client.cc
@@ -23,6 +23,7 @@
 #include "chrome/common/url_constants.h"
 #include "components/safe_browsing/core/common/safe_browsing_prefs.h"
 #include "components/security_interstitials/content/content_metrics_helper.h"
+#include "components/security_interstitials/content/settings_page_helper.h"
 #include "components/security_interstitials/content/stateful_ssl_host_state_delegate.h"
 #include "components/security_interstitials/content/utils.h"
 #include "content/public/browser/browser_thread.h"
@@ -78,14 +79,17 @@
     const net::SSLInfo& ssl_info,
     int cert_error,
     const GURL& request_url,
-    std::unique_ptr<security_interstitials::MetricsHelper> metrics_helper)
+    std::unique_ptr<security_interstitials::MetricsHelper> metrics_helper,
+    std::unique_ptr<security_interstitials::SettingsPageHelper>
+        settings_page_helper)
     : SecurityInterstitialControllerClient(
           web_contents,
           std::move(metrics_helper),
           Profile::FromBrowserContext(web_contents->GetBrowserContext())
               ->GetPrefs(),
           g_browser_process->GetApplicationLocale(),
-          GURL(chrome::kChromeUINewTabURL)),
+          GURL(chrome::kChromeUINewTabURL),
+          std::move(settings_page_helper)),
       ssl_info_(ssl_info),
       request_url_(request_url),
       cert_error_(cert_error) {
diff --git a/chrome/browser/ssl/ssl_error_controller_client.h b/chrome/browser/ssl/ssl_error_controller_client.h
index 1c01ed5..e022cb6 100644
--- a/chrome/browser/ssl/ssl_error_controller_client.h
+++ b/chrome/browser/ssl/ssl_error_controller_client.h
@@ -13,6 +13,10 @@
 class WebContents;
 }
 
+namespace security_interstitials {
+class SettingsPageHelper;
+}
+
 // Provides embedder-specific logic for the SSL error page controller.
 class SSLErrorControllerClient
     : public security_interstitials::SecurityInterstitialControllerClient {
@@ -31,7 +35,9 @@
       const net::SSLInfo& ssl_info,
       int cert_error,
       const GURL& request_url,
-      std::unique_ptr<security_interstitials::MetricsHelper> metrics_helper);
+      std::unique_ptr<security_interstitials::MetricsHelper> metrics_helper,
+      std::unique_ptr<security_interstitials::SettingsPageHelper>
+          settings_page_helper);
   ~SSLErrorControllerClient() override;
 
   // security_interstitials::ControllerClient overrides
diff --git a/chrome/browser/translate/android/translate_bridge.cc b/chrome/browser/translate/android/translate_bridge.cc
index bf55e34..c12a5f41 100644
--- a/chrome/browser/translate/android/translate_bridge.cc
+++ b/chrome/browser/translate/android/translate_bridge.cc
@@ -132,6 +132,40 @@
   client->SetPredefinedTargetLanguage(translate_language);
 }
 
+static base::android::ScopedJavaLocalRef<jstring>
+JNI_TranslateBridge_GetOriginalLanguage(
+    JNIEnv* env,
+    const base::android::JavaParamRef<jobject>& j_web_contents) {
+  content::WebContents* web_contents =
+      content::WebContents::FromJavaWebContents(j_web_contents);
+  ChromeTranslateClient* client =
+      ChromeTranslateClient::FromWebContents(web_contents);
+  DCHECK(client);
+  const std::string& original_language_code =
+      client->GetLanguageState().original_language();
+  DCHECK(!original_language_code.empty());
+  base::android::ScopedJavaLocalRef<jstring> j_original_language =
+      base::android::ConvertUTF8ToJavaString(env, original_language_code);
+  return j_original_language;
+}
+
+static base::android::ScopedJavaLocalRef<jstring>
+JNI_TranslateBridge_GetCurrentLanguage(
+    JNIEnv* env,
+    const base::android::JavaParamRef<jobject>& j_web_contents) {
+  content::WebContents* web_contents =
+      content::WebContents::FromJavaWebContents(j_web_contents);
+  ChromeTranslateClient* client =
+      ChromeTranslateClient::FromWebContents(web_contents);
+  DCHECK(client);
+  const std::string& current_language_code =
+      client->GetLanguageState().current_language();
+  DCHECK(!current_language_code.empty());
+  base::android::ScopedJavaLocalRef<jstring> j_current_language =
+      base::android::ConvertUTF8ToJavaString(env, current_language_code);
+  return j_current_language;
+}
+
 // Returns the preferred target language to translate into for this user.
 static base::android::ScopedJavaLocalRef<jstring>
 JNI_TranslateBridge_GetTargetLanguage(JNIEnv* env) {
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_bs.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_bs.xtb
index f9d70d1..154105f 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_bs.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_bs.xtb
@@ -344,7 +344,7 @@
 <translation id="3568688522516854065">Da dobijete svoje kartice s vaših drugih uređaja, prijavite se i uključite sinhronizaciju</translation>
 <translation id="3587482841069643663">Sve</translation>
 <translation id="3587596251841506391">Poboljšajte sigurnost na webu</translation>
-<translation id="3598653140581545904">Upotreba anonimnog načina za prijavu</translation>
+<translation id="3598653140581545904">Koristite anonimni način rada da se prijavite</translation>
 <translation id="3599863153486145794">Briše historiju sa svih prijavljenih uređaja. Vaš Google račun može imati druge oblike historije pregledanja na <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
 <translation id="3602290021589620013">Pregled</translation>
 <translation id="3616113530831147358">Zvuk</translation>
@@ -386,7 +386,7 @@
 <translation id="3927692899758076493">Sans-serif</translation>
 <translation id="3928666092801078803">Kombiniraj moje podatke</translation>
 <translation id="393697183122708255">Glasovno pretraživanje nije dostupno</translation>
-<translation id="3943557322767080599">Prikažite upite Chromea za prijavu prilikom prijave na Google račun</translation>
+<translation id="3943557322767080599">Prikazuj upite za prijavu u Chrome prilikom prijavljivanja na Google račun</translation>
 <translation id="395206256282351086">Prijedlozi za pretraživanje i web lokacije su onemogućeni</translation>
 <translation id="396192773038029076">{NUM_IN_PROGRESS,plural, =1{Chrome će učitati vašu stranicu kada bude spreman}one{Chrome će učitati vaše stranice kada bude spreman}few{Chrome će učitati vaše stranice kada bude spreman}other{Chrome će učitati vaše stranice kada bude spreman}}</translation>
 <translation id="3963007978381181125">Šifrovanje pristupnim izrazom ne uključuje načine plaćanja i adrese iz Google Paya. Samo neko ko ima vaš pristupni izraz može čitati šifrirane podatke. Pristupni izraz se ne šalje Googleu niti se na njemu pohranjuje. Ako zaboravite svoj pristupni izraz ili želite izmijeniti ovu postavku, trebat ćete poništiti sinhronizaciju. <ph name="BEGIN_LINK" />Saznajte više<ph name="END_LINK" /></translation>
@@ -662,7 +662,7 @@
 <translation id="5937580074298050696"><ph name="AMOUNT" /> sačuvano</translation>
 <translation id="5939518447894949180">Ponovno postavi</translation>
 <translation id="5942872142862698679">Korištenje Googlea za pretraživanje</translation>
-<translation id="5951119116059277034">Pregledavanje aktualne stranice</translation>
+<translation id="5951119116059277034">Prikazivanje aktivne stranice</translation>
 <translation id="5951615825629292797">Jezik je spreman. Ponovo pokrenite aplikaciju <ph name="APP_NAME" /></translation>
 <translation id="5952764234151283551">Googleu šalje URL stranice kojoj pokušavate pristupiti</translation>
 <translation id="5956665950594638604">Otvori Chrome Centar za pomoć u novoj kartici</translation>
@@ -672,7 +672,7 @@
 <translation id="5964805880140440652">Da dijelite ovu stranicu s drugim uređajem, u postavkama Chromea uključite sinhronizaciju</translation>
 <translation id="5964869237734432770">Zaustavi opise slika</translation>
 <translation id="5979084224081478209">Provjeri lozinke</translation>
-<translation id="5982307838673692400">Otvaranje anonimne kartice</translation>
+<translation id="5982307838673692400">Otvori anonimnu karticu</translation>
 <translation id="6000066717592683814">Zadrži Google</translation>
 <translation id="6005538289190791541">Prijedlog za lozinku</translation>
 <translation id="6014293228235665243">Nepročitano</translation>
@@ -702,7 +702,7 @@
 <translation id="6192907950379606605">Preuzmi opise slika</translation>
 <translation id="6206830853671714236">Odaberite kada preuzeti</translation>
 <translation id="6210748933810148297">Vi niste <ph name="EMAIL" />?</translation>
-<translation id="6211386937064921208">Pregledavanje ove stranice</translation>
+<translation id="6211386937064921208">Pregledanje ove stranice</translation>
 <translation id="6218096829563201111">Pretraži slične proizvode <ph name="BEGIN_NEW" />Novo<ph name="END_NEW" /></translation>
 <translation id="6221633008163990886">Otključajte da izvezete lozinke</translation>
 <translation id="6232535412751077445">Ako omogućite "Bez praćenja", taj će se zahtjev slati uz vaš saobraćaj pregledanja. Efikasnost zavisi od toga reagira li web lokacija na zahtjev i na koji način se taj zahtjev tumači.
@@ -814,9 +814,9 @@
 <translation id="6900532703269623216">Poboljšana zaštita</translation>
 <translation id="6903907808598579934">Uključi sinhronizaciju</translation>
 <translation id="6929699136511445623">Omogući sinhronizaciju Android sistema</translation>
-<translation id="6941901516114974832">U anonimnom načinu vaše aktivnosti <ph name="BEGIN_BOLD1" />i dalje mogu biti vidljive <ph name="END_BOLD1" />web-lokacijama koje posjećujete, vašem poslodavcu ili školi te davatelju internetskih usluga.
+<translation id="6941901516114974832">U anonimnom načinu rada, vašu aktivnost <ph name="BEGIN_BOLD1" />će možda i dalje moći vidjeti<ph name="END_BOLD1" /> web lokacije koje posjetite, vaš poslodavac ili škola te pružalac internet usluga.
 
-Podaci iz vaših anonimnih sesija izbrisat će se iz Chromea tek kad <ph name="BEGIN_BOLD2" />zatvorite sve anonimne kartice<ph name="END_BOLD2" />.</translation>
+Podaci iz vaših anonimnih sesija će se obrisati iz Chromea kada <ph name="BEGIN_BOLD2" />zatvorite sve anonimne kartice<ph name="END_BOLD2" />.</translation>
 <translation id="6942665639005891494">Promijenite zadanu lokaciju za preuzimanje bilo kada koristeći opciju Postavke u meniju</translation>
 <translation id="6945221475159498467">Odaberi</translation>
 <translation id="6955535239952325894">Ova postavka je onemogućena na upravljanim preglednicima</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_de.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_de.xtb
index d92cba3..21fac17 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_de.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_de.xtb
@@ -667,6 +667,7 @@
 <translation id="5958275228015807058">Ihre Dateien und Seiten finden Sie unter "Downloads"</translation>
 <translation id="5962718611393537961">Zum Minimieren tippen</translation>
 <translation id="5964805880140440652">Wenn Sie diese Seite mit einem anderen Gerät teilen möchten, aktivieren Sie in den Chrome-Einstellungen die Synchronisierung</translation>
+<translation id="5964869237734432770">Bildbeschreibungen beenden</translation>
 <translation id="5979084224081478209">Passwörter prüfen</translation>
 <translation id="6000066717592683814">Google beibehalten</translation>
 <translation id="6005538289190791541">Vorgeschlagenes Passwort</translation>
@@ -694,6 +695,7 @@
 <translation id="6157392216611456285"><ph name="APP_NAME" /> auswählen</translation>
 <translation id="6159335304067198720"><ph name="PERCENT" /> Einsparungen bei der Datennutzung</translation>
 <translation id="6186394685773237175">Keine gehackten Passwörter gefunden</translation>
+<translation id="6192907950379606605">Bildbeschreibungen abrufen</translation>
 <translation id="6206830853671714236">Uhrzeit für den Download auswählen</translation>
 <translation id="6210748933810148297"><ph name="EMAIL" /> ist nicht Ihre E-Mail-Adresse?</translation>
 <translation id="6218096829563201111">Ähnliche Produkte suchen <ph name="BEGIN_NEW" />Neu<ph name="END_NEW" /></translation>
@@ -762,6 +764,7 @@
 <translation id="6590471736817333463">Bis zu 60 % Daten sparen</translation>
 <translation id="6590680911007613645">Das Passwort, das Sie speichern, muss mit dem Passwort für <ph name="SITE" /> übereinstimmen</translation>
 <translation id="6593061639179217415">Desktopwebsite</translation>
+<translation id="6595046016124923392">Bilder werden an Google gesendet, um die Beschreibungen für Sie zu verbessern.</translation>
 <translation id="6597891566292541626">Positionieren Sie den QR- oder Barcode in diesem Bereich.</translation>
 <translation id="6600954340915313787">In Chrome kopiert</translation>
 <translation id="661266467055912436">Verbessert die Sicherheit für Sie und alle im Internet.</translation>
@@ -820,6 +823,7 @@
 <translation id="702463548815491781">Empfohlen, wenn TalkBack oder der Schalterzugriff aktiviert ist</translation>
 <translation id="7029809446516969842">Passwörter</translation>
 <translation id="703523980599857277">Startseite ändern</translation>
+<translation id="7054588988317389591">Bildbeschreibungen abrufen?</translation>
 <translation id="7055152154916055070">Weiterleitung blockiert:</translation>
 <translation id="7063006564040364415">Verbindung zum Synchronisierungsserver konnte nicht hergestellt werden.</translation>
 <translation id="7071521146534760487">Konto verwalten</translation>
@@ -851,6 +855,7 @@
 <translation id="729975465115245577">Auf Ihrem Gerät befindet sich keine App zum Speichern der Passwortdatei.</translation>
 <translation id="7302081693174882195">Details: Nach der Menge der gespeicherten Daten sortiert</translation>
 <translation id="7304873321153398381">Offline. Chrome kann Ihre Passwörter nicht prüfen.</translation>
+<translation id="7313188324932846546">Zum Einrichten der Synchronisierung tippen</translation>
 <translation id="7328017930301109123">Im Lite-Modus werden Seiten schneller in Chrome geladen und es werden bis zu 60 Prozent weniger Daten verbraucht.</translation>
 <translation id="7333031090786104871">Vorherige Website wird noch hinzugefügt</translation>
 <translation id="7340958967809483333">Optionen für Discover</translation>
@@ -1042,6 +1047,7 @@
 <translation id="8636825310635137004">Aktivieren Sie die Synchronisierung, um Tabs von Ihren anderen Geräten abzurufen.</translation>
 <translation id="8641930654639604085">Versuchen, nicht jugendfreie Websites zu blockieren</translation>
 <translation id="8655129584991699539">Sie können die Daten in den Chrome-Einstellungen löschen</translation>
+<translation id="8656747343598256512">Melden Sie sich bei dieser Website und in Chrome mit Ihrem Google-Konto an. Sie können die Synchronisierung später aktivieren.</translation>
 <translation id="8659579665266920523">Mit Chrome suchen</translation>
 <translation id="8662811608048051533">Sie werden von den meisten Websites abgemeldet.</translation>
 <translation id="8664979001105139458">Dateiname schon vorhanden</translation>
@@ -1061,6 +1067,7 @@
 <translation id="8840953339110955557">Diese Seite unterscheidet sich gegebenenfalls von der Onlineversion.</translation>
 <translation id="8853345339104747198"><ph name="TAB_TITLE" /></translation>
 <translation id="8854223127042600341">Offlinedateien ansehen</translation>
+<translation id="8856607253650333758">Beschreibungen erhalten</translation>
 <translation id="8873817150012960745">Zum Starten hier tippen</translation>
 <translation id="889338405075704026">Zu den Chrome-Einstellungen</translation>
 <translation id="8898822736010347272">URLs einiger von Ihnen besuchter Seiten, eingeschränkte Systemdaten und manche Seiteninhalte werden an Google gesendet, um die Erkennung neuer Bedrohungen zu verbessern und Nutzer im Internet zu schützen.</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_es-419.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_es-419.xtb
index ba058b7..2b610ce 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_es-419.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_es-419.xtb
@@ -344,6 +344,7 @@
 <translation id="3568688522516854065">Para obtener las pestañas de tus otros dispositivos, accede a tu cuenta y activa la sincronización</translation>
 <translation id="3587482841069643663">Todos</translation>
 <translation id="3587596251841506391">Ayuda a mejorar la seguridad en la Web</translation>
+<translation id="3598653140581545904">Usa el modo Incógnito para acceder</translation>
 <translation id="3599863153486145794">Borra el historial de todos los dispositivos en los que accediste. Es posible que tu cuenta de Google tenga otros tipos de historial de navegación en <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
 <translation id="3602290021589620013">Vista previa</translation>
 <translation id="3616113530831147358">Audio</translation>
@@ -385,6 +386,7 @@
 <translation id="3927692899758076493">Sans Serif</translation>
 <translation id="3928666092801078803">Combinar mis datos</translation>
 <translation id="393697183122708255">La búsqueda por voz no está habilitada</translation>
+<translation id="3943557322767080599">Muestra mensajes de acceso de Chrome cuando ingresas a tu Cuenta de Google.</translation>
 <translation id="395206256282351086">Se inhabilitaron las sugerencias de sitios y búsqueda</translation>
 <translation id="396192773038029076">{NUM_IN_PROGRESS,plural, =1{Chrome cargará la página cuando esté lista}other{Chrome cargará las páginas cuando estén listas}}</translation>
 <translation id="3963007978381181125">La encriptación de la frase de contraseña no incluye formas de pago ni direcciones de Google Pay. Solo las personas que tengan tu frase de contraseña pueden leer los datos encriptados. Google no envía ni almacena la frase de contraseña. Si la olvidas o quieres cambiar esta configuración, deberás restablecer la sincronización. <ph name="BEGIN_LINK" />Más información<ph name="END_LINK" /></translation>
@@ -660,6 +662,7 @@
 <translation id="5937580074298050696">Datos ahorrados: <ph name="AMOUNT" /></translation>
 <translation id="5939518447894949180">Restablecer</translation>
 <translation id="5942872142862698679">Se usa Google para la búsqueda</translation>
+<translation id="5951119116059277034">Viendo la página en vivo</translation>
 <translation id="5951615825629292797">El idioma está listo; reinicia <ph name="APP_NAME" /></translation>
 <translation id="5952764234151283551">Envía a Google la URL de la página a la que intentas acceder</translation>
 <translation id="5956665950594638604">Abrir Centro de ayuda de Chrome en pestaña nueva</translation>
@@ -667,7 +670,9 @@
 <translation id="5958275228015807058">Encuentra tus archivos y páginas en Descargas</translation>
 <translation id="5962718611393537961">Presiona para contraer</translation>
 <translation id="5964805880140440652">Para compartir esta página con otro dispositivo, activa la sincronización en la configuración de Chrome</translation>
+<translation id="5964869237734432770">Detener descripciones</translation>
 <translation id="5979084224081478209">Revisar contraseñas</translation>
+<translation id="5982307838673692400">Abrir una pestaña de incógnito</translation>
 <translation id="6000066717592683814">Seguir usando Google</translation>
 <translation id="6005538289190791541">Contraseña sugerida</translation>
 <translation id="6014293228235665243">No leídas</translation>
@@ -694,8 +699,10 @@
 <translation id="6157392216611456285">Elegir <ph name="APP_NAME" /></translation>
 <translation id="6159335304067198720"><ph name="PERCENT" /> de ahorro de datos</translation>
 <translation id="6186394685773237175">No se encontraron contraseñas hackeadas</translation>
+<translation id="6192907950379606605">Obtener descripciones</translation>
 <translation id="6206830853671714236">Elige cuándo iniciar la descarga</translation>
 <translation id="6210748933810148297">¿No eres <ph name="EMAIL" />?</translation>
+<translation id="6211386937064921208">Obtener la vista previa de esta página</translation>
 <translation id="6218096829563201111">Buscar productos afines <ph name="BEGIN_NEW" />Nuevo<ph name="END_NEW" /></translation>
 <translation id="6221633008163990886">Desbloquea la pantalla para exportar tus contraseñas</translation>
 <translation id="6232535412751077445">Si se habilita la opción de "No realizar seguimiento", se incluirá una solicitud con tu tráfico de navegación. Los efectos dependerán de si hay algún sitio web que responda a la solicitud y de cómo se interprete.
@@ -762,6 +769,7 @@
 <translation id="6590471736817333463">Ahorra hasta un 60% de datos</translation>
 <translation id="6590680911007613645">Asegúrate de que la contraseña que guardes coincida con la de <ph name="SITE" />.</translation>
 <translation id="6593061639179217415">Sitio de escritorio</translation>
+<translation id="6595046016124923392">Se envían las imágenes a Google para proporcionarte mejores descripciones.</translation>
 <translation id="6597891566292541626">Coloca el código QR o de barras en este recuadro.</translation>
 <translation id="6600954340915313787">Se copió en Chrome.</translation>
 <translation id="661266467055912436">Mejora la seguridad para ti y todos los usuarios de la Web.</translation>
@@ -806,6 +814,9 @@
 <translation id="6900532703269623216">Protección mejorada</translation>
 <translation id="6903907808598579934">Activar la sincronización</translation>
 <translation id="6929699136511445623">Habilitar la sincronización del sistema Android</translation>
+<translation id="6941901516114974832">En el modo Incógnito, es posible que los sitios web que visitas, tu empleador, tu institución educativa o el proveedor de servicios de Internet <ph name="BEGIN_BOLD1" />aún puedan ver <ph name="END_BOLD1" />tu actividad.
+
+Solo se borran de Chrome los datos de las sesiones de incógnito cuando <ph name="BEGIN_BOLD2" />se cierran todas las pestañas de incógnito<ph name="END_BOLD2" />.</translation>
 <translation id="6942665639005891494">Cambia la ubicación predeterminada de las descargas en cualquier momento en la opción de menú de Configuración</translation>
 <translation id="6945221475159498467">Seleccionar</translation>
 <translation id="6955535239952325894">Esta configuración está inhabilitada en navegadores administrados</translation>
@@ -820,6 +831,7 @@
 <translation id="702463548815491781">Se recomienda cuando TalkBack o Accesibilidad con interruptores están activadas</translation>
 <translation id="7029809446516969842">Contraseñas</translation>
 <translation id="703523980599857277">Cambiar la página principal</translation>
+<translation id="7054588988317389591">¿Deseas obtener la descripción de las imágenes?</translation>
 <translation id="7055152154916055070">Se bloqueó el redireccionamiento:</translation>
 <translation id="7063006564040364415">No se pudo establecer conexión con el servidor de sincronización.</translation>
 <translation id="7071521146534760487">Administrar cuenta</translation>
@@ -851,6 +863,7 @@
 <translation id="729975465115245577">Tu dispositivo no tiene una app que pueda almacenar el archivo de contraseñas.</translation>
 <translation id="7302081693174882195">Detalles: Ordenados por cantidad de datos ahorrados</translation>
 <translation id="7304873321153398381">Sin conexión. Chrome no puede verificar tus contraseñas.</translation>
+<translation id="7313188324932846546">Presionar para configurar la sincronización</translation>
 <translation id="7328017930301109123">En el modo lite, Chrome carga las páginas más rápido y usa hasta un 60 por ciento menos de datos.</translation>
 <translation id="7333031090786104871">Aún se está agregando el sitio anterior</translation>
 <translation id="7340958967809483333">Opciones para Descubre</translation>
@@ -1042,6 +1055,7 @@
 <translation id="8636825310635137004">Activa la sincronización para obtener las pestañas de tus otros dispositivos.</translation>
 <translation id="8641930654639604085">Tratar de bloquear los sitios para adultos</translation>
 <translation id="8655129584991699539">Puedes borrar los datos en la Configuración de Chrome</translation>
+<translation id="8656747343598256512">Accede a este sitio y a Chrome con tu Cuenta de Google. Puedes activar la sincronización más tarde.</translation>
 <translation id="8659579665266920523">Cómo realizar búsquedas en Chrome</translation>
 <translation id="8662811608048051533">Esta acción te hace salir de la mayoría de los sitios.</translation>
 <translation id="8664979001105139458">Ya existe el nombre del archivo</translation>
@@ -1061,6 +1075,7 @@
 <translation id="8840953339110955557">Es posible que esta página sea diferente con respecto a la versión en línea.</translation>
 <translation id="8853345339104747198">Pestaña <ph name="TAB_TITLE" /></translation>
 <translation id="8854223127042600341">Ver tus archivos sin conexión</translation>
+<translation id="8856607253650333758">Obtener descripciones</translation>
 <translation id="8873817150012960745">Presiona aquí para comenzar</translation>
 <translation id="889338405075704026">Ir a la configuración de Chrome</translation>
 <translation id="8898822736010347272">Envía a Google las URL de algunas páginas que visitas, información limitada del sistema y parte del contenido de las páginas para ayudar a detectar nuevas amenazas y proteger a todos los usuarios en la Web.</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_es.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_es.xtb
index c4e12ef..8ea20d1 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_es.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_es.xtb
@@ -344,6 +344,7 @@
 <translation id="3568688522516854065">Inicia sesión y activa la sincronización para ver las pestañas de tus otros dispositivos</translation>
 <translation id="3587482841069643663">Todo</translation>
 <translation id="3587596251841506391">Ayudar a mejorar la seguridad en la Web</translation>
+<translation id="3598653140581545904">Iniciar sesión en el modo de incógnito</translation>
 <translation id="3599863153486145794">Borra el historial de todos los dispositivos en los que hayas iniciado sesión. Es posible que tu cuenta de Google tenga otros tipos de historial de navegación en <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
 <translation id="3602290021589620013">Vista previa</translation>
 <translation id="3616113530831147358">Audio</translation>
@@ -385,6 +386,7 @@
 <translation id="3927692899758076493">Sans Serif</translation>
 <translation id="3928666092801078803">Combinar mis datos</translation>
 <translation id="393697183122708255">La búsqueda por voz no está disponible</translation>
+<translation id="3943557322767080599">Muestra mensajes de inicio de sesión en Chrome cuando inicias sesión con tu cuenta de Google</translation>
 <translation id="395206256282351086">Sugerencias de sitios web y búsqueda inhabilitadas</translation>
 <translation id="396192773038029076">{NUM_IN_PROGRESS,plural, =1{Chrome cargará la página cuando el dispositivo esté listo}other{Chrome cargará las páginas cuando el dispositivo esté listo}}</translation>
 <translation id="3963007978381181125">El cifrado mediante frase de contraseña no incluye los métodos de pago ni las direcciones de Google Pay. Solo alguien que tenga tu frase de contraseña puede leer tus datos cifrados. La frase de contraseña no se envía a Google, que tampoco la guarda. Si la olvidas o quieres cambiar esta opción, debes restablecer la sincronización. <ph name="BEGIN_LINK" />Más información<ph name="END_LINK" /></translation>
@@ -660,6 +662,7 @@
 <translation id="5937580074298050696">Ahorro: <ph name="AMOUNT" /></translation>
 <translation id="5939518447894949180">Restablecer</translation>
 <translation id="5942872142862698679">Google se ha establecido como motor de búsqueda predeterminado</translation>
+<translation id="5951119116059277034">Mostrando página publicada</translation>
 <translation id="5951615825629292797">Idioma listo, reinicia <ph name="APP_NAME" /></translation>
 <translation id="5952764234151283551">Envía a Google la URL de una página a la que intentas acceder</translation>
 <translation id="5956665950594638604">Abre la Ayuda de Chrome en una pestaña nueva</translation>
@@ -669,6 +672,7 @@
 <translation id="5964805880140440652">Para compartir esta página con otro dispositivo, activa la sincronización en los ajustes de Chrome.</translation>
 <translation id="5964869237734432770">Detener descripciones de imágenes</translation>
 <translation id="5979084224081478209">Comprobar contraseñas</translation>
+<translation id="5982307838673692400">Abrir una pestaña de incógnito</translation>
 <translation id="6000066717592683814">Mantener Google como motor de búsqueda predeterminado</translation>
 <translation id="6005538289190791541">Contraseña sugerida</translation>
 <translation id="6014293228235665243">No leído</translation>
@@ -698,6 +702,7 @@
 <translation id="6192907950379606605">Generar descrip. imágenes</translation>
 <translation id="6206830853671714236">Elige cuándo descargar</translation>
 <translation id="6210748933810148297">¿No eres <ph name="EMAIL" />?</translation>
+<translation id="6211386937064921208">Mostrando vista previa de esta página</translation>
 <translation id="6218096829563201111">Buscar productos similares <ph name="BEGIN_NEW" />Nuevo<ph name="END_NEW" /></translation>
 <translation id="6221633008163990886">Desbloquea el dispositivo para exportar las contraseñas</translation>
 <translation id="6232535412751077445">Al habilitar la opción No hacer seguimiento, se incluirá una solicitud con el tráfico de navegación. El efecto dependerá de si algún sitio web responde a la solicitud y de cómo se interpreta.
@@ -809,6 +814,9 @@
 <translation id="6900532703269623216">Protección mejorada</translation>
 <translation id="6903907808598579934">Activar sincronización</translation>
 <translation id="6929699136511445623">Habilitar sincronización del sistema Android</translation>
+<translation id="6941901516114974832">En el modo de incógnito, tu actividad <ph name="BEGIN_BOLD1" />podría seguir siendo visible<ph name="END_BOLD1" /> para los sitios web que visites, tu empresa, tu centro educativo o tu proveedor de servicios de Internet.
+
+Los datos de las sesiones de incógnito se borran de Chrome solo cuando <ph name="BEGIN_BOLD2" />se cierran todas las pestañas de incógnito<ph name="END_BOLD2" />.</translation>
 <translation id="6942665639005891494">Cambia la ubicación predeterminada de las descargas en cualquier momento con la opción del menú Configuración</translation>
 <translation id="6945221475159498467">Seleccionar</translation>
 <translation id="6955535239952325894">Este ajuste está inhabilitado en los navegadores administrados</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr.xtb
index 1f1b135..0c67bcf 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr.xtb
@@ -667,6 +667,7 @@
 <translation id="5958275228015807058">Recherchez vos fichiers et vos pages dans la section "Téléchargements"</translation>
 <translation id="5962718611393537961">Appuyer pour réduire</translation>
 <translation id="5964805880140440652">Pour partager cette page avec un autre appareil, activez la synchronisation dans les paramètres Chrome</translation>
+<translation id="5964869237734432770">Arrêter descriptions images</translation>
 <translation id="5979084224081478209">Vérifier les mots de passe</translation>
 <translation id="6000066717592683814">Conserver Google</translation>
 <translation id="6005538289190791541">Mot de passe suggéré</translation>
@@ -694,6 +695,7 @@
 <translation id="6157392216611456285">Sélectionner <ph name="APP_NAME" /></translation>
 <translation id="6159335304067198720"><ph name="PERCENT" /> de données économisées</translation>
 <translation id="6186394685773237175">Aucun mot de passe compromis trouvé</translation>
+<translation id="6192907950379606605">Obtenir descriptions images</translation>
 <translation id="6206830853671714236">Choisissez l'heure du téléchargement</translation>
 <translation id="6210748933810148297"><ph name="EMAIL" /> n'est pas votre adresse e-mail ?</translation>
 <translation id="6218096829563201111">Rechercher produits similaires <ph name="BEGIN_NEW" />Nouveau<ph name="END_NEW" /></translation>
@@ -762,6 +764,7 @@
 <translation id="6590471736817333463">Économisez jusqu'à 60 % de données mobiles</translation>
 <translation id="6590680911007613645">Assurez-vous que le mot de passe que vous enregistrez correspond bien à celui que vous utilisez pour accéder à <ph name="SITE" /></translation>
 <translation id="6593061639179217415">Version pour ordinateur</translation>
+<translation id="6595046016124923392">Les images sont envoyées à Google afin de vous proposer de meilleures descriptions.</translation>
 <translation id="6597891566292541626">Positionnez le code-barres/code QR dans ce cadre.</translation>
 <translation id="6600954340915313787">Copiée dans Chrome</translation>
 <translation id="661266467055912436">Il renforce votre sécurité et celle de tous les utilisateurs sur le Web.</translation>
@@ -820,6 +823,7 @@
 <translation id="702463548815491781">Recommandé quand TalkBack ou Switch Access sont activés</translation>
 <translation id="7029809446516969842">Mots de passe</translation>
 <translation id="703523980599857277">Changer de page d'accueil</translation>
+<translation id="7054588988317389591">Obtenir les descriptions d'images ?</translation>
 <translation id="7055152154916055070">Redirection bloquée :</translation>
 <translation id="7063006564040364415">Impossible de se connecter au serveur de synchronisation.</translation>
 <translation id="7071521146534760487">Gérer le compte</translation>
@@ -851,6 +855,7 @@
 <translation id="729975465115245577">Aucune application n'est installée sur votre appareil pour stocker le fichier de mots de passe.</translation>
 <translation id="7302081693174882195">Détails : tri effectué par volume de données enregistrées</translation>
 <translation id="7304873321153398381">Hors connexion. Chrome ne parvient pas à vérifier vos mots de passe.</translation>
+<translation id="7313188324932846546">Appuyez ici pour configurer la synchronisation</translation>
 <translation id="7328017930301109123">En mode simplifié, Chrome charge les pages plus rapidement et consomme jusqu'à 60 pour cent de données en moins.</translation>
 <translation id="7333031090786104871">L'ajout du site précédent est toujours en cours</translation>
 <translation id="7340958967809483333">Options pour Discover</translation>
@@ -1042,6 +1047,7 @@
 <translation id="8636825310635137004">Activez la synchronisation pour accéder à vos onglets sur vos autres appareils.</translation>
 <translation id="8641930654639604085">Essayer de bloquer les sites réservés aux adultes</translation>
 <translation id="8655129584991699539">Vous pouvez effacer les données dans les paramètres Chrome</translation>
+<translation id="8656747343598256512">Connectez-vous à ce site et à Chrome avec votre compte Google. Vous pourrez activer la synchronisation plus tard.</translation>
 <translation id="8659579665266920523">Comment effectuer une recherche avec Chrome</translation>
 <translation id="8662811608048051533">Vous déconnecte de la plupart des sites.</translation>
 <translation id="8664979001105139458">Nom de fichier déjà attribué</translation>
@@ -1061,6 +1067,7 @@
 <translation id="8840953339110955557">Cette page peut différer de la version en ligne.</translation>
 <translation id="8853345339104747198">"<ph name="TAB_TITLE" />", onglet</translation>
 <translation id="8854223127042600341">Consultez vos fichiers hors connexion</translation>
+<translation id="8856607253650333758">Obtenir les descriptions</translation>
 <translation id="8873817150012960745">Appuyez ici pour commencer</translation>
 <translation id="889338405075704026">Accéder aux paramètres Chrome</translation>
 <translation id="8898822736010347272">Les URL de certaines pages que vous consultez, ainsi que des informations système limitées et une partie du contenu de certaines pages sont envoyées à Google, à la fois pour identifier les nouvelles menaces et pour protéger tous les utilisateurs sur le Web.</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hi.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hi.xtb
index c2f20be..3d78a57 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hi.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hi.xtb
@@ -344,6 +344,7 @@
 <translation id="3568688522516854065">अपने दूसरे डिवाइस से अपने टैब पाने के लिए, साइन इन करें और 'सिंक करें' को चालू करें</translation>
 <translation id="3587482841069643663">सभी</translation>
 <translation id="3587596251841506391">वेब पर सुरक्षा बेहतर करने में मदद करें</translation>
+<translation id="3598653140581545904">साइन इन करने के लिए, गुप्त मोड का इस्तेमाल करें</translation>
 <translation id="3599863153486145794">साइन इन किए हुए सभी डिवाइसों से इतिहास साफ़ कर देता है. आपके Google खाते में <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> पर अन्य प्रकार के ब्राउज़िंग इतिहास हो सकते हैं.</translation>
 <translation id="3602290021589620013">झलक देखें</translation>
 <translation id="3616113530831147358">ऑडियो</translation>
@@ -385,6 +386,7 @@
 <translation id="3927692899758076493">Sans Serif</translation>
 <translation id="3928666092801078803">मेरा डेटा संयोजित करें</translation>
 <translation id="393697183122708255">कोई चालू बोलकर खोजने की सुविधा उपलब्‍ध नहीं है</translation>
+<translation id="3943557322767080599">Google खाते में साइन करने पर, Chrome में साइन इन करने के अनुरोध दिखाएं</translation>
 <translation id="395206256282351086">खोज और साइट सुझाव बंद हैं</translation>
 <translation id="396192773038029076">{NUM_IN_PROGRESS,plural, =1{तैयार होने पर Chrome आपका पेज लोड करेगा}one{तैयार होने पर Chrome आपके पेज लोड करेगा}other{तैयार होने पर Chrome आपके पेज लोड करेगा}}</translation>
 <translation id="3963007978381181125">लंबा पासवर्ड सुरक्षित करने के तरीके में Google Pay से भुगतान करने की विधि और पते शामिल नहीं हैं. सिर्फ़ वह इंसान आपका सुरक्षित किया हुआ डेटा पढ़ सकता है जिसके पास आपका लंबा पासवर्ड है. Google की ओर से लंबा पासवर्ड भेजा या संग्रहित नहीं किया जाता है. अगर आप अपना लंबा पासवर्ड भूल जाते हैं या इस सेटिंग को बदलना चाहते हैं, तो आपको सिंक रीसेट करना होगा. <ph name="BEGIN_LINK" />ज़्यादा जानें<ph name="END_LINK" /></translation>
@@ -660,6 +662,7 @@
 <translation id="5937580074298050696"><ph name="AMOUNT" /> सेव किए गए</translation>
 <translation id="5939518447894949180">रीसेट करें</translation>
 <translation id="5942872142862698679">खोजने के लिए Google का उपयोग किया जा रहा है</translation>
+<translation id="5951119116059277034">लाइव पेज देखा जा रहा है</translation>
 <translation id="5951615825629292797">भाषा, इस्तेमाल के लिए तैयार है. <ph name="APP_NAME" /> को रीस्टार्ट करें</translation>
 <translation id="5952764234151283551">आप जिस पेज पर जाने की कोशिश कर रहे हैं उसका यूआरएल Google को भेजती है</translation>
 <translation id="5956665950594638604">Chrome सहायता केंद्र को नए टैब में खोलें</translation>
@@ -669,6 +672,7 @@
 <translation id="5964805880140440652">इस पेज को किसी और डिवाइस पर शेयर करने के लिए, Chrome सेटिंग में सिंक की सुविधा चालू करें</translation>
 <translation id="5964869237734432770">इमेज की जानकारी न पाएं</translation>
 <translation id="5979084224081478209">पासवर्ड जांचें</translation>
+<translation id="5982307838673692400">गुप्त टैब खोलें</translation>
 <translation id="6000066717592683814">Google को डिफ़ॉल्ट बनाए रखें</translation>
 <translation id="6005538289190791541">सुझाया गया पासवर्ड</translation>
 <translation id="6014293228235665243">नहीं पढ़ा गया</translation>
@@ -698,6 +702,7 @@
 <translation id="6192907950379606605">ज़्यादा जानकारी पाएं</translation>
 <translation id="6206830853671714236">चुनें कि कब डाउनलोड करना है</translation>
 <translation id="6210748933810148297">क्या <ph name="EMAIL" /> नहीं हैं?</translation>
+<translation id="6211386937064921208">इस पेज की झलक दिखाई जा रही है</translation>
 <translation id="6218096829563201111">मिलते-जुलते प्रॉडक्ट खोजें <ph name="BEGIN_NEW" />नए<ph name="END_NEW" /></translation>
 <translation id="6221633008163990886">अपने पासवर्ड निर्यात करने के लिए अनलॉक करें</translation>
 <translation id="6232535412751077445">‘नज़र न रखें’ सुविधा को चालू करने का मतलब है कि आपके ब्राउज़िंग ट्रैफ़िक के साथ कोई अनुरोध शामिल किया जाएगा. कोई भी प्रभाव इस बात पर निर्भर करता है कि वेबसाइट, अनुरोध का जवाब देती है या नहीं और अनुरोध को किस तरह समझा जाता है.
@@ -809,6 +814,9 @@
 <translation id="6900532703269623216">बेहतर सुरक्षा मोड</translation>
 <translation id="6903907808598579934">समन्वयन चालू करें</translation>
 <translation id="6929699136511445623">Android सिस्टम सिंक चालू करें</translation>
+<translation id="6941901516114974832">गुप्त मोड में, आपकी गतिविधि उन वेबसाइटों को <ph name="BEGIN_BOLD1" />दिख सकती है <ph name="END_BOLD1" />जिन पर आप जाते हैं. यह गतिविधि, आपकी कंपनी या स्कूल और इंटरनेट सेवा देने वाली कंपनी को भी दिख सकती है.
+
+आपके गुप्त सत्र का डेटा Chrome से तब ही मिटेगा, जब आप <ph name="BEGIN_BOLD2" />सभी गुप्त टैब बंद करेंगे<ph name="END_BOLD2" />.</translation>
 <translation id="6942665639005891494">सेटिंग मेन्यू विकल्प का इस्तेमाल करके डिफ़ॉल्ट डाउनलोड स्थान किसी भी समय बदलें</translation>
 <translation id="6945221475159498467">चुनें</translation>
 <translation id="6955535239952325894">यह सेटिंग, प्रबंधित किए गए ब्राउज़र पर काम नहीं करती है</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hu.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hu.xtb
index fc106bc..5712d5e 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hu.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hu.xtb
@@ -344,6 +344,7 @@
 <translation id="3568688522516854065">Ha a többi eszközén is szeretné elérni lapjait, jelentkezzen be, és kapcsolja be a szinkronizálást</translation>
 <translation id="3587482841069643663">Mind</translation>
 <translation id="3587596251841506391">Legyen biztonságos a böngészés</translation>
+<translation id="3598653140581545904">Inkognitó mód használata a bejelentkezéshez</translation>
 <translation id="3599863153486145794">Törli az előzményeket valamennyi bejelentkezett eszközről. Előfordulhat, hogy a böngészési előzmények más formái még megtalálhatók Google-fiókjában a <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> webhelyen.</translation>
 <translation id="3602290021589620013">Előnézet</translation>
 <translation id="3616113530831147358">Audio</translation>
@@ -385,6 +386,7 @@
 <translation id="3927692899758076493">Sans Serif</translation>
 <translation id="3928666092801078803">Adataim egyesítése</translation>
 <translation id="393697183122708255">Nincs engedélyezett hangalapú keresés</translation>
+<translation id="3943557322767080599">Chrome bejelentkezési értesítések, amikor bejelentkezik Google-fiókjába</translation>
 <translation id="395206256282351086">Keresési és webhelyjavaslatok letiltva</translation>
 <translation id="396192773038029076">{NUM_IN_PROGRESS,plural, =1{A Chrome betölti az oldalt, amint lehetséges}other{A Chrome betölti az oldalakat, amint lehetséges}}</translation>
 <translation id="3963007978381181125">Az összetett jelszavas titkosítás nem tartalmazza a Google Payben megadott fizetési módokat és címeket. Titkosított adatait csak az olvashatja el, aki rendelkezik az Ön összetett jelszavával. Az összetett jelszót a Google nem kapja meg, és nem is tárolja. Ha elfelejtette összetett jelszavát, vagy módosítaná ezt a beállítást, alaphelyzetbe kell állítania a szinkronizálást. <ph name="BEGIN_LINK" />További információ<ph name="END_LINK" />.</translation>
@@ -660,6 +662,7 @@
 <translation id="5937580074298050696"><ph name="AMOUNT" /> megtakarított adatmennyiség</translation>
 <translation id="5939518447894949180">Visszaállítás</translation>
 <translation id="5942872142862698679">A Google használata a kereséshez</translation>
+<translation id="5951119116059277034">Élő oldal megtekintése</translation>
 <translation id="5951615825629292797">A nyelv készen áll, indítsa újra a(z) <ph name="APP_NAME" /> alkalmazást</translation>
 <translation id="5952764234151283551">Az elérni kívánt oldal URL-címének elküldése a Google-nak</translation>
 <translation id="5956665950594638604">A Chrome súgójának megnyitása új lapon</translation>
@@ -669,6 +672,7 @@
 <translation id="5964805880140440652">Úgy oszthatja meg az oldalt más eszközzel, hogy bekapcsolja rajta a szinkronizálást a Chrome beállításai között</translation>
 <translation id="5964869237734432770">Képleírások leállítása</translation>
 <translation id="5979084224081478209">Jelszavak ellenőrzése</translation>
+<translation id="5982307838673692400">Inkognitólap megnyitása</translation>
 <translation id="6000066717592683814">A Google megtartása</translation>
 <translation id="6005538289190791541">Javasolt jelszó</translation>
 <translation id="6014293228235665243">Olvasatlan</translation>
@@ -698,6 +702,7 @@
 <translation id="6192907950379606605">Képleírások lekérése</translation>
 <translation id="6206830853671714236">Letöltés időpontjának kiválasztása</translation>
 <translation id="6210748933810148297">Nem <ph name="EMAIL" />?</translation>
+<translation id="6211386937064921208">Az oldal előnézete</translation>
 <translation id="6218096829563201111">Hasonló termékek keresése <ph name="BEGIN_NEW" />Új<ph name="END_NEW" /></translation>
 <translation id="6221633008163990886">A zárolás feloldásával exportálhatja a jelszavait</translation>
 <translation id="6232535412751077445">A „Nincs nyomon követés” engedélyezése azt jelenti, hogy a böngészési forgalommal együtt kérelmet is küld a rendszer. Ennek hatása attól függ, hogy a webhely reagál-e a kérelemre, és hogyan értelmezi azt.
@@ -809,6 +814,9 @@
 <translation id="6900532703269623216">Speciális védelem</translation>
 <translation id="6903907808598579934">Szinkronizálás bekapcsolása</translation>
 <translation id="6929699136511445623">Az Android rendszer szinkronizálásának engedélyezése</translation>
+<translation id="6941901516114974832">Előfordulhat, hogy inkognitó módban tevékenységei <ph name="BEGIN_BOLD1" />láthatók maradnak<ph name="END_BOLD1" /> a felkeresett webhelyek, az Ön munkáltatója vagy iskolája, illetve internetszolgáltatója számára.
+
+Az inkognitó-munkamenet adatai csak <ph name="BEGIN_BOLD2" />az összes inkognitólap bezárásával<ph name="END_BOLD2" /> törlődnek a Chrome-ból.</translation>
 <translation id="6942665639005891494">Az alapértelmezett letöltési helyet bármikor módosíthatja a Beállítások menüben</translation>
 <translation id="6945221475159498467">Kiválasztás</translation>
 <translation id="6955535239952325894">Ez a beállítás a felügyelt böngészőkben le van tiltva.</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_it.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_it.xtb
index 90668f0..0e918986 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_it.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_it.xtb
@@ -344,6 +344,7 @@
 <translation id="3568688522516854065">Accedi e attiva la sincronizzazione per trovare le tue schede degli altri dispositivi</translation>
 <translation id="3587482841069643663">Tutti</translation>
 <translation id="3587596251841506391">Aumenta la sicurezza sul Web</translation>
+<translation id="3598653140581545904">Usa la Modalità di navigazione in incognito per accedere</translation>
 <translation id="3599863153486145794">Consente di cancellare la cronologia da tutti i dispositivi su cui hai eseguito l'accesso. Il tuo Account Google potrebbe avere altri tipi di cronologia di navigazione all'indirizzo <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
 <translation id="3602290021589620013">Anteprima</translation>
 <translation id="3616113530831147358">Audio</translation>
@@ -385,6 +386,7 @@
 <translation id="3927692899758076493">Sans Serif</translation>
 <translation id="3928666092801078803">Unisci i miei dati</translation>
 <translation id="393697183122708255">Nessuna ricerca vocale attiva disponib.</translation>
+<translation id="3943557322767080599">Mostra suggerimenti per l'accesso a Chrome quando accedi al tuo Account Google</translation>
 <translation id="395206256282351086">Suggerimenti di ricerche e siti disattivati</translation>
 <translation id="396192773038029076">{NUM_IN_PROGRESS,plural, =1{Chrome caricherà la tua pagina quando sarà pronta}other{Chrome caricherà le tue pagine quando saranno pronte}}</translation>
 <translation id="3963007978381181125">La crittografia della passphrase non include metodi di pagamento e indirizzi di Google Pay. Soltanto chi conosce la tua passphrase può leggere i tuoi dati criptati. La passphrase non viene inviata a Google né memorizzata. Se dimentichi la passphrase o vuoi modificare questa impostazione, dovrai reimpostare la sincronizzazione. <ph name="BEGIN_LINK" />Ulteriori informazioni<ph name="END_LINK" /></translation>
@@ -660,6 +662,7 @@
 <translation id="5937580074298050696">Dati risparmiati: <ph name="AMOUNT" /></translation>
 <translation id="5939518447894949180">Reimposta</translation>
 <translation id="5942872142862698679">Google in uso per la ricerca</translation>
+<translation id="5951119116059277034">Visualizzazione di pagina attiva</translation>
 <translation id="5951615825629292797">Lingua pronta, riavvia <ph name="APP_NAME" /></translation>
 <translation id="5952764234151283551">Invia a Google l'URL della pagina a cui stai tentando di accedere</translation>
 <translation id="5956665950594638604">Apri Centro assistenza di Chrome in nuova scheda</translation>
@@ -669,6 +672,7 @@
 <translation id="5964805880140440652">Per condividere questa pagina con un altro dispositivo, attiva la sincronizzazione nelle impostazioni di Chrome</translation>
 <translation id="5964869237734432770">Interrompi descr. immagini</translation>
 <translation id="5979084224081478209">Controlla password</translation>
+<translation id="5982307838673692400">Apri una scheda di navigazione in incognito</translation>
 <translation id="6000066717592683814">Mantieni Google</translation>
 <translation id="6005538289190791541">Password consigliata</translation>
 <translation id="6014293228235665243">Da leggere</translation>
@@ -698,6 +702,7 @@
 <translation id="6192907950379606605">Recupera descriz. immagini</translation>
 <translation id="6206830853671714236">Scegli quando effettuare il download</translation>
 <translation id="6210748933810148297">Non sei <ph name="EMAIL" />?</translation>
+<translation id="6211386937064921208">Anteprima della pagina</translation>
 <translation id="6218096829563201111">Cerca prodotti simili <ph name="BEGIN_NEW" />Novità<ph name="END_NEW" /></translation>
 <translation id="6221633008163990886">Sblocca per esportare le tue password</translation>
 <translation id="6232535412751077445">Se attivi l'opzione "Non tenere traccia", verrà inclusa una richiesta nel tuo traffico di navigazione. Gli effetti dipendono dall'eventuale risposta dei siti web alla richiesta e dall'interpretazione di quest'ultima.
@@ -809,6 +814,9 @@
 <translation id="6900532703269623216">Protezione avanzata</translation>
 <translation id="6903907808598579934">Attiva la sincronizzazione</translation>
 <translation id="6929699136511445623">Attiva sincronizzazione del sistema Android</translation>
+<translation id="6941901516114974832">In incognito, la tua attività <ph name="BEGIN_BOLD1" />potrebbe essere comunque visibile <ph name="END_BOLD1" />ai siti web visitati, al tuo datore di lavoro o alla scuola e al tuo provider di servizi Internet.
+
+I dati della sessione di navigazione in incognito vengono cancellati da Chrome soltanto quando <ph name="BEGIN_BOLD2" />chiudi tutte le schede di navigazione in incognito<ph name="END_BOLD2" />.</translation>
 <translation id="6942665639005891494">Modifica in qualsiasi momento il percorso di download predefinito utilizzando l'opzione del menu Impostazioni</translation>
 <translation id="6945221475159498467">Seleziona</translation>
 <translation id="6955535239952325894">Questa impostazione è disattivata sui browser gestiti</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ml.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ml.xtb
index 784999c..c862f21 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ml.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ml.xtb
@@ -344,6 +344,7 @@
 <translation id="3568688522516854065">നിങ്ങളുടെ മറ്റ് ഉപകരണങ്ങളിൽ നിന്നുള്ള ടാബുകൾ ലഭിക്കാൻ, സൈൻ ഇൻ ചെയ്‌ത് സമന്വയിപ്പിക്കൽ ഓണാക്കുക</translation>
 <translation id="3587482841069643663">എല്ലാം</translation>
 <translation id="3587596251841506391">വെബിലെ സുരക്ഷ മെച്ചപ്പെടുത്താൻ സഹായിക്കുക</translation>
+<translation id="3598653140581545904">സൈൻ ഇൻ ചെയ്യാൻ അദൃശ്യ ടാബ് ഉപയോഗിക്കുക</translation>
 <translation id="3599863153486145794">സൈൻ ഇൻ ചെയ്‌ത എല്ലാ ഉപകരണങ്ങളിൽ നിന്നും ചരിത്രം മായ്ക്കുന്നു. നിങ്ങളുടെ Google അക്കൗണ്ടിന് <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> എന്നതിൽ മറ്റ് തരത്തിലുള്ള ബ്രൗസിംഗ് ചരിത്രങ്ങളുണ്ടായിരിക്കാം.</translation>
 <translation id="3602290021589620013">പ്രിവ്യൂ</translation>
 <translation id="3616113530831147358">ഓഡിയോ</translation>
@@ -385,6 +386,7 @@
 <translation id="3927692899758076493">Sans Serif</translation>
 <translation id="3928666092801078803">എന്റെ വിവരങ്ങൾ സംയോജിപ്പിക്കുക</translation>
 <translation id="393697183122708255">പ്രവർത്തനക്ഷമമാക്കിയ വോയ്‌സ് തിരയലുകൾ ഒന്നും ലഭ്യമല്ല</translation>
+<translation id="3943557322767080599">നിങ്ങളുടെ Google അക്കൗണ്ടിൽ സൈൻ ഇൻ ചെയ്യുമ്പോൾ Chrome സൈൻ ഇൻ നിർദ്ദേശങ്ങൾ കാണിക്കുക</translation>
 <translation id="395206256282351086">തിരയലും സൈറ്റ് നിർദ്ദേശങ്ങളും പ്രവർത്തനരഹിതമാക്കി</translation>
 <translation id="396192773038029076">{NUM_IN_PROGRESS,plural, =1{നിങ്ങളുടെ പേജ് തയ്യാറാകുമ്പോൾ Chrome ലോഡ് ചെയ്യും}other{നിങ്ങളുടെ പേജുകൾ തയ്യാറാകുമ്പോൾ Chrome ലോഡ് ചെയ്യും}}</translation>
 <translation id="3963007978381181125">പാസ്‌ഫ്രെയ്‌സ് എൻക്രിപ്ഷനിൽ, Google Pay-ൽ നിന്നുള്ള പേയ്മെന്‍റ് രീതികളും വിലാസങ്ങളും ഉൾപ്പെടുന്നില്ല. നിങ്ങളുടെ പാസ്‌ഫ്രെയ്‌സുള്ള വ്യക്തിക്ക് മാത്രമേ എൻക്രി‌പ്‌റ്റ് ചെയ്‌ത ഡാറ്റ വായിക്കാനാവൂ. പാസ്‌ഫ്രെയ്‌സ് Google-ലേക്ക് അയയ്‌ക്കുകയോ സംഭരിക്കുകയോ ചെയ്യുന്നില്ല. പാസ്‌ഫ്രെയ്‌സ് മറന്നുപോവുകയോ ഈ ക്രമീകരണം മാറ്റുകയോ ചെയ്യണമെങ്കിൽ, സമന്വയം പുനഃക്രമീകരിക്കേണ്ടി വരും. <ph name="BEGIN_LINK" />കൂടുതലറിയുക<ph name="END_LINK" /></translation>
@@ -660,6 +662,7 @@
 <translation id="5937580074298050696"><ph name="AMOUNT" /> സംരക്ഷിച്ചു</translation>
 <translation id="5939518447894949180">റീസെറ്റ് ചെയ്യുക</translation>
 <translation id="5942872142862698679">തിരയാൻ Google ഉപയോഗിക്കുന്നു</translation>
+<translation id="5951119116059277034">ലൈവ് പേജ് കാണിക്കുന്നു</translation>
 <translation id="5951615825629292797">ഭാഷ തയ്യാറാണ്, <ph name="APP_NAME" /> റീസ്റ്റാർട്ട് ചെയ്യുക</translation>
 <translation id="5952764234151283551">നിങ്ങൾ എത്തിച്ചേരാൻ ശ്രമിക്കുന്ന പേജിന്റെ URL Google-ലേക്ക് അയയ്ക്കുന്നു</translation>
 <translation id="5956665950594638604">പുതിയ ടാബിൽ Chrome സഹായകേന്ദ്രം തുറക്കുക</translation>
@@ -669,6 +672,7 @@
 <translation id="5964805880140440652">മറ്റൊരു ഉപകരണത്തിലേക്ക് ഈ പേജ് പങ്കിടാൻ, Chrome ക്രമീകരണത്തിൽ സമന്വയിപ്പിക്കൽ ഓണാക്കുക</translation>
 <translation id="5964869237734432770">ചിത്ര വിവരണങ്ങൾ നിർത്തുക</translation>
 <translation id="5979084224081478209">പാസ്‌വേഡുകൾ പരിശോധിക്കുക</translation>
+<translation id="5982307838673692400">അദൃശ്യ ടാബ് തുറക്കുക</translation>
 <translation id="6000066717592683814">Google ഉപയോഗിക്കുക</translation>
 <translation id="6005538289190791541">നിർദ്ദേശിച്ച പാസ്‌വേഡ്</translation>
 <translation id="6014293228235665243">വായിക്കാത്തവ</translation>
@@ -698,6 +702,7 @@
 <translation id="6192907950379606605">ചിത്ര വിവരണങ്ങൾ നേടുക</translation>
 <translation id="6206830853671714236">എപ്പോൾ ഡൗൺലോഡ് ചെയ്യണമെന്ന് തിരഞ്ഞെടുക്കുക</translation>
 <translation id="6210748933810148297"><ph name="EMAIL" /> അല്ലേ?</translation>
+<translation id="6211386937064921208">ഈ പേജ് പ്രിവ്യു ചെയ്യുന്നു</translation>
 <translation id="6218096829563201111">സമാന ഉൽപ്പന്നം തിരയൂ <ph name="BEGIN_NEW" />പുതിയത്<ph name="END_NEW" /></translation>
 <translation id="6221633008163990886">നിങ്ങളുടെ പാസ്‌വേഡുകൾ എക്‌സ്‌പോർട്ട് ചെയ്യാൻ അൺലോക്ക് ചെയ്യുക</translation>
 <translation id="6232535412751077445">നിങ്ങളുടെ ബ്രൗസിംഗ് ട്രാഫിക്കിൽ ഒരു അഭ്യർത്ഥന ഉൾപ്പെടുത്തുമെന്നാണ് 'ട്രാക്ക് ചെയ്യരുത്' ഫീച്ചർ പ്രവർത്തനക്ഷമമാക്കുക എന്നത് അർത്ഥമാക്കുന്നത്. അതിനെ തുടർന്നുള്ള ഏതൊരു കാര്യവും, ഒരു വെബ്‌സൈറ്റ് അഭ്യർത്ഥനയിന്മേൽ പ്രതികരിക്കുന്നുണ്ടോ എന്നതിനെയും അഭ്യർത്ഥന വ്യാഖ്യാനിക്കുന്നതെങ്ങനെ എന്നതിനെയും ആശ്രയിച്ചിരിക്കും.
@@ -809,6 +814,9 @@
 <translation id="6900532703269623216">മെച്ചപ്പെടുത്തിയ പരിരക്ഷ</translation>
 <translation id="6903907808598579934">സമന്വയിപ്പിക്കൽ ഓണാക്കുക</translation>
 <translation id="6929699136511445623">Android സിസ്‌റ്റം സമന്വയിപ്പിക്കൽ പ്രവർത്തനക്ഷമമാക്കുക</translation>
+<translation id="6941901516114974832">അദൃശ്യ ടാബിൽ, നിങ്ങൾ സന്ദർശിക്കുന്ന വെബ്‌സൈറ്റുകൾ, തൊഴിൽ ദാതാവ് അല്ലെങ്കിൽ സ്‌കൂൾ, ഇന്റർനെറ്റ് സേവനദാതാവ് എന്നിവർക്ക് നിങ്ങളുടെ ആക്‌റ്റിവിറ്റി <ph name="BEGIN_BOLD1" />തുടർന്നും ദൃശ്യമായേക്കാം <ph name="END_BOLD1" />.
+
+<ph name="BEGIN_BOLD2" />എല്ലാ അദൃശ്യ ടാബുകളും അടയ്‌ക്കുമ്പോൾ<ph name="END_BOLD2" /> മാത്രമേ അദൃശ്യ സെഷനിൽ നിന്നുള്ള നിങ്ങളുടെ ഡാറ്റ Chrome-ൽ നിന്ന് മായ്‌ക്കൂ.</translation>
 <translation id="6942665639005891494">ക്രമീകരണ മെനു ഓപ്‌ഷൻ ഉപയോഗിച്ച്, ഏതുസമയത്തും ഡിഫോൾട്ട് ഡൗൺലോഡ് ലൊക്കേഷൻ മാറ്റുക.</translation>
 <translation id="6945221475159498467">തിരഞ്ഞെടുക്കുക</translation>
 <translation id="6955535239952325894">മാനേജ് ചെയ്യപ്പെടുന്ന ബ്രൗസറുകളിൽ ഈ ക്രമീകരണം പ്രവർത്തനരഹിതമാക്കിയിരിക്കുന്നു</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_mr.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_mr.xtb
index 31ff067a..abcddfb5 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_mr.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_mr.xtb
@@ -667,6 +667,7 @@
 <translation id="5958275228015807058">तुमच्या फाइल आणि पेज डाउनलोडमध्ये शोधा</translation>
 <translation id="5962718611393537961">संकुचित करण्‍यासाठी टॅप करा</translation>
 <translation id="5964805880140440652">हे पेज दुसर्‍या डिव्हाइसवर शेअर करण्यासाठी, Chrome सेटिंग्जमध्ये सिंक सुरू करा</translation>
+<translation id="5964869237734432770">इमेजची वर्णने थांबवा</translation>
 <translation id="5979084224081478209">पासवर्ड तपासा</translation>
 <translation id="6000066717592683814">Google ठेवा</translation>
 <translation id="6005538289190791541">सुचवलेला पासवर्ड</translation>
@@ -694,6 +695,7 @@
 <translation id="6157392216611456285"><ph name="APP_NAME" /> निवडा</translation>
 <translation id="6159335304067198720"><ph name="PERCENT" /> डेटा बचत</translation>
 <translation id="6186394685773237175">धोक्यात असलेले पासवर्ड सापडले नाहीत</translation>
+<translation id="6192907950379606605">इमेजची वर्णने मिळवा</translation>
 <translation id="6206830853671714236">कधी डाउनलोड करायचे ते निवडा</translation>
 <translation id="6210748933810148297"><ph name="EMAIL" /> नाही?</translation>
 <translation id="6218096829563201111">सारखी उत्पादने शोधा <ph name="BEGIN_NEW" />नवीन<ph name="END_NEW" /></translation>
@@ -762,6 +764,7 @@
 <translation id="6590471736817333463">कमाल ६०% डेटाची बचत करा</translation>
 <translation id="6590680911007613645">तुम्ही सेव्ह करत असलेला पासवर्ड तुमच्या <ph name="SITE" /> च्या पासवर्डशी जुळत असल्याची खात्री करा</translation>
 <translation id="6593061639179217415">डेस्कटॉप साइट</translation>
+<translation id="6595046016124923392">तुम्हाला दिसत असलेली वर्णने सुधारण्यासाठी इमेज Google कडे पाठवली जातात.</translation>
 <translation id="6597891566292541626">या फ्रेममध्ये QR/बार कोडची स्थिती निश्चित करा.</translation>
 <translation id="6600954340915313787">Chrome वर कॉपी केले</translation>
 <translation id="661266467055912436">तुमच्यासाठी आणि वेबवरील प्रत्येकजणासाठी सुरक्षिततेत सुधारणा करते.</translation>
@@ -820,6 +823,7 @@
 <translation id="702463548815491781">TalkBack किंवा स्विच ॲक्सेस सुरू असताना शिफारस केलेले</translation>
 <translation id="7029809446516969842">पासवर्ड</translation>
 <translation id="703523980599857277">होम पेज बदला</translation>
+<translation id="7054588988317389591">इमेजची वर्णने मिळवायची का?</translation>
 <translation id="7055152154916055070">रीडिरेक्ट ब्लॉक केले:</translation>
 <translation id="7063006564040364415">संकालित सर्व्हरशी कनेक्ट करू शकलो नाही.</translation>
 <translation id="7071521146534760487">खाते व्यवस्थापित करा</translation>
@@ -851,6 +855,7 @@
 <translation id="729975465115245577">पासवर्ड फाइल स्टोअर करण्यासाठी तुमच्या डिव्हाइसमध्ये अ‍ॅप नाही.</translation>
 <translation id="7302081693174882195">तपशील: सेव्ह केलेल्या डेटाच्या प्रमाणानुसार क्रमाने लावलेले</translation>
 <translation id="7304873321153398381">ऑफलाइन. Chrome तुमचे पासवर्ड तपासू शकत नाही.</translation>
+<translation id="7313188324932846546">सिंक सेट करण्यासाठी टॅप करा</translation>
 <translation id="7328017930301109123">लाइट मोडमध्ये, Chrome पेज आणखी जलद लोड करते आणि ६० टक्के पर्यंत कमी डेटा वापरते.</translation>
 <translation id="7333031090786104871">अद्याप मागील साइट जोडत आहे</translation>
 <translation id="7340958967809483333">Discover चे पर्याय</translation>
@@ -1042,6 +1047,7 @@
 <translation id="8636825310635137004">आपल्या इतर डिव्हाइसेस मधून तुमचे टॅब प्राप्त करण्यासाठी, संकालन सुरू करा</translation>
 <translation id="8641930654639604085">प्रौढ सामग्री असलेल्या साइटना अवरोधित करण्‍याचा प्रयत्न करा</translation>
 <translation id="8655129584991699539">तुम्ही Chrome सेटिंग्जमध्ये डेटा साफ करू शकता</translation>
+<translation id="8656747343598256512">तुमच्या Google खाते सह या साइट आणि Chrome वर साइन इन करा. तुम्ही सिंक करणे नंतर सुरू करू शकता.</translation>
 <translation id="8659579665266920523">Chrome सह कसे शोधावे</translation>
 <translation id="8662811608048051533">तुम्हाला बहुतांश साइटवरून साइन आउट करते.</translation>
 <translation id="8664979001105139458">फाइलचे नाव आधीपासून अस्तित्वात आहे</translation>
@@ -1061,6 +1067,7 @@
 <translation id="8840953339110955557">हे पेज ऑनलाइन आवृत्तीपेक्षा वेगळे असू शकते.</translation>
 <translation id="8853345339104747198"><ph name="TAB_TITLE" />, टॅब</translation>
 <translation id="8854223127042600341">तुमच्या ऑफलाइन फाइल पहा</translation>
+<translation id="8856607253650333758">वर्णने मिळवा</translation>
 <translation id="8873817150012960745">सुरू करण्यासाठी येथे टॅप करा</translation>
 <translation id="889338405075704026">Chrome सेटिंग्जवर जा</translation>
 <translation id="8898822736010347272">नवीन धोके शोधण्यात आणि वेबवरील प्रत्येकाचे संरक्षण करण्यात मदत करण्यासाठी, तुम्ही भेट देत असलेल्या काही पेजच्या URL, मर्यादित सिस्टम माहिती आणि काही पेज आशय Google ला पाठवते.</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_nl.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_nl.xtb
index b2b56a3..4774ff85d 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_nl.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_nl.xtb
@@ -670,6 +670,7 @@
 <translation id="5958275228015807058">Vind je bestanden en pagina's in Downloads</translation>
 <translation id="5962718611393537961">Tik om samen te vouwen</translation>
 <translation id="5964805880140440652">Als je deze pagina wilt delen met een ander apparaat, schakel je synchronisatie in via de Chrome-instellingen</translation>
+<translation id="5964869237734432770">Afbeeldingsbeschrijvingen stoppen</translation>
 <translation id="5979084224081478209">Wachtwoorden controleren</translation>
 <translation id="5982307838673692400">Incognitotabblad openen</translation>
 <translation id="6000066717592683814">Google blijven gebruiken</translation>
@@ -698,6 +699,7 @@
 <translation id="6157392216611456285"><ph name="APP_NAME" /> kiezen</translation>
 <translation id="6159335304067198720"><ph name="PERCENT" /> data bespaard</translation>
 <translation id="6186394685773237175">Geen gehackte wachtwoorden gevonden</translation>
+<translation id="6192907950379606605">Afbeeldingsbeschrijvingen ophalen</translation>
 <translation id="6206830853671714236">Kies wanneer je wilt downloaden</translation>
 <translation id="6210748933810148297">Niet <ph name="EMAIL" />?</translation>
 <translation id="6211386937064921208">Voorbeeld van deze pagina bekijken</translation>
@@ -767,6 +769,7 @@
 <translation id="6590471736817333463">Bespaar tot 60% data</translation>
 <translation id="6590680911007613645">Zorg ervoor dat het wachtwoord dat je opslaat, overeenkomt met je wachtwoord voor <ph name="SITE" /></translation>
 <translation id="6593061639179217415">Desktopsite</translation>
+<translation id="6595046016124923392">Afbeeldingen worden naar Google gestuurd om de beschrijvingen voor je te verbeteren.</translation>
 <translation id="6597891566292541626">Zorg dat de QR-/streepjescode binnen dit kader valt.</translation>
 <translation id="6600954340915313787">Gekopieerd naar Chrome</translation>
 <translation id="661266467055912436">Verbetert de beveiliging voor jou en alle andere internetgebruikers.</translation>
@@ -828,6 +831,7 @@
 <translation id="702463548815491781">Aanbevolen wanneer TalkBack of 'Toegang via schakelaar' is ingeschakeld</translation>
 <translation id="7029809446516969842">Wachtwoorden</translation>
 <translation id="703523980599857277">Homepage wijzigen</translation>
+<translation id="7054588988317389591">Afbeeldingsbeschrijvingen ophalen?</translation>
 <translation id="7055152154916055070">Omleiding geblokkeerd:</translation>
 <translation id="7063006564040364415">Kan geen verbinding maken met synchronisatieserver.</translation>
 <translation id="7071521146534760487">Account beheren</translation>
@@ -859,6 +863,7 @@
 <translation id="729975465115245577">Je apparaat bevat geen app om het wachtwoordbestand in op te slaan.</translation>
 <translation id="7302081693174882195">Details: gesorteerd op de hoeveelheid bespaarde data</translation>
 <translation id="7304873321153398381">Offline. Chrome kan je wachtwoorden niet checken.</translation>
+<translation id="7313188324932846546">Tik om synchronisatie in te stellen</translation>
 <translation id="7328017930301109123">In de Lite-versie van Chrome worden pagina's sneller geladen en wordt tot wel 60 procent minder data verbruikt.</translation>
 <translation id="7333031090786104871">Nog steeds bezig met toevoegen van vorige site</translation>
 <translation id="7340958967809483333">Opties voor Discover</translation>
@@ -1050,6 +1055,7 @@
 <translation id="8636825310635137004">Schakel synchronisatie in om de tabbladen op je andere apparaten te bekijken</translation>
 <translation id="8641930654639604085">Sites met content voor volwassenen proberen te blokkeren</translation>
 <translation id="8655129584991699539">Je kunt de gegevens wissen in de Chrome-instellingen</translation>
+<translation id="8656747343598256512">Log in bij deze site en Chrome met je Google-account. Je kunt synchronisatie later inschakelen.</translation>
 <translation id="8659579665266920523">Zoeken met Chrome</translation>
 <translation id="8662811608048051533">Hiermee word je uitgelogd van de meeste sites.</translation>
 <translation id="8664979001105139458">Bestandsnaam bestaat al</translation>
@@ -1069,6 +1075,7 @@
 <translation id="8840953339110955557">Deze pagina kan afwijken van de online versie.</translation>
 <translation id="8853345339104747198"><ph name="TAB_TITLE" />, tabblad</translation>
 <translation id="8854223127042600341">Je offline bestanden bekijken</translation>
+<translation id="8856607253650333758">Beschrijvingen ophalen</translation>
 <translation id="8873817150012960745">Tik hier om te beginnen</translation>
 <translation id="889338405075704026">Naar Chrome-instellingen</translation>
 <translation id="8898822736010347272">Stuurt URL's van sommige pagina's die je bezoekt, beperkte systeeminformatie en bepaalde paginacontent naar Google om nieuwe dreigingen te ontdekken en iedereen op internet te beschermen.</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_no.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_no.xtb
index 43042853..7f8d884 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_no.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_no.xtb
@@ -344,6 +344,7 @@
 <translation id="3568688522516854065">For å få fanene dine fra de andre enhetene du bruker, logg på og slå på synkronisering.</translation>
 <translation id="3587482841069643663">Alle</translation>
 <translation id="3587596251841506391">Bidra til å gjøre nettet sikrere</translation>
+<translation id="3598653140581545904">Bruk Inkognito for å logge på</translation>
 <translation id="3599863153486145794">Tømmer loggen på alle påloggede enheter. Det kan hende Google-kontoen din har andre typer nettleserlogger på <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
 <translation id="3602290021589620013">Forhåndsvisning</translation>
 <translation id="3616113530831147358">Lyd</translation>
@@ -385,6 +386,7 @@
 <translation id="3927692899758076493">Sans Serif</translation>
 <translation id="3928666092801078803">Kombiner dataene mine</translation>
 <translation id="393697183122708255">Ingen aktiverte talesøk er tilgjengelige</translation>
+<translation id="3943557322767080599">Vis påloggingsbilde for Chrome når du logger på Google-kontoen din</translation>
 <translation id="395206256282351086">Nettsteds- og søkeforslag er slått av</translation>
 <translation id="396192773038029076">{NUM_IN_PROGRESS,plural, =1{Chrome laster inn siden når den er klar}other{Chrome laster inn sidene når de er klare}}</translation>
 <translation id="3963007978381181125">Kryptering av passordfraser inkluderer ikke betalingsmåter og adresser fra Google Pay. Bare personer som har passordfrasen din, kan lese de krypterte dataene dine. Passordfrasen blir verken sendt til Google eller lagret. Hvis du glemmer den, må du tilbakestille synkroniseringen. <ph name="BEGIN_LINK" />Finn ut mer<ph name="END_LINK" /></translation>
@@ -660,6 +662,7 @@
 <translation id="5937580074298050696"><ph name="AMOUNT" /> spart</translation>
 <translation id="5939518447894949180">Tilbakestill</translation>
 <translation id="5942872142862698679">Bruker Google til å søke</translation>
+<translation id="5951119116059277034">Viser nyeste versjon av siden</translation>
 <translation id="5951615825629292797">Språket er klart. Start <ph name="APP_NAME" /> på nytt</translation>
 <translation id="5952764234151283551">Sender Google nettadressen til siden du prøver å åpne</translation>
 <translation id="5956665950594638604">Åpne brukerstøtten for Chrome i en ny fane</translation>
@@ -669,6 +672,7 @@
 <translation id="5964805880140440652">For å dele denne siden med andre enheter, slå på synkronisering i Chrome-innstillingene</translation>
 <translation id="5964869237734432770">Stopp bildebeskrivelser</translation>
 <translation id="5979084224081478209">Kontrollér passordene</translation>
+<translation id="5982307838673692400">Åpne inkognitofane</translation>
 <translation id="6000066717592683814">Behold Google</translation>
 <translation id="6005538289190791541">Foreslått passord</translation>
 <translation id="6014293228235665243">Ulest</translation>
@@ -698,6 +702,7 @@
 <translation id="6192907950379606605">Få bildebeskrivelser</translation>
 <translation id="6206830853671714236">Velg når du vil laste ned</translation>
 <translation id="6210748933810148297">Ikke <ph name="EMAIL" />?</translation>
+<translation id="6211386937064921208">Forhåndsviser denne siden</translation>
 <translation id="6218096829563201111">Søk lignende produkter <ph name="BEGIN_NEW" />Ny<ph name="END_NEW" /></translation>
 <translation id="6221633008163990886">Lås opp for å eksportere passordene dine</translation>
 <translation id="6232535412751077445">Hvis du slår på «Deaktivering av sporing», blir det sendt en forespørsel sammen med nettrafikken din. Hvilke virkninger dette eventuelt får, avhenger av om det aktuelle nettstedet svarer på forespørselen eller ikke, samt hvordan forespørselen tolkes.
@@ -809,6 +814,9 @@
 <translation id="6900532703269623216">Økt beskyttelse</translation>
 <translation id="6903907808598579934">Slå på synkronisering</translation>
 <translation id="6929699136511445623">Slå på Android-systemsynkronisering</translation>
+<translation id="6941901516114974832">I Inkognito kan aktiviteten din <ph name="BEGIN_BOLD1" />fremdeles være synlig<ph name="END_BOLD1" /> for nettstedene du besøker, internettleverandøren din og arbeidsgiveren eller skolen din.
+
+Dataene fra inkognitoøkten fjernes ikke fra Chrome før du <ph name="BEGIN_BOLD2" />lukker alle inkognitofaner<ph name="END_BOLD2" />.</translation>
 <translation id="6942665639005891494">Endre standard nedlastingssted når som helst via menyalternativet Innstillinger</translation>
 <translation id="6945221475159498467">Velg</translation>
 <translation id="6955535239952325894">Denne innstillingen er slått av for administrerte nettlesere</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pl.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pl.xtb
index f3d5f69..d363f21a 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pl.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pl.xtb
@@ -344,6 +344,7 @@
 <translation id="3568688522516854065">Aby korzystać z kart ze swoich innych urządzeń, zaloguj się i włącz synchronizację</translation>
 <translation id="3587482841069643663">Wszystkie</translation>
 <translation id="3587596251841506391">Pomóż poprawić bezpieczeństwo w sieci</translation>
+<translation id="3598653140581545904">Zaloguj się w trybie incognito</translation>
 <translation id="3599863153486145794">Usuwa historię ze wszystkich urządzeń, na których jesteś zalogowany. Inne rodzaje historii przeglądania mogą być nadal dostępne na Twoim koncie Google na <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
 <translation id="3602290021589620013">Podgląd</translation>
 <translation id="3616113530831147358">Dźwięk</translation>
@@ -385,6 +386,7 @@
 <translation id="3927692899758076493">Bezszeryfowa</translation>
 <translation id="3928666092801078803">Połącz moje dane</translation>
 <translation id="393697183122708255">Brak włączonego wyszukiwania głosowego</translation>
+<translation id="3943557322767080599">Podczas logowania się na konto Google będą występować prośby o zalogowanie się w Chrome</translation>
 <translation id="395206256282351086">Podpowiadanie stron internetowych i wyszukiwanych słów jest wyłączone</translation>
 <translation id="396192773038029076">{NUM_IN_PROGRESS,plural, =1{Chrome wczyta stronę, gdy będzie gotowa}few{Chrome wczyta strony, gdy będą gotowe}many{Chrome wczyta strony, gdy będą gotowe}other{Chrome wczyta strony, gdy będą gotowe}}</translation>
 <translation id="3963007978381181125">Szyfrowanie hasłem nie obejmuje form płatności ani adresów w Google Pay. Twoje zaszyfrowane dane może odczytać tylko ktoś znający hasło. Google nie otrzyma Twojego hasła ani nie będzie go przechowywać. Jeśli je zapomnisz lub zechcesz zmienić to ustawienie, konieczne będzie zresetowanie synchronizacji. <ph name="BEGIN_LINK" />Więcej informacji<ph name="END_LINK" /></translation>
@@ -660,6 +662,7 @@
 <translation id="5937580074298050696">Zaoszczędzono <ph name="AMOUNT" /></translation>
 <translation id="5939518447894949180">Resetuj</translation>
 <translation id="5942872142862698679">Korzystam z wyszukiwarki Google</translation>
+<translation id="5951119116059277034">Wyświetlam faktyczną stronę</translation>
 <translation id="5951615825629292797">Język jest gotowy. Uruchom ponownie aplikację <ph name="APP_NAME" />.</translation>
 <translation id="5952764234151283551">Adres URL strony, którą próbujesz otworzyć, zostanie wysłany do Google</translation>
 <translation id="5956665950594638604">Otwórz Centrum pomocy Chrome w nowej karcie</translation>
@@ -669,6 +672,7 @@
 <translation id="5964805880140440652">Aby udostępnić tę stronę na innym urządzeniu, włącz synchronizację w ustawieniach Chrome</translation>
 <translation id="5964869237734432770">Wstrzymaj opisy obrazów</translation>
 <translation id="5979084224081478209">Sprawdź hasła</translation>
+<translation id="5982307838673692400">Otwórz kartę w trybie incognito</translation>
 <translation id="6000066717592683814">Zachowaj Google</translation>
 <translation id="6005538289190791541">Proponowane hasło</translation>
 <translation id="6014293228235665243">Nieprzeczytane</translation>
@@ -698,6 +702,7 @@
 <translation id="6192907950379606605">Pobieraj opisy obrazów</translation>
 <translation id="6206830853671714236">Wybierz, kiedy pobrać</translation>
 <translation id="6210748933810148297"><ph name="EMAIL" /> to nie Ty?</translation>
+<translation id="6211386937064921208">Wyświetlam podgląd tej strony</translation>
 <translation id="6218096829563201111">Znajdź podobne produkty <ph name="BEGIN_NEW" />Nowość<ph name="END_NEW" /></translation>
 <translation id="6221633008163990886">Odblokuj, by wyeksportować hasła</translation>
 <translation id="6232535412751077445">Włączenie opcji „Bez śledzenia” oznacza, że podczas przeglądania będzie wysyłane żądanie. Jego wynik zależy od tego, czy strona na nie odpowie oraz jak zostanie ono zinterpretowane.
@@ -809,6 +814,9 @@
 <translation id="6900532703269623216">Silniejsza ochrona</translation>
 <translation id="6903907808598579934">Włącz synchronizację</translation>
 <translation id="6929699136511445623">Włącz synchronizację systemu Android</translation>
+<translation id="6941901516114974832">W trybie incognito Twoja aktywność <ph name="BEGIN_BOLD1" />może być nadal widoczna<ph name="END_BOLD1" /> dla odwiedzanych stron, Twojego pracodawcy lub szkoły oraz dostawcy internetu.
+
+Dane sesji incognito zostaną usunięte z Chrome dopiero po <ph name="BEGIN_BOLD2" />zamknięciu wszystkich kart incognito<ph name="END_BOLD2" />.</translation>
 <translation id="6942665639005891494">W dowolnej chwili w Ustawieniach możesz zmienić domyślną lokalizację pobierania</translation>
 <translation id="6945221475159498467">Wybierz</translation>
 <translation id="6955535239952325894">To ustawienie jest wyłączone w zarządzanych przeglądarkach</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-BR.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-BR.xtb
index 85cdd637..f8dfd3a7 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-BR.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-BR.xtb
@@ -344,6 +344,7 @@
 <translation id="3568688522516854065">Para ver as guias dos seus outros dispositivos, faça login e ative a sincronização</translation>
 <translation id="3587482841069643663">Tudo</translation>
 <translation id="3587596251841506391">Ajudar a melhorar a segurança na Web</translation>
+<translation id="3598653140581545904">Usar a navegação anônima para fazer login</translation>
 <translation id="3599863153486145794">Limpa o histórico de todos os dispositivos conectados. Sua Conta do Google pode ter outras formas de histórico de navegação em <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
 <translation id="3602290021589620013">Visualizar</translation>
 <translation id="3616113530831147358">Áudio</translation>
@@ -385,6 +386,7 @@
 <translation id="3927692899758076493">Sans Serif</translation>
 <translation id="3928666092801078803">Combinar meus dados</translation>
 <translation id="393697183122708255">Nenhuma pesq. por voz ativada disponível</translation>
+<translation id="3943557322767080599">Mostrar solicitações de login do Chrome quando você fizer login na sua Conta do Google</translation>
 <translation id="395206256282351086">Sugestões de pesquisa e sites desativadas</translation>
 <translation id="396192773038029076">{NUM_IN_PROGRESS,plural, =1{O Chrome carregará sua página quando ela estiver pronta}one{O Chrome carregará sua página quando ela estiver pronta}other{O Chrome carregará suas páginas quando elas estiverem prontas}}</translation>
 <translation id="3963007978381181125">A criptografia por senha longa não inclui formas de pagamento e endereços do Google Pay. Apenas uma pessoa que tenha sua senha longa pode ler seus dados criptografados. Essa senha não é enviada ou armazenada pelo Google. Se você esquecer a senha longa ou quiser alterar essa configuração, será necessário redefinir a sincronização. <ph name="BEGIN_LINK" />Saiba mais<ph name="END_LINK" /></translation>
@@ -661,6 +663,7 @@
 <translation id="5937580074298050696"><ph name="AMOUNT" /> economizado(s)</translation>
 <translation id="5939518447894949180">Redefinir</translation>
 <translation id="5942872142862698679">Usando o Google para pesquisar</translation>
+<translation id="5951119116059277034">Visualizando página ativa</translation>
 <translation id="5951615825629292797">Idioma pronto. Reinicie o app <ph name="APP_NAME" /></translation>
 <translation id="5952764234151283551">Envia ao Google o URL de uma página que você está tentando acessar</translation>
 <translation id="5956665950594638604">Abrir Central de Ajuda do Chrome em uma nova guia</translation>
@@ -668,7 +671,9 @@
 <translation id="5958275228015807058">Encontre seus arquivos e páginas em Downloads</translation>
 <translation id="5962718611393537961">Toque para recolher</translation>
 <translation id="5964805880140440652">Para compartilhar esta página com outro dispositivo, ative a sincronização nas configurações do Chrome</translation>
+<translation id="5964869237734432770">Parar descrição de imagens</translation>
 <translation id="5979084224081478209">Verificar senhas</translation>
+<translation id="5982307838673692400">Abrir uma guia anônima</translation>
 <translation id="6000066717592683814">Continuar usando o Google</translation>
 <translation id="6005538289190791541">Senha sugerida</translation>
 <translation id="6014293228235665243">Não lidas</translation>
@@ -695,8 +700,10 @@
 <translation id="6157392216611456285">Selecionar <ph name="APP_NAME" /></translation>
 <translation id="6159335304067198720">Economia de dados de <ph name="PERCENT" /></translation>
 <translation id="6186394685773237175">Não foram encontradas senhas comprometidas</translation>
+<translation id="6192907950379606605">Ver descrições de imagens</translation>
 <translation id="6206830853671714236">Escolha quando fazer o download</translation>
 <translation id="6210748933810148297">Não é <ph name="EMAIL" />?</translation>
+<translation id="6211386937064921208">Visualizando esta página</translation>
 <translation id="6218096829563201111">Pesquisar itens similares <ph name="BEGIN_NEW" />Novo<ph name="END_NEW" /></translation>
 <translation id="6221633008163990886">Desbloqueie para exportar suas senhas</translation>
 <translation id="6232535412751077445">Ao ativar o recurso "Não rastrear" uma solicitação é incluída no tráfego de navegação. O resultado depende da resposta de um site à solicitação e de como a solicitação é interpretada.
@@ -763,6 +770,7 @@
 <translation id="6590471736817333463">Economize até 60% de dados</translation>
 <translation id="6590680911007613645">A senha que você está salvando precisa ser igual à usada em <ph name="SITE" /></translation>
 <translation id="6593061639179217415">Versão para computador</translation>
+<translation id="6595046016124923392">As imagens são enviadas para o Google para melhorar as descrições para você.</translation>
 <translation id="6597891566292541626">Posicione o código de barras/QR neste quadro.</translation>
 <translation id="6600954340915313787">Copiado no Chrome</translation>
 <translation id="661266467055912436">Melhora a segurança para você e para todos na Web.</translation>
@@ -807,6 +815,9 @@
 <translation id="6900532703269623216">Proteção reforçada</translation>
 <translation id="6903907808598579934">Ativar a sincronização</translation>
 <translation id="6929699136511445623">Ativar o sistema de sincronização do Android</translation>
+<translation id="6941901516114974832">Na navegação anônima, sua atividade <ph name="BEGIN_BOLD1" />ainda pode ficar visível<ph name="END_BOLD1" /> para os sites que você visita, seu empregador ou sua escola e o provedor de acesso à internet.
+
+Os dados da sessão anônima só serão excluídos do Chrome quando você <ph name="BEGIN_BOLD2" />fechar todas as guias anônimas<ph name="END_BOLD2" />.</translation>
 <translation id="6942665639005891494">Altere o local padrão de download a qualquer momento usando a opção do menu "Configurações"</translation>
 <translation id="6945221475159498467">Selecionar</translation>
 <translation id="6955535239952325894">Esta configuração está desativada em navegadores gerenciados</translation>
@@ -821,6 +832,7 @@
 <translation id="702463548815491781">Recomendado quando o TalkBack ou o acesso com interruptor estão ativados</translation>
 <translation id="7029809446516969842">Senhas</translation>
 <translation id="703523980599857277">Mudar página inicial</translation>
+<translation id="7054588988317389591">Ver descrições de imagens?</translation>
 <translation id="7055152154916055070">Redirecionamento bloqueado:</translation>
 <translation id="7063006564040364415">Não foi possível conectar ao servidor de sincronização.</translation>
 <translation id="7071521146534760487">Gerenciar conta</translation>
@@ -852,6 +864,7 @@
 <translation id="729975465115245577">Seu dispositivo não tem um app para armazenar o arquivo de senhas.</translation>
 <translation id="7302081693174882195">Detalhes: classificados pela quantidade de dados economizados</translation>
 <translation id="7304873321153398381">Off-line. Não é possível verificar suas senhas com o Chrome.</translation>
+<translation id="7313188324932846546">Toque para configurar sincronização</translation>
 <translation id="7328017930301109123">Com o Modo Lite, as páginas são carregadas mais rapidamente no Chrome, e há uma economia de dados de até 60 por cento.</translation>
 <translation id="7333031090786104871">Ainda adicionando o site anterior</translation>
 <translation id="7340958967809483333">Opções do Discover</translation>
@@ -1043,6 +1056,7 @@
 <translation id="8636825310635137004">Para ver suas guias abertas em outros dispositivos, ative a sincronização.</translation>
 <translation id="8641930654639604085">Tentar bloquear sites com conteúdo para adultos</translation>
 <translation id="8655129584991699539">É possível limpar os dados nas configurações do Chrome</translation>
+<translation id="8656747343598256512">Faça login neste site e no Chrome com sua Conta do Google. É possível ativar a sincronização mais tarde.</translation>
 <translation id="8659579665266920523">Como pesquisar com o Chrome</translation>
 <translation id="8662811608048051533">Desconecta você da maioria dos sites.</translation>
 <translation id="8664979001105139458">O nome do arquivo já existe</translation>
@@ -1062,6 +1076,7 @@
 <translation id="8840953339110955557">Esta página pode ser diferente da versão on-line.</translation>
 <translation id="8853345339104747198"><ph name="TAB_TITLE" />, guia</translation>
 <translation id="8854223127042600341">Ver seus arquivos off-line</translation>
+<translation id="8856607253650333758">Ver descrições</translation>
 <translation id="8873817150012960745">Toque aqui para começar</translation>
 <translation id="889338405075704026">Acesse as configurações do Chrome</translation>
 <translation id="8898822736010347272">Envia ao Google URLs de algumas páginas que você visita, informações do sistema limitadas e parte do conteúdo das páginas para ajudar a descobrir novas ameaças e proteger todos os usuários na Web.</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-PT.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-PT.xtb
index 8f0ba9e..2acd8b6 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-PT.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-PT.xtb
@@ -344,6 +344,7 @@
 <translation id="3568688522516854065">Para obter os separadores dos seus outros dispositivos, inicie sessão e ative a sincronização.</translation>
 <translation id="3587482841069643663">Tudo</translation>
 <translation id="3587596251841506391">Ajude a melhorar a segur. na Web</translation>
+<translation id="3598653140581545904">Utilize a Navegação anónima para iniciar sessão</translation>
 <translation id="3599863153486145794">Limpa o histórico de todos os dispositivos com sessão iniciada. A sua Conta Google pode ter outras formas do histórico de navegação em <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
 <translation id="3602290021589620013">Pré-visualizar</translation>
 <translation id="3616113530831147358">Áudio</translation>
@@ -385,6 +386,7 @@
 <translation id="3927692899758076493">Sans Serif</translation>
 <translation id="3928666092801078803">Combinar os meus dados</translation>
 <translation id="393697183122708255">Nenhuma pesq. por voz ativada disponível</translation>
+<translation id="3943557322767080599">Apresente pedidos de início de sessão do Chrome quando inicia sessão na sua Conta Google.</translation>
 <translation id="395206256282351086">Sugestões de pesquisa e de sites desativadas</translation>
 <translation id="396192773038029076">{NUM_IN_PROGRESS,plural, =1{O Chrome irá carregar a página quando estiver pronta.}other{O Chrome irá carregar as páginas quando estiverem prontas.}}</translation>
 <translation id="3963007978381181125">A encriptação da frase de acesso não inclui métodos de pagamento nem endereços do Google Pay. Apenas alguém que conheça a sua frase de acesso pode ler os seus dados encriptados. A frase de acesso não é enviada para a Google nem armazenada pela mesma. Se se esquecer da frase de acesso ou pretender alterar esta definição, tem de repor a sincronização. <ph name="BEGIN_LINK" />Saiba mais<ph name="END_LINK" /></translation>
@@ -660,6 +662,7 @@
 <translation id="5937580074298050696"><ph name="AMOUNT" /> poupado(s)</translation>
 <translation id="5939518447894949180">Repor</translation>
 <translation id="5942872142862698679">A utilizar o Google para pesquisa</translation>
+<translation id="5951119116059277034">A ver a página publicada…</translation>
 <translation id="5951615825629292797">Idioma pronto, reinicie a app <ph name="APP_NAME" />.</translation>
 <translation id="5952764234151283551">Envia para a Google o URL de uma página à qual esteja a tentar aceder.</translation>
 <translation id="5956665950594638604">Abrir Centro de Ajuda do Chrome num novo separador</translation>
@@ -669,6 +672,7 @@
 <translation id="5964805880140440652">Para partilhar esta página com outro dispositivo, ative a sincronização nas definições do Chrome.</translation>
 <translation id="5964869237734432770">Parar descrições de imagens</translation>
 <translation id="5979084224081478209">Verificar palavras-passe</translation>
+<translation id="5982307838673692400">Abrir um separador de navegação anónima</translation>
 <translation id="6000066717592683814">Manter o Google</translation>
 <translation id="6005538289190791541">Palavra-passe sugerida</translation>
 <translation id="6014293228235665243">Não lidas</translation>
@@ -698,6 +702,7 @@
 <translation id="6192907950379606605">Obter descrições de imagens</translation>
 <translation id="6206830853671714236">Escolha quando transferir</translation>
 <translation id="6210748933810148297"><ph name="EMAIL" /> não é o seu email?</translation>
+<translation id="6211386937064921208">A pré-visualizar esta página…</translation>
 <translation id="6218096829563201111">Pesq. produtos parecidos <ph name="BEGIN_NEW" />Novo<ph name="END_NEW" /></translation>
 <translation id="6221633008163990886">Desbloqueie para exportar as palavras-passe.</translation>
 <translation id="6232535412751077445">A ativação da funcionalidade "Não Monitorizar" significa que é incluído um pedido no seu tráfego de navegação. Qualquer efeito depende de um Website responder ou não ao pedido e do modo como o pedido é interpretado.
@@ -809,6 +814,9 @@
 <translation id="6900532703269623216">Proteção melhorada</translation>
 <translation id="6903907808598579934">Ativar sincronização</translation>
 <translation id="6929699136511445623">Ativar sincronização do sistema Android</translation>
+<translation id="6941901516114974832">Na Navegação anónima, a sua atividade <ph name="BEGIN_BOLD1" />ainda pode ser visível<ph name="END_BOLD1" /> para os Websites que visita, para a sua entidade patronal ou escola e para o seu fornecedor de serviços de Internet.
+
+Os dados da sua sessão de Navegação anónima apenas serão limpos do Chrome quando <ph name="BEGIN_BOLD2" />fechar todos os separadores de navegação anónima<ph name="END_BOLD2" />.</translation>
 <translation id="6942665639005891494">Altere a localização de transferência predefinida em qualquer altura ao utilizar a opção do menu Definições.</translation>
 <translation id="6945221475159498467">Selecionar</translation>
 <translation id="6955535239952325894">Esta definição está desativada em navegadores geridos.</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ru.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ru.xtb
index 8c2fa9a2..4a3891f 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ru.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ru.xtb
@@ -667,6 +667,7 @@
 <translation id="5958275228015807058">Скачанные файлы и веб-страницы хранятся в одноименном разделе.</translation>
 <translation id="5962718611393537961">Нажмите, чтобы свернуть</translation>
 <translation id="5964805880140440652">Чтобы открыть доступ к этой странице другому устройству, откройте настройки Chrome и включите синхронизацию.</translation>
+<translation id="5964869237734432770">Не генерировать описания</translation>
 <translation id="5979084224081478209">Проверить пароли</translation>
 <translation id="6000066717592683814">Использовать Google</translation>
 <translation id="6005538289190791541">Предложенный пароль</translation>
@@ -694,6 +695,7 @@
 <translation id="6157392216611456285">Выбрать <ph name="APP_NAME" /></translation>
 <translation id="6159335304067198720">Сэкономлено: <ph name="PERCENT" /></translation>
 <translation id="6186394685773237175">Похищенных паролей не найдено.</translation>
+<translation id="6192907950379606605">Описания изображений</translation>
 <translation id="6206830853671714236">Выберите, когда начать скачивание</translation>
 <translation id="6210748933810148297"><ph name="EMAIL" /> не ваш аккаунт?</translation>
 <translation id="6218096829563201111">Искать похожие товары<ph name="BEGIN_NEW" />Новинка<ph name="END_NEW" /></translation>
@@ -762,6 +764,7 @@
 <translation id="6590471736817333463">Экономьте до 60 % трафика</translation>
 <translation id="6590680911007613645">Убедитесь, что пароль, который вы сохраняете, совпадает с паролем для сайта <ph name="SITE" />.</translation>
 <translation id="6593061639179217415">Версия для ПК</translation>
+<translation id="6595046016124923392">Изображения передаются в Google, чтобы сгенерировать их описание.</translation>
 <translation id="6597891566292541626">Поместите QR-код или штрихкод в эту рамку.</translation>
 <translation id="6600954340915313787">Скопировано в Chrome</translation>
 <translation id="661266467055912436">Делает Интернет безопаснее для вас и других пользователей.</translation>
@@ -820,6 +823,7 @@
 <translation id="702463548815491781">Рекомендовано при включенных функциях TalkBack и Switch Access</translation>
 <translation id="7029809446516969842">Пароли</translation>
 <translation id="703523980599857277">Изменить главную страницу</translation>
+<translation id="7054588988317389591">Генерировать описания изображений?</translation>
 <translation id="7055152154916055070">Заблокирована попытка переадресации:</translation>
 <translation id="7063006564040364415">Не удалось связаться с сервером синхронизации</translation>
 <translation id="7071521146534760487">Настройки аккаунта</translation>
@@ -851,6 +855,7 @@
 <translation id="729975465115245577">На устройстве не установлено приложение для хранения файлов паролей.</translation>
 <translation id="7302081693174882195">Сортировка по объему сэкономленного трафика</translation>
 <translation id="7304873321153398381">Вы не в Сети. Браузеру Chrome не удается проверить пароли.</translation>
+<translation id="7313188324932846546">Нажмите, чтобы настроить синхронизацию.</translation>
 <translation id="7328017930301109123">В упрощенном режиме Chrome быстрее загружает страницы и экономит до 60 процентов трафика.</translation>
 <translation id="7333031090786104871">Предыдущий сайт ещё не добавлен</translation>
 <translation id="7340958967809483333">Параметры рекомендаций</translation>
@@ -1042,6 +1047,7 @@
 <translation id="8636825310635137004">Чтобы получить доступ к вкладкам на всех ваших устройствах, включите синхронизацию.</translation>
 <translation id="8641930654639604085">Блокировать сайты для взрослых</translation>
 <translation id="8655129584991699539">Удалить данные можно в настройках Chrome</translation>
+<translation id="8656747343598256512">Войдите на сайт и в Chrome со своим аккаунтом Google. Синхронизацию можно включить позже.</translation>
 <translation id="8659579665266920523">Как выполнять поиск в Chrome</translation>
 <translation id="8662811608048051533">Вы автоматически выйдете из учетных записей на большинстве сайтов.</translation>
 <translation id="8664979001105139458">Файл с таким именем уже существует.</translation>
@@ -1061,6 +1067,7 @@
 <translation id="8840953339110955557">Страница может отличаться от онлайн-версии.</translation>
 <translation id="8853345339104747198">Вкладка "<ph name="TAB_TITLE" />"</translation>
 <translation id="8854223127042600341">Посмотреть скачанные файлы</translation>
+<translation id="8856607253650333758">Генерировать описания</translation>
 <translation id="8873817150012960745">Нажмите здесь, чтобы начать</translation>
 <translation id="889338405075704026">Открыть настройки Chrome</translation>
 <translation id="8898822736010347272">Отправлять в Google URL и контент некоторых посещенных страниц, а также определенную информацию о системе (это помогает обнаруживать новые угрозы и защищать всех пользователей Интернета)</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sl.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sl.xtb
index 280bf60..df67a03 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sl.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sl.xtb
@@ -344,6 +344,7 @@
 <translation id="3568688522516854065">Če želite dostopati do zavihkov iz drugih naprav, vklopite sinhronizacijo</translation>
 <translation id="3587482841069643663">Vse</translation>
 <translation id="3587596251841506391">Izboljšanje varnosti v spletu</translation>
+<translation id="3598653140581545904">Uporaba načina brez beleženja dejavnosti za prijavo</translation>
 <translation id="3599863153486145794">Izbriše zgodovino iz vseh naprav, v katerih ste prijavljeni. V Google Računu so morda druge vrste zgodovine brskanja na <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
 <translation id="3602290021589620013">Predogled</translation>
 <translation id="3616113530831147358">Zvok</translation>
@@ -385,6 +386,7 @@
 <translation id="3927692899758076493">Sans Serif</translation>
 <translation id="3928666092801078803">Združevanje podatkov</translation>
 <translation id="393697183122708255">Glasovno iskanje ni na voljo</translation>
+<translation id="3943557322767080599">Prikaz pozivov za prijavo v Chrome, ko se prijavite v račun Google.</translation>
 <translation id="395206256282351086">Predlogi za iskanje in spletna mesta so onemogočeni</translation>
 <translation id="396192773038029076">{NUM_IN_PROGRESS,plural, =1{Chrome bo naložil stran, ko bo pripravljen}one{Chrome bo naložil strani, ko bo pripravljen}two{Chrome bo naložil strani, ko bo pripravljen}few{Chrome bo naložil strani, ko bo pripravljen}other{Chrome bo naložil strani, ko bo pripravljen}}</translation>
 <translation id="3963007978381181125">Šifriranje gesla ne vključuje plačilnih sredstev in naslovov iz Googla Pay. Vaše šifrirane podatke lahko bere samo oseba z vašim geslom. Geslo ni poslano Googlu in ni shranjeno v Googlu. Če ga pozabite ali želite spremeniti to nastavitev, boste morali sinhronizacijo ponastaviti. <ph name="BEGIN_LINK" />Več o tem<ph name="END_LINK" /></translation>
@@ -660,6 +662,7 @@
 <translation id="5937580074298050696"><ph name="AMOUNT" /> prihranka pri količini prenesenih podatkov</translation>
 <translation id="5939518447894949180">Ponastavi</translation>
 <translation id="5942872142862698679">Uporaba iskalnika Google za iskanje</translation>
+<translation id="5951119116059277034">Ogledovanje strani v živo</translation>
 <translation id="5951615825629292797">Jezik je pripravljen, znova zaženite <ph name="APP_NAME" /></translation>
 <translation id="5952764234151283551">Googlu pošlje URL strani, ki jo želite odpreti</translation>
 <translation id="5956665950594638604">Odpiranje centra za pomoč za Chrome na nov. zavih.</translation>
@@ -669,6 +672,7 @@
 <translation id="5964805880140440652">Če želite to stran deliti z drugo napravo, v nastavitvah Chroma vklopite sinhronizacijo</translation>
 <translation id="5964869237734432770">Ustavi prenos opisov slik</translation>
 <translation id="5979084224081478209">Preveri gesla</translation>
+<translation id="5982307838673692400">Odpiranje zavihka brez beleženja dejavnosti</translation>
 <translation id="6000066717592683814">Ohrani Google</translation>
 <translation id="6005538289190791541">Predlagano geslo</translation>
 <translation id="6014293228235665243">Neprebrano</translation>
@@ -698,6 +702,7 @@
 <translation id="6192907950379606605">Prenesi opise slik</translation>
 <translation id="6206830853671714236">Izbira, kdaj prenesti</translation>
 <translation id="6210748933810148297">Niste <ph name="EMAIL" />?</translation>
+<translation id="6211386937064921208">Predogled te strani</translation>
 <translation id="6218096829563201111">Iskanje podobnih izdelkov <ph name="BEGIN_NEW" />Novo<ph name="END_NEW" /></translation>
 <translation id="6221633008163990886">Odklenite, če želite izvoziti gesla</translation>
 <translation id="6232535412751077445">Če omogočite možnost »Ne sledi«, bo zahteva vključena v vaš promet brskanja. Učinek je odvisen od odziva spletnega mesta na zahtevo in od tega, kako si zahtevo razlaga.
@@ -809,6 +814,9 @@
 <translation id="6900532703269623216">Izboljšana zaščita</translation>
 <translation id="6903907808598579934">Vklopi sinhronizacijo</translation>
 <translation id="6929699136511445623">Omogoči sinhronizacijo sistema Android</translation>
+<translation id="6941901516114974832">V načinu brez beleženja dejavnosti je vaša dejavnost <ph name="BEGIN_BOLD1" />morda še vedno vidna<ph name="END_BOLD1" /> spletnim mestom, ki jih obiščete, delodajalcu ali šoli ter ponudniku internetnih storitev.
+
+Podatki seje brez beleženja dejavnosti se iz Chroma izbrišejo šele, ko <ph name="BEGIN_BOLD2" />zaprete vse zavihke brez beleženja dejavnosti<ph name="END_BOLD2" />.</translation>
 <translation id="6942665639005891494">Z možnostjo v meniju z nastavitvami lahko kadar koli spremenite privzeto mesto za prenose</translation>
 <translation id="6945221475159498467">Izberi</translation>
 <translation id="6955535239952325894">Ta nastavitev je onemogočena v upravljanih brskalnikih</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr-Latn.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr-Latn.xtb
index a9ad454..533329d 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr-Latn.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr-Latn.xtb
@@ -344,6 +344,7 @@
 <translation id="3568688522516854065">Da bi vam kartice bile dostupne na drugim uređajima, prijavite se i uključite sinhronizaciju</translation>
 <translation id="3587482841069643663">Sve</translation>
 <translation id="3587596251841506391">Poboljšajte bezbednost na vebu</translation>
+<translation id="3598653140581545904">Koristite režim bez arhiviranja da biste se prijavili</translation>
 <translation id="3599863153486145794">Briše istoriju sa svih uređaja na kojima ste prijavljeni. Google nalog može da ima druge oblike istorije pregledanja na <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
 <translation id="3602290021589620013">Pregled</translation>
 <translation id="3616113530831147358">Audio</translation>
@@ -385,6 +386,7 @@
 <translation id="3927692899758076493">Sans Serif</translation>
 <translation id="3928666092801078803">Kombinuj podatke</translation>
 <translation id="393697183122708255">Nije dostupna nijed. omoguć. glas. pret.</translation>
+<translation id="3943557322767080599">Prikaži Chrome upite za prijavljivanje pri prijavljivanju na Google nalog</translation>
 <translation id="395206256282351086">Predlozi za pretragu i sajtove su onemogućeni</translation>
 <translation id="396192773038029076">{NUM_IN_PROGRESS,plural, =1{Chrome će učitati stranicu kada bude spremna}one{Chrome će učitati stranice kada budu spremne}few{Chrome će učitati stranice kada budu spremne}other{Chrome će učitati stranice kada budu spremne}}</translation>
 <translation id="3963007978381181125">Šifrovanje pomoću pristupne fraze ne obuhvata načine plaćanja i adrese iz Google Pay-a. Samo neko ko ima pristupnu frazu može da čita šifrovane podatke. Pristupna fraza se ne šalje Google-u niti je on čuva. Ako zaboravite pristupnu frazu ili poželite da promenite ovo podešavanje, treba da resetujete sinhronizaciju. <ph name="BEGIN_LINK" />Saznajte više<ph name="END_LINK" /></translation>
@@ -660,6 +662,7 @@
 <translation id="5937580074298050696">Uštedeli ste <ph name="AMOUNT" /></translation>
 <translation id="5939518447894949180">Resetuj</translation>
 <translation id="5942872142862698679">Koristite Google za pretragu</translation>
+<translation id="5951119116059277034">Prikazuje se aktivna stranica</translation>
 <translation id="5951615825629292797">Jezik je spreman, restartujte aplikaciju <ph name="APP_NAME" /></translation>
 <translation id="5952764234151283551">Šalje Google-u URL stranice kojoj pokušavate da pristupite</translation>
 <translation id="5956665950594638604">Otvaranje Chrome centra za pomoć na novoj kartici</translation>
@@ -669,6 +672,7 @@
 <translation id="5964805880140440652">Da biste delili ovu stranicu sa drugim uređajem, uključite sinhronizaciju u podešavanjima Chrome-a</translation>
 <translation id="5964869237734432770">Zaustavi opise slika</translation>
 <translation id="5979084224081478209">Proveri lozinke</translation>
+<translation id="5982307838673692400">Otvori karticu bez arhiviranja</translation>
 <translation id="6000066717592683814">Zadrži Google</translation>
 <translation id="6005538289190791541">Predložena lozinka</translation>
 <translation id="6014293228235665243">Nepročitano</translation>
@@ -698,6 +702,7 @@
 <translation id="6192907950379606605">Preuzimaj opise slika</translation>
 <translation id="6206830853671714236">Izaberite vreme preuzimanja</translation>
 <translation id="6210748933810148297">Niste <ph name="EMAIL" />?</translation>
+<translation id="6211386937064921208">Pregled ove stranice</translation>
 <translation id="6218096829563201111">Pretraži slične proizvode <ph name="BEGIN_NEW" />Novo<ph name="END_NEW" /></translation>
 <translation id="6221633008163990886">Otključajte da biste izvezli lozinke</translation>
 <translation id="6232535412751077445">Ako omogućite funkciju „Ne prati“, zahtev će biti obuhvaćen saobraćajem pregledanja. Posledica te radnje zavisi od toga da li veb-sajt odgovara na zahtev i kako se zahtev tumači.
@@ -809,6 +814,9 @@
 <translation id="6900532703269623216">Napredna zaštita</translation>
 <translation id="6903907808598579934">Uključi sinhronizaciju</translation>
 <translation id="6929699136511445623">Omogući sinhronizaciju Android sistema</translation>
+<translation id="6941901516114974832">U režimu bez arhiviranja vaše aktivnosti <ph name="BEGIN_BOLD1" />i dalje mogu da vide <ph name="END_BOLD1" />veb-sajtovi koje posećujete, vaš poslodavac ili škola i internet provajder.
+
+Podaci iz sesije bez arhiviranja se brišu iz Chrome-a samo kada <ph name="BEGIN_BOLD2" />zatvorite sve kartice bez arhiviranja<ph name="END_BOLD2" />.</translation>
 <translation id="6942665639005891494">Promenite podrazumevanu lokaciju za preuzimanje u bilo kom trenutku pomoći opcije u meniju Podešavanja</translation>
 <translation id="6945221475159498467">Izaberi</translation>
 <translation id="6955535239952325894">Ovo podešavanje je onemogućeno u pregledačima kojima se upravlja</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr.xtb
index 444529ab..45fcc04b 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr.xtb
@@ -344,6 +344,7 @@
 <translation id="3568688522516854065">Да би вам картице биле доступне на другим уређајима, пријавите се и укључите синхронизацију</translation>
 <translation id="3587482841069643663">Све</translation>
 <translation id="3587596251841506391">Побољшајте безбедност на вебу</translation>
+<translation id="3598653140581545904">Користите режим без архивирања да бисте се пријавили</translation>
 <translation id="3599863153486145794">Брише историју са свих уређаја на којима сте пријављени. Google налог може да има друге облике историје прегледања на <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
 <translation id="3602290021589620013">Преглед</translation>
 <translation id="3616113530831147358">Аудио</translation>
@@ -385,6 +386,7 @@
 <translation id="3927692899758076493">Sans Serif</translation>
 <translation id="3928666092801078803">Комбинуј податке</translation>
 <translation id="393697183122708255">Није доступна нијед. омогућ. глас. прет.</translation>
+<translation id="3943557322767080599">Прикажи Chrome упите за пријављивање при пријављивању на Google налог</translation>
 <translation id="395206256282351086">Предлози за претрагу и сајтове су онемогућени</translation>
 <translation id="396192773038029076">{NUM_IN_PROGRESS,plural, =1{Chrome ће учитати страницу када буде спремна}one{Chrome ће учитати странице када буду спремне}few{Chrome ће учитати странице када буду спремне}other{Chrome ће учитати странице када буду спремне}}</translation>
 <translation id="3963007978381181125">Шифровање помоћу приступне фразе не обухвата начине плаћања и адресе из Google Pay-а. Само неко ко има приступну фразу може да чита шифроване податке. Приступна фраза се не шаље Google-у нити је он чува. Ако заборавите приступну фразу или пожелите да промените ово подешавање, треба да ресетујете синхронизацију. <ph name="BEGIN_LINK" />Сазнајте више<ph name="END_LINK" /></translation>
@@ -660,6 +662,7 @@
 <translation id="5937580074298050696">Уштедели сте <ph name="AMOUNT" /></translation>
 <translation id="5939518447894949180">Ресетуј</translation>
 <translation id="5942872142862698679">Користите Google за претрагу</translation>
+<translation id="5951119116059277034">Приказује се активна страница</translation>
 <translation id="5951615825629292797">Језик је спреман, рестартујте апликацију <ph name="APP_NAME" /></translation>
 <translation id="5952764234151283551">Шаље Google-у URL странице којој покушавате да приступите</translation>
 <translation id="5956665950594638604">Отварање Chrome центра за помоћ на новој картици</translation>
@@ -669,6 +672,7 @@
 <translation id="5964805880140440652">Да бисте делили ову страницу са другим уређајем, укључите синхронизацију у подешавањима Chrome-а</translation>
 <translation id="5964869237734432770">Заустави описе слика</translation>
 <translation id="5979084224081478209">Провери лозинке</translation>
+<translation id="5982307838673692400">Отвори картицу без архивирања</translation>
 <translation id="6000066717592683814">Задржи Google</translation>
 <translation id="6005538289190791541">Предложена лозинка</translation>
 <translation id="6014293228235665243">Непрочитано</translation>
@@ -698,6 +702,7 @@
 <translation id="6192907950379606605">Преузимај описе слика</translation>
 <translation id="6206830853671714236">Изаберите време преузимања</translation>
 <translation id="6210748933810148297">Нисте <ph name="EMAIL" />?</translation>
+<translation id="6211386937064921208">Преглед ове странице</translation>
 <translation id="6218096829563201111">Претражи сличне производе <ph name="BEGIN_NEW" />Ново<ph name="END_NEW" /></translation>
 <translation id="6221633008163990886">Откључајте да бисте извезли лозинке</translation>
 <translation id="6232535412751077445">Ако омогућите функцију „Не прати“, захтев ће бити обухваћен саобраћајем прегледања. Последица те радње зависи од тога да ли веб-сајт одговара на захтев и како се захтев тумачи.
@@ -809,6 +814,9 @@
 <translation id="6900532703269623216">Напредна заштита</translation>
 <translation id="6903907808598579934">Укључи синхронизацију</translation>
 <translation id="6929699136511445623">Омогући синхронизацију Android система</translation>
+<translation id="6941901516114974832">У режиму без архивирања ваше активности <ph name="BEGIN_BOLD1" />и даље могу да виде <ph name="END_BOLD1" />веб-сајтови које посећујете, ваш послодавац или школа и интернет провајдер.
+
+Подаци из сесије без архивирања се бришу из Chrome-а само када <ph name="BEGIN_BOLD2" />затворите све картице без архивирања<ph name="END_BOLD2" />.</translation>
 <translation id="6942665639005891494">Промените подразумевану локацију за преузимање у било ком тренутку помоћи опције у менију Подешавања</translation>
 <translation id="6945221475159498467">Изабери</translation>
 <translation id="6955535239952325894">Ово подешавање је онемогућено у прегледачима којима се управља</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sv.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sv.xtb
index 499a7cf..272b14a 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sv.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sv.xtb
@@ -344,6 +344,7 @@
 <translation id="3568688522516854065">Logga in och aktivera synkronisering om du vill ha samma flikar tillgängliga på alla enheter</translation>
 <translation id="3587482841069643663">Alla</translation>
 <translation id="3587596251841506391">Förbättra säkerheten på webben</translation>
+<translation id="3598653140581545904">Logga in med inkognitoläget</translation>
 <translation id="3599863153486145794">Historik rensas från alla inloggade enheter. Det kan finnas andra former av webbhistorik i Google-kontot på <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
 <translation id="3602290021589620013">Förhandsgranskning</translation>
 <translation id="3616113530831147358">Ljud</translation>
@@ -385,6 +386,7 @@
 <translation id="3927692899758076493">Sans Serif</translation>
 <translation id="3928666092801078803">Slå ihop data</translation>
 <translation id="393697183122708255">Röstsökning är inte tillgängligt</translation>
+<translation id="3943557322767080599">Visa inloggningsmeddelanden i Chrome när du loggar in på ditt Google-konto</translation>
 <translation id="395206256282351086">Sök- och webbplatsförslag har inaktiverats</translation>
 <translation id="396192773038029076">{NUM_IN_PROGRESS,plural, =1{Sidan läses in i Chrome när den blir tillgänglig}other{Sidorna läses in i Chrome när de blir tillgängliga}}</translation>
 <translation id="3963007978381181125">Betalningsmetoder och adresser från Google Pay omfattas inte av kryptering med lösenfras. Endast personer som har ditt lösenord kan läsa dina krypterade uppgifter. Lösenfrasen skickas inte till och sparas inte av Google. Om du glömmer lösenfrasen måste du återställa synkroniseringen. <ph name="BEGIN_LINK" />Läs mer<ph name="END_LINK" /></translation>
@@ -660,6 +662,7 @@
 <translation id="5937580074298050696"><ph name="AMOUNT" /> har sparats</translation>
 <translation id="5939518447894949180">Återställ</translation>
 <translation id="5942872142862698679">Du söker med Google</translation>
+<translation id="5951119116059277034">Visar aktiv sida</translation>
 <translation id="5951615825629292797">Språket kan nu användas, starta om <ph name="APP_NAME" /></translation>
 <translation id="5952764234151283551">Skickar webbadressen till en sida som du försöker nå till Google</translation>
 <translation id="5956665950594638604">Öppna hjälpcentret för Chrome på en ny flik</translation>
@@ -669,6 +672,7 @@
 <translation id="5964805880140440652">Aktivera synkronisering i inställningarna för Chrome om du vill dela den här sidan med annan enhet</translation>
 <translation id="5964869237734432770">Stoppa bildbeskrivning</translation>
 <translation id="5979084224081478209">Kontrollera lösenorden</translation>
+<translation id="5982307838673692400">Öppna en inkognitoflik</translation>
 <translation id="6000066717592683814">Behåll Google</translation>
 <translation id="6005538289190791541">Föreslaget lösenord</translation>
 <translation id="6014293228235665243">Olästa</translation>
@@ -698,6 +702,7 @@
 <translation id="6192907950379606605">Få bildbeskrivningar</translation>
 <translation id="6206830853671714236">Välj när du vill ladda ned</translation>
 <translation id="6210748933810148297">Inte <ph name="EMAIL" />?</translation>
+<translation id="6211386937064921208">Förhandsgranskar sidan</translation>
 <translation id="6218096829563201111">Sök på liknande produkter <ph name="BEGIN_NEW" />Nytt<ph name="END_NEW" /></translation>
 <translation id="6221633008163990886">Lås upp om du vill exportera dina lösenord</translation>
 <translation id="6232535412751077445">Om du aktiverar Do Not Track inkluderas en begäran i din surftrafik. Eventuella effekter beror på om webbplatsen svarar på begäran och hur begäran tolkas.
@@ -809,6 +814,9 @@
 <translation id="6900532703269623216">Förbättrat skydd</translation>
 <translation id="6903907808598579934">Aktivera synkronisering</translation>
 <translation id="6929699136511445623">Aktivera synkronisering av Android-systemet</translation>
+<translation id="6941901516114974832">Webbplatserna du besöker, din arbetsgivare eller skola samt internetleverantören <ph name="BEGIN_BOLD1" />kan fortfarande se<ph name="END_BOLD1" /> din aktivitet när du använder inkognitoläget.
+
+Data från inkognitosessionen rensas bara från Chrome om du <ph name="BEGIN_BOLD2" />stänger alla inkognitoflikar<ph name="END_BOLD2" />.</translation>
 <translation id="6942665639005891494">Ändra standardplats för nedladdningar när som helst via alternativet i inställningsmenyn</translation>
 <translation id="6945221475159498467">Välj</translation>
 <translation id="6955535239952325894">Inställningen är inaktiverad för hanterade webbläsare</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_te.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_te.xtb
index b02995e..a518515 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_te.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_te.xtb
@@ -344,6 +344,7 @@
 <translation id="3568688522516854065">మీ ఇతర పరికరాలలో ఉన్న మీ అన్ని ట్యాబ్‌‌‍లను పొందాలనుకుంటే, సైన్ ఇన్ చేసి, సమకాలీకరణ ఎంపికను ఆన్ చేయాలి</translation>
 <translation id="3587482841069643663">మొత్తం</translation>
 <translation id="3587596251841506391">వెబ్ భద్రతనుపెంచడంలో సాయపడుతుంది</translation>
+<translation id="3598653140581545904">సైన్ ఇన్ చేయడానికి అజ్ఞాత మోడ్‌ను ఉపయోగించండి</translation>
 <translation id="3599863153486145794">సైన్ ఇన్ చేసిన అన్ని పరికరాల నుండి చరిత్రను తొలగిస్తుంది. మీ Google ఖాతా <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />లో ఇతర రూపాల్లో ఉన్న బ్రౌజింగ్ చరిత్రను కలిగి ఉండవచ్చు.</translation>
 <translation id="3602290021589620013">ప్రివ్యూ</translation>
 <translation id="3616113530831147358">ఆడియో</translation>
@@ -385,6 +386,7 @@
 <translation id="3927692899758076493">Sans Serif</translation>
 <translation id="3928666092801078803">నా డేటాను కలపండి</translation>
 <translation id="393697183122708255">ప్రారంభించిన వాయిస్ శోధన అందుబాటులో లేదు</translation>
+<translation id="3943557322767080599">మీరు Google ఖాతాకు సైన్ ఇన్ చేసినప్పుడు, Chrome సైన్ ఇన్ ప్రాంప్ట్‌లను చూపించు</translation>
 <translation id="395206256282351086">శోధన మరియు సైట్ సూచనలు నిలిపివేయబడ్డాయి</translation>
 <translation id="396192773038029076">{NUM_IN_PROGRESS,plural, =1{కనెక్ట్ అయినప్పుడు, Chrome మీ పేజీని లోడ్ చేస్తుంది}other{కనెక్ట్ అయినప్పుడు, Chrome మీ పేజీలను లోడ్ చేస్తుంది}}</translation>
 <translation id="3963007978381181125">Google Payకి సంబంధించిన చెల్లింపు పద్ధతులు మరియు చిరునామాలు రహస్య పదబంధం ఎన్‌క్రిప్షన్‌లో ఉండవు. మీ రహస్య పదబంధాన్ని కలిగి ఉన్నవారు మాత్రమే మీ ఎన్‌క్రిప్ట్ చేసిన డేటాను చదవగలరు. రహస్య పదబంధం Google ద్వారా ఎవరికీ పంపబడదు లేదా నిల్వ చేయబడదు. మీరు మీ రహస్య పదబంధాన్ని మర్చిపోతే లేదా ఈ సెట్టింగ్‌ను మార్చాలనుకుంటే, సమకాలీకరణను రీసెట్ చేయాల్సి ఉంటుంది. <ph name="BEGIN_LINK" />మరింత తెలుసుకోండి<ph name="END_LINK" /></translation>
@@ -660,6 +662,7 @@
 <translation id="5937580074298050696"><ph name="AMOUNT" /> సేవ్ చేయబడింది</translation>
 <translation id="5939518447894949180">రీసెట్ చేయి</translation>
 <translation id="5942872142862698679">శోధన కోసం Googleను ఉపయోగిస్తోంది</translation>
+<translation id="5951119116059277034">లైవ్ పేజీని చూస్తున్నారు</translation>
 <translation id="5951615825629292797">భాష సిద్ధంగా ఉంది, <ph name="APP_NAME" />ను రీస్టార్ట్ చేయండి</translation>
 <translation id="5952764234151283551">మీరు చేరుకోవాలని ప్రయత్నిస్తున్న పేజీ URLని Googleకి పంపుతుంది</translation>
 <translation id="5956665950594638604">Chrome సహాయ కేంద్రాన్ని కొత్త ట్యాబ్‌లో తెరవండి</translation>
@@ -669,6 +672,7 @@
 <translation id="5964805880140440652">ఈ పేజీని మరొక పరికరానికి షేర్ చేయడానికి, Chrome సెట్టింగ్‌లలో సింక్‌ను ఆన్ చేయండి</translation>
 <translation id="5964869237734432770">ఇమేజ్ వివరణలను ఆపివేయి</translation>
 <translation id="5979084224081478209">పాస్‌వర్డ్‌లను తనిఖీ చేయి</translation>
+<translation id="5982307838673692400">అజ్ఞాత ట్యాబ్‌ను తెరవండి</translation>
 <translation id="6000066717592683814">Googleని ఉంచు</translation>
 <translation id="6005538289190791541">సూచించబడిన పాస్‌వర్డ్‌</translation>
 <translation id="6014293228235665243">చదవనివి</translation>
@@ -698,6 +702,7 @@
 <translation id="6192907950379606605">ఇమేజ్ వివరణలను పొందండి</translation>
 <translation id="6206830853671714236">ఎప్పుడు డౌన్‌లోడ్ చేయాలో ఎంచుకోండి</translation>
 <translation id="6210748933810148297"><ph name="EMAIL" /> కాదా?</translation>
+<translation id="6211386937064921208">ఈ పేజీని ప్రివ్యూ చేస్తోంది</translation>
 <translation id="6218096829563201111">ఇలాంటి ప్రోడక్ట్ వెతుకు<ph name="BEGIN_NEW" />కొత్తది<ph name="END_NEW" /></translation>
 <translation id="6221633008163990886">మీ పాస్‌వర్డ్‌లను ఎగుమతి చేయడానికి అన్‌లాక్ చేయండి</translation>
 <translation id="6232535412751077445">“ట్రాక్ చేయవద్దు”ను ప్రారంభించడం వ‌ల్ల‌ మీ బ్రౌజింగ్ ట్రాఫిక్‌తో పాటు ఒక అభ్యర్థన చేర్చబడుతుంది. ఆ అభ్యర్థనకు వెబ్‌సైట్ ప్రతిస్పందించిందా లేదా మరియు అభ్యర్థన ఎలా ప‌రిగ‌ణించ‌బ‌డింది అనే వాటిపై ఏ ప్రభావం అయినా ఆధారపడి ఉంటుంది. 
@@ -809,6 +814,9 @@
 <translation id="6900532703269623216">మెరుగైన రక్షణ</translation>
 <translation id="6903907808598579934">సమకాలీకరణను ఆన్ చేయి</translation>
 <translation id="6929699136511445623">Android సిస్టమ్ సింక్‌ని ఎనేబుల్ చేయి</translation>
+<translation id="6941901516114974832">అజ్ఞాత మోడ్‌లో, మీ యాక్టివిటీ మీరు సందర్శించే వెబ్‌సైట్‌లకు, మీ యజమాని లేదా పాఠశాలకు, అలాగే మీ ఇంటర్నెట్ సర్వీస్ ప్రొవైడర్‌కు <ph name="BEGIN_BOLD1" />ఇప్పటికీ కనిపించవచ్చు<ph name="END_BOLD1" />.
+
+మీరు <ph name="BEGIN_BOLD2" />అజ్ఞాత మోడ్‌లోని అన్ని ట్యాబ్‌లను మూసినప్పుడే<ph name="END_BOLD2" /> మీ అజ్ఞాత సెషన్‌లోని డేటా Chrome నుండి క్లియర్ చేయబడుతుంది.</translation>
 <translation id="6942665639005891494">సెట్టింగ్‌ల మెనూ ఎంపికను ఉపయోగించి డిఫాల్ట్ డౌన్‌లోడ్ స్థానాన్ని మార్చండి</translation>
 <translation id="6945221475159498467">ఎంచుకోండి</translation>
 <translation id="6955535239952325894">మేనేజ్ అవుతోన్న బ్రౌజర్‌లలో ఈ సెట్టింగ్ డిజేబుల్ చేయబడింది.</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_th.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_th.xtb
index 667cfca..5adaa57 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_th.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_th.xtb
@@ -344,6 +344,7 @@
 <translation id="3568688522516854065">ลงชื่อเข้าใช้และเปิดการซิงค์เพื่อรับแท็บจากอุปกรณ์เครื่องอื่นๆ ของคุณ</translation>
 <translation id="3587482841069643663">ทั้งหมด</translation>
 <translation id="3587596251841506391">ช่วยปรับปรุงความปลอดภัยในอินเทอร์เน็ต</translation>
+<translation id="3598653140581545904">ใช้โหมดไม่ระบุตัวตนเพื่อลงชื่อเข้าใช้</translation>
 <translation id="3599863153486145794">ล้างประวัติจากอุปกรณ์ที่ลงชื่อเข้าใช้ทั้งหมด บัญชี Google อาจมีประวัติการท่องเว็บรูปแบบอื่นๆ ที่ <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /></translation>
 <translation id="3602290021589620013">ดูตัวอย่าง</translation>
 <translation id="3616113530831147358">เสียง</translation>
@@ -385,6 +386,7 @@
 <translation id="3927692899758076493">Sans Serif</translation>
 <translation id="3928666092801078803">รวมข้อมูลของฉัน</translation>
 <translation id="393697183122708255">ไม่มีการเปิดใช้การค้นหาด้วยเสียง</translation>
+<translation id="3943557322767080599">แสดงข้อความแจ้งให้ลงชื่อเข้าใช้ Chrome เมื่อคุณลงชื่อเข้าใช้บัญชี Google</translation>
 <translation id="395206256282351086">ปิดใช้คำแนะนำการค้นหาและเว็บไซต์แล้ว</translation>
 <translation id="396192773038029076">{NUM_IN_PROGRESS,plural, =1{Chrome จะโหลดหน้าเว็บเมื่อพร้อม}other{Chrome จะโหลดหน้าเว็บเมื่อพร้อม}}</translation>
 <translation id="3963007978381181125">การเข้ารหัสลับด้วยรหัสผ่านจะไม่รวมข้อมูลวิธีการชำระเงินและที่อยู่จาก Google Pay เฉพาะผู้ที่มีรหัสผ่านของคุณเท่านั้นจึงจะอ่านข้อมูลที่เข้ารหัสได้ Google จะไม่ได้รับหรือจัดเก็บรหัสผ่านนี้ คุณจะต้องรีเซ็ตการซิงค์หากลืมรหัสผ่านหรือต้องการเปลี่ยนแปลงการตั้งค่านี้ <ph name="BEGIN_LINK" />ดูข้อมูลเพิ่มเติม<ph name="END_LINK" /></translation>
@@ -660,6 +662,7 @@
 <translation id="5937580074298050696">ประหยัดได้ <ph name="AMOUNT" /></translation>
 <translation id="5939518447894949180">รีเซ็ต</translation>
 <translation id="5942872142862698679">กำลังใช้ Google ในการค้นหา</translation>
+<translation id="5951119116059277034">กำลังดูหน้าเว็บที่เผยแพร่</translation>
 <translation id="5951615825629292797">ภาษาพร้อมใช้งานแล้ว โปรดรีสตาร์ท <ph name="APP_NAME" /></translation>
 <translation id="5952764234151283551">ส่ง URL ของหน้าที่คุณพยายามเข้าถึงไปยัง Google</translation>
 <translation id="5956665950594638604">เปิดศูนย์ช่วยเหลือของ Chrome ในแท็บใหม่</translation>
@@ -667,7 +670,9 @@
 <translation id="5958275228015807058">หาไฟล์และหน้าในโฟลเดอร์ดาวน์โหลด</translation>
 <translation id="5962718611393537961">แตะเพื่อยุบ</translation>
 <translation id="5964805880140440652">หากต้องการแชร์หน้านี้กับอุปกรณ์อีกเครื่องหนึ่ง ให้เปิดการซิงค์ในการตั้งค่า Chrome</translation>
+<translation id="5964869237734432770">หยุดรับคำอธิบายรูปภาพ</translation>
 <translation id="5979084224081478209">ตรวจสอบรหัสผ่าน</translation>
+<translation id="5982307838673692400">เปิดแท็บที่ไม่ระบุตัวตน</translation>
 <translation id="6000066717592683814">ใช้ Google ต่อ</translation>
 <translation id="6005538289190791541">รหัสผ่านที่แนะนำ</translation>
 <translation id="6014293228235665243">ยังไม่อ่าน</translation>
@@ -694,8 +699,10 @@
 <translation id="6157392216611456285">เลือก <ph name="APP_NAME" /></translation>
 <translation id="6159335304067198720">ประหยัดอินเทอร์เน็ต <ph name="PERCENT" /></translation>
 <translation id="6186394685773237175">ไม่พบรหัสผ่านที่ไม่รัดกุม</translation>
+<translation id="6192907950379606605">รับคำอธิบายรูปภาพ</translation>
 <translation id="6206830853671714236">เลือกเวลาที่จะดาวน์โหลด</translation>
 <translation id="6210748933810148297"><ph name="EMAIL" /> ไม่ใช่บัญชีที่ฉันจะใช้</translation>
+<translation id="6211386937064921208">แสดงตัวอย่างหน้าเว็บนี้</translation>
 <translation id="6218096829563201111">ค้นหาผลิตภัณฑ์ที่คล้ายกัน <ph name="BEGIN_NEW" />ใหม่<ph name="END_NEW" /></translation>
 <translation id="6221633008163990886">ปลดล็อกเพื่อส่งออกรหัสผ่าน</translation>
 <translation id="6232535412751077445">การเปิดใช้ "ไม่ติดตาม" หมายความว่าจะมีการรวมคำขอหนึ่งไว้กับการเข้าชมของคุณ ผลกระทบทั้งหมดขึ้นอยู่กับว่าเว็บไซต์ตอบสนองต่อคำขอนั้นไหม และวิธีตีความคำขอ
@@ -762,6 +769,7 @@
 <translation id="6590471736817333463">ประหยัดอินเทอร์เน็ตได้ถึง 60%</translation>
 <translation id="6590680911007613645">ตรวจสอบว่ารหัสผ่านที่คุณจะบันทึกตรงกับรหัสผ่านสำหรับ <ph name="SITE" /></translation>
 <translation id="6593061639179217415">เว็บไซต์เวอร์ชันเดสก์ท็อป</translation>
+<translation id="6595046016124923392">ระบบจะส่งรูปภาพมายัง Google เพื่อปรับปรุงคำอธิบายสำหรับคุณ</translation>
 <translation id="6597891566292541626">จัดตำแหน่งคิวอาร์โค้ด/บาร์โค้ดให้อยู่ในกรอบนี้</translation>
 <translation id="6600954340915313787">คัดลอกไปยัง Chrome แล้ว</translation>
 <translation id="661266467055912436">ปรับปรุงความปลอดภัยให้คุณและทุกคนที่ใช้อินเทอร์เน็ต</translation>
@@ -806,6 +814,9 @@
 <translation id="6900532703269623216">การปกป้องที่ปรับปรุงแล้ว</translation>
 <translation id="6903907808598579934">เปิดการซิงค์</translation>
 <translation id="6929699136511445623">เปิดใช้การซิงค์ระบบ Android</translation>
+<translation id="6941901516114974832">เว็บไซต์ที่คุณเข้าชม นายจ้างหรือโรงเรียน และผู้ให้บริการอินเทอร์เน็ต<ph name="BEGIN_BOLD1" />อาจยังคงเห็น<ph name="END_BOLD1" />กิจกรรมของคุณในโหมดไม่ระบุตัวตน
+
+ระบบจะล้างข้อมูลจากเซสชันที่ไม่ระบุตัวตนออกจาก Chrome ต่อเมื่อคุณ<ph name="BEGIN_BOLD2" />ปิดแท็บที่ไม่ระบุตัวตนทุกแท็บ<ph name="END_BOLD2" />เท่านั้น</translation>
 <translation id="6942665639005891494">เปลี่ยนตำแหน่งเริ่มต้นในการดาวน์โหลดได้ทุกเมื่อโดยใช้ตัวเลือกเมนู "การตั้งค่า"</translation>
 <translation id="6945221475159498467">เลือก</translation>
 <translation id="6955535239952325894">การตั้งค่านี้ปิดใช้อยู่ในเบราว์เซอร์ที่มีการจัดการ</translation>
@@ -820,6 +831,7 @@
 <translation id="702463548815491781">แนะนำให้ใช้เมื่อ TalkBack หรือการเข้าถึงด้วยสวิตช์เปิดอยู่</translation>
 <translation id="7029809446516969842">รหัสผ่าน</translation>
 <translation id="703523980599857277">เปลี่ยนหน้าแรก</translation>
+<translation id="7054588988317389591">รับคำอธิบายรูปภาพใช่ไหม</translation>
 <translation id="7055152154916055070">การเปลี่ยนเส้นทางถูกบล็อก</translation>
 <translation id="7063006564040364415">ไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์การซิงค์</translation>
 <translation id="7071521146534760487">จัดการบัญชี</translation>
@@ -851,6 +863,7 @@
 <translation id="729975465115245577">อุปกรณ์ของคุณไม่มีแอปไว้จัดเก็บไฟล์รหัสผ่าน</translation>
 <translation id="7302081693174882195">รายละเอียด: จัดเรียงตามปริมาณเน็ตมือถือที่ประหยัดได้</translation>
 <translation id="7304873321153398381">ออฟไลน์ Chrome ตรวจสอบรหัสผ่านของคุณไม่ได้</translation>
+<translation id="7313188324932846546">แตะเพื่อตั้งค่าการซิงค์</translation>
 <translation id="7328017930301109123">ในโหมด Lite เบราว์เซอร์ Chrome จะโหลดหน้าเว็บได้เร็วขึ้นและใช้เน็ตน้อยลงสูงสุดถึง 60 เปอร์เซ็นต์</translation>
 <translation id="7333031090786104871">ยังเพิ่มไซต์ก่อนหน้าอยู่</translation>
 <translation id="7340958967809483333">ตัวเลือกสำหรับ Discover</translation>
@@ -1042,6 +1055,7 @@
 <translation id="8636825310635137004">เปิดการซิงค์เพื่อรับแท็บจากอุปกรณ์เครื่องอื่นๆ ของคุณ</translation>
 <translation id="8641930654639604085">พยายามบล็อกไซต์สำหรับผู้ใหญ่</translation>
 <translation id="8655129584991699539">คุณล้างข้อมูลได้ในการตั้งค่า Chrome</translation>
+<translation id="8656747343598256512">ลงชื่อเข้าใช้เว็บไซต์นี้ด้วยบัญชี Google คุณเปิดการซิงค์ภายหลังได้</translation>
 <translation id="8659579665266920523">วิธีค้นหาด้วย Chrome</translation>
 <translation id="8662811608048051533">นำคุณออกจากระบบของเว็บไซต์ส่วนใหญ่</translation>
 <translation id="8664979001105139458">มีชื่อไฟล์นี้อยู่แล้ว</translation>
@@ -1061,6 +1075,7 @@
 <translation id="8840953339110955557">หน้าเว็บนี้อาจแตกต่างไปจากเวอร์ชันที่ออนไลน์</translation>
 <translation id="8853345339104747198"><ph name="TAB_TITLE" /> เป็นแท็บ</translation>
 <translation id="8854223127042600341">ดูไฟล์ออฟไลน์</translation>
+<translation id="8856607253650333758">รับคำอธิบาย</translation>
 <translation id="8873817150012960745">แตะที่นี่เพื่อเริ่มต้นใช้งาน</translation>
 <translation id="889338405075704026">ไปที่การตั้งค่า Chrome</translation>
 <translation id="8898822736010347272">ส่ง URL ของหน้าบางหน้าที่คุณเข้าชม ข้อมูลระบบที่จำกัด และเนื้อหาบางส่วนของหน้าไปให้ Google เพื่อช่วยตรวจหาภัยคุกคามใหม่ๆ และปกป้องทุกคนที่ใช้อินเทอร์เน็ต</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ur.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ur.xtb
index 6a57353..98b7096 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ur.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ur.xtb
@@ -667,6 +667,7 @@
 <translation id="5958275228015807058">اپنی فائلیں اور صفحات ڈاؤن لوڈز میں تلاش کریں</translation>
 <translation id="5962718611393537961">سکیڑنے کیلئے تھپتھپائیں</translation>
 <translation id="5964805880140440652">‏اس صفحہ کا کسی دوسرے آلہ پر اشتراک کرنے کے لیے Chrome کی ترتیبات میں 'سِنک کرنا' آن کریں</translation>
+<translation id="5964869237734432770">تصویری تفصیلات کو روکیں</translation>
 <translation id="5979084224081478209">پاس ورڈز چیک کریں</translation>
 <translation id="6000066717592683814">‏Google کو رکھیں</translation>
 <translation id="6005538289190791541">تجویز کردہ پاس ورڈ</translation>
@@ -694,6 +695,7 @@
 <translation id="6157392216611456285">‫<ph name="APP_NAME" /> منتخب کریں</translation>
 <translation id="6159335304067198720"><ph name="PERCENT" /> ڈیٹا کی سیونگز</translation>
 <translation id="6186394685773237175">کوئی متاثرہ پاس ورڈ نہیں ملا</translation>
+<translation id="6192907950379606605">تصویری تفصیلات حاصل کریں</translation>
 <translation id="6206830853671714236">ڈاؤن لوڈ کرنے کا وقت منتخب کریں</translation>
 <translation id="6210748933810148297"><ph name="EMAIL" /> نہیں؟</translation>
 <translation id="6218096829563201111">ملتے جلتے پروڈکٹس تلاش کریں <ph name="BEGIN_NEW" />نیا<ph name="END_NEW" /></translation>
@@ -762,6 +764,7 @@
 <translation id="6590471736817333463">60 فیصد تک ڈیٹا کی بچت کریں</translation>
 <translation id="6590680911007613645">اس بات کو یقینی بنائیں کہ آپ جو پاس ورڈ محفوظ کر رہے ہیں وہ آپ کے <ph name="SITE" /> کے پاس ورڈ سے مماثل ہے</translation>
 <translation id="6593061639179217415">ڈیسک ٹاپ سائٹ</translation>
+<translation id="6595046016124923392">‏آپ کے لئے تفصیلات میں بہتری کرنے کیلئے Google کو تصاویر بھیجی گئ ہیں۔</translation>
 <translation id="6597891566292541626">‏QR/بار کوڈ کو اس فریم میں رکھیں۔</translation>
 <translation id="6600954340915313787">‏Chrome پر کاپی کر دیا گیا</translation>
 <translation id="661266467055912436">آپ کے لیے اور ویب پر ہر کسی کے لیے سیکیورٹی کو بہتر بناتا ہے۔</translation>
@@ -820,6 +823,7 @@
 <translation id="702463548815491781">‏TalkBack یا سوئچ رسائی آن ہونے پر تجویز کردہ</translation>
 <translation id="7029809446516969842">پاس ورڈز</translation>
 <translation id="703523980599857277">ہوم صفحہ تبدیل کریں</translation>
+<translation id="7054588988317389591">تصویری تفصیلات حاصل کریں؟</translation>
 <translation id="7055152154916055070">ری ڈائریکٹ مسدود کیا گیا:</translation>
 <translation id="7063006564040364415">مطابقت پذیری سرور سے منسلک نہیں کیا جا سکا۔</translation>
 <translation id="7071521146534760487">اکاؤنٹ کا نظم کریں</translation>
@@ -851,6 +855,7 @@
 <translation id="729975465115245577">آپ کے آلہ میں پاسورڈز کی فائل کو اسٹور کرنے والی ایپ نہیں ہے۔</translation>
 <translation id="7302081693174882195">تفصیلات: محفوظ کردہ ڈیٹا کی مقدار کے لحاظ سے ترتیب دیا گیا</translation>
 <translation id="7304873321153398381">‏آف لائن۔ Chrome آپ کے پاس ورڈز چیک نہیں کر سکتا ہے۔</translation>
+<translation id="7313188324932846546">مطابقت پذیری سیٹ اپ کرنے کے لیے تھپتھپائیں</translation>
 <translation id="7328017930301109123">‏لائٹ موڈ میں، Chrome صفحات کو زیادہ تیزی سے لوڈ کرتا ہے اور60 فیصد تک کم ڈیٹا استعمال کرتا ہے۔</translation>
 <translation id="7333031090786104871">ابھی بھی سابقہ سائٹ شامل کی جا رہی ہے</translation>
 <translation id="7340958967809483333">‏Discover کے لیے اختیارات</translation>
@@ -1042,6 +1047,7 @@
 <translation id="8636825310635137004">اپنے دیگر آلات سے اپنے ٹیبز حاصل کرنے کیلئے، مطابقت پذیری کو آن کریں۔</translation>
 <translation id="8641930654639604085">بالغ کی سائٹس کو مسدود کرنے کی کوشش کریں</translation>
 <translation id="8655129584991699539">‏آپ Chrome ترتیبات میں ڈیٹا صاف کر سکتے ہیں</translation>
+<translation id="8656747343598256512">‏اپنے Google اکاؤنٹ سے اس سائٹ اور Chrome میں سائن ان کریں۔ آپ بعد میں مطابقت پذیری کو آن کر سکتے ہیں۔</translation>
 <translation id="8659579665266920523">‏Chrome سے تلاش کرنے کا طریقہ</translation>
 <translation id="8662811608048051533">اکثر سائٹس سے آپ کو سائن آؤٹ کرتا ہے۔</translation>
 <translation id="8664979001105139458">فائل کا نام پہلے سے موجود ہے</translation>
@@ -1061,6 +1067,7 @@
 <translation id="8840953339110955557">یہ صفحہ آن لائن ورژن سے مختلف ہو سکتا ہے۔</translation>
 <translation id="8853345339104747198"><ph name="TAB_TITLE" />، ٹیب</translation>
 <translation id="8854223127042600341">اپنی آف لائن فائلز دیکھیں</translation>
+<translation id="8856607253650333758">تفصیلات حاصل کریں</translation>
 <translation id="8873817150012960745">شروع کرنے کیلئے یہاں تھپتھپائیں</translation>
 <translation id="889338405075704026">‏Chrome کی ترتیبات میں جائیں</translation>
 <translation id="8898822736010347272">‏آپ کے ملاحظہ کئے جانے والے چند صفحات کے URLs، سسٹم کی محدود معلومات اور صفحے کا کچھ مواد Google کو بھیجتا ہے تاکہ نئے خطرات کا پتا لگانے اور ویب پر موجود سبھی کی حفاظت میں مدد مل سکے۔</translation>
diff --git a/chrome/browser/ui/app_list/app_service/app_service_app_model_builder_unittest.cc b/chrome/browser/ui/app_list/app_service/app_service_app_model_builder_unittest.cc
index 38021d5..a16134e 100644
--- a/chrome/browser/ui/app_list/app_service/app_service_app_model_builder_unittest.cc
+++ b/chrome/browser/ui/app_list/app_service/app_service_app_model_builder_unittest.cc
@@ -18,6 +18,8 @@
 #include "chrome/browser/apps/app_service/app_service_proxy.h"
 #include "chrome/browser/apps/app_service/app_service_proxy_factory.h"
 #include "chrome/browser/apps/app_service/app_service_test.h"
+#include "chrome/browser/chromeos/borealis/borealis_features.h"
+#include "chrome/browser/chromeos/borealis/borealis_features_factory.h"
 #include "chrome/browser/chromeos/borealis/borealis_util.h"
 #include "chrome/browser/chromeos/crostini/crostini_test_helper.h"
 #include "chrome/browser/chromeos/crostini/crostini_util.h"
@@ -1080,7 +1082,9 @@
 };
 
 TEST_P(BorealisAppTest, BorealisDisabled) {
-  EXPECT_FALSE(borealis::IsBorealisAllowed());
+  EXPECT_FALSE(
+      borealis::BorealisFeaturesFactory::GetForProfile(testing_profile_.get())
+          ->IsAllowed());
   EXPECT_EQ(std::vector<std::string>{}, GetModelContent(model_updater_.get()));
 }
 
@@ -1091,7 +1095,9 @@
   // Borealis was enabled.
   CreateBuilder(/*guest_mode=*/false);
 
-  EXPECT_TRUE(borealis::IsBorealisAllowed());
+  EXPECT_TRUE(
+      borealis::BorealisFeaturesFactory::GetForProfile(testing_profile_.get())
+          ->IsAllowed());
   EXPECT_EQ(
       std::vector<std::string>{l10n_util::GetStringUTF8(IDS_BOREALIS_APP_NAME)},
       GetModelContent(model_updater_.get()));
diff --git a/chrome/browser/ui/ash/ambient/ambient_client_impl_unittest.cc b/chrome/browser/ui/ash/ambient/ambient_client_impl_unittest.cc
index 348ba85..7cf4213 100644
--- a/chrome/browser/ui/ash/ambient/ambient_client_impl_unittest.cc
+++ b/chrome/browser/ui/ash/ambient/ambient_client_impl_unittest.cc
@@ -32,7 +32,6 @@
         chromeos::features::kAmbientModeFeature);
     // Needed by ash.
     ambient_client_ = std::make_unique<AmbientClientImpl>();
-    AshTestBase::SetUp();
 
     ASSERT_TRUE(data_dir_.CreateUniqueTempDir());
     profile_manager_ = std::make_unique<TestingProfileManager>(
@@ -48,6 +47,8 @@
         std::make_unique<IdentityTestEnvironmentProfileAdaptor>(profile_);
     user_manager_enabler_ = std::make_unique<user_manager::ScopedUserManager>(
         std::make_unique<chromeos::FakeChromeUserManager>());
+
+    AshTestBase::SetUp();
   }
 
   void TearDown() override {
diff --git a/chrome/browser/ui/ash/holding_space/holding_space_client_impl.cc b/chrome/browser/ui/ash/holding_space/holding_space_client_impl.cc
index 1c10e3a..2e4e099 100644
--- a/chrome/browser/ui/ash/holding_space/holding_space_client_impl.cc
+++ b/chrome/browser/ui/ash/holding_space/holding_space_client_impl.cc
@@ -35,6 +35,29 @@
   return HoldingSpaceKeyedServiceFactory::GetInstance()->GetService(profile);
 }
 
+// Returns file info for the specified `file_path` or `base::nullopt` in the
+// event that file info cannot be obtained.
+using GetFileInfoCallback =
+    base::OnceCallback<void(const base::Optional<base::File::Info>&)>;
+void GetFileInfo(Profile* profile,
+                 const base::FilePath& file_path,
+                 GetFileInfoCallback callback) {
+  scoped_refptr<storage::FileSystemContext> file_system_context =
+      file_manager::util::GetFileSystemContextForExtensionId(
+          profile, file_manager::kFileManagerAppId);
+  file_manager::util::GetMetadataForPath(
+      file_system_context, file_path,
+      storage::FileSystemOperation::GET_METADATA_FIELD_IS_DIRECTORY,
+      base::BindOnce(
+          [](GetFileInfoCallback callback, base::File::Error error,
+             const base::File::Info& info) {
+            std::move(callback).Run(error == base::File::FILE_OK
+                                        ? base::make_optional<>(info)
+                                        : base::nullopt);
+          },
+          std::move(callback)));
+}
+
 }  // namespace
 
 // HoldingSpaceClientImpl ------------------------------------------------------
@@ -123,16 +146,34 @@
       barrier_closure.Run();
       return;
     }
-    file_manager::util::OpenItem(
-        profile_, item->file_path(), platform_util::OPEN_FILE,
-        base::BindOnce(
-            [](base::RepeatingClosure barrier_closure, bool* complete_success,
-               platform_util::OpenOperationResult result) {
-              const bool success = result == platform_util::OPEN_SUCCEEDED;
-              *complete_success &= success;
-              barrier_closure.Run();
-            },
-            barrier_closure, complete_success_ptr));
+    GetFileInfo(profile_, item->file_path(),
+                base::BindOnce(
+                    [](const base::WeakPtr<HoldingSpaceClientImpl>& weak_ptr,
+                       base::RepeatingClosure barrier_closure,
+                       bool* complete_success, const base::FilePath& file_path,
+                       const base::Optional<base::File::Info>& info) {
+                      if (!weak_ptr || !info.has_value()) {
+                        *complete_success = false;
+                        barrier_closure.Run();
+                        return;
+                      }
+                      file_manager::util::OpenItem(
+                          weak_ptr->profile_, file_path,
+                          info.value().is_directory ? platform_util::OPEN_FOLDER
+                                                    : platform_util::OPEN_FILE,
+                          base::BindOnce(
+                              [](base::RepeatingClosure barrier_closure,
+                                 bool* complete_success,
+                                 platform_util::OpenOperationResult result) {
+                                const bool success =
+                                    result == platform_util::OPEN_SUCCEEDED;
+                                *complete_success &= success;
+                                barrier_closure.Run();
+                              },
+                              barrier_closure, complete_success));
+                    },
+                    weak_factory_.GetWeakPtr(), barrier_closure,
+                    complete_success_ptr, item->file_path()));
   }
 }
 
diff --git a/chrome/browser/ui/ash/holding_space/holding_space_client_impl.h b/chrome/browser/ui/ash/holding_space/holding_space_client_impl.h
index 73951ad..10153ae 100644
--- a/chrome/browser/ui/ash/holding_space/holding_space_client_impl.h
+++ b/chrome/browser/ui/ash/holding_space/holding_space_client_impl.h
@@ -9,6 +9,7 @@
 
 #include "ash/public/cpp/holding_space/holding_space_client.h"
 #include "base/callback.h"
+#include "base/memory/weak_ptr.h"
 
 class Profile;
 
@@ -35,6 +36,8 @@
 
  private:
   Profile* const profile_;
+
+  base::WeakPtrFactory<HoldingSpaceClientImpl> weak_factory_{this};
 };
 
 }  // namespace ash
diff --git a/chrome/browser/ui/ash/media_notification_provider_impl.h b/chrome/browser/ui/ash/media_notification_provider_impl.h
index 6cd72b1..bd324f4 100644
--- a/chrome/browser/ui/ash/media_notification_provider_impl.h
+++ b/chrome/browser/ui/ash/media_notification_provider_impl.h
@@ -45,6 +45,7 @@
   void HideMediaSession(const std::string& id) override;
   std::unique_ptr<OverlayMediaNotification> PopOut(const std::string& id,
                                                    gfx::Rect bounds) override;
+  void HideMediaDialog() override {}
 
   // MediaNotificationServiceObserver implementations.
   void OnNotificationListChanged() override;
diff --git a/chrome/browser/ui/chrome_pages.cc b/chrome/browser/ui/chrome_pages.cc
index c988ba9c..1175bd6 100644
--- a/chrome/browser/ui/chrome_pages.cc
+++ b/chrome/browser/ui/chrome_pages.cc
@@ -468,6 +468,12 @@
   ShowSettingsSubPage(browser, kPasswordCheckSubPage);
 }
 
+void ShowSafeBrowsingEnhancedProtection(Browser* browser) {
+  base::RecordAction(
+      UserMetricsAction("Options_ShowSafeBrowsingEnhancedProtection"));
+  ShowSettingsSubPage(browser, kSafeBrowsingEnhancedProtectionSubPage);
+}
+
 void ShowImportDialog(Browser* browser) {
   base::RecordAction(UserMetricsAction("Import_ShowDlg"));
   ShowSettingsSubPage(browser, kImportDataSubPage);
diff --git a/chrome/browser/ui/chrome_pages.h b/chrome/browser/ui/chrome_pages.h
index 7950060b..3a2f6da7 100644
--- a/chrome/browser/ui/chrome_pages.h
+++ b/chrome/browser/ui/chrome_pages.h
@@ -134,6 +134,7 @@
 void ShowClearBrowsingDataDialog(Browser* browser);
 void ShowPasswordManager(Browser* browser);
 void ShowPasswordCheck(Browser* browser);
+void ShowSafeBrowsingEnhancedProtection(Browser* browser);
 void ShowImportDialog(Browser* browser);
 void ShowAboutChrome(Browser* browser);
 void ShowSearchEngineSettings(Browser* browser);
diff --git a/chrome/browser/ui/global_media_controls/media_dialog_delegate.h b/chrome/browser/ui/global_media_controls/media_dialog_delegate.h
index 7ba6444..d762eec1 100644
--- a/chrome/browser/ui/global_media_controls/media_dialog_delegate.h
+++ b/chrome/browser/ui/global_media_controls/media_dialog_delegate.h
@@ -37,6 +37,8 @@
       const std::string& id,
       gfx::Rect bounds) = 0;
 
+  virtual void HideMediaDialog() = 0;
+
  protected:
   virtual ~MediaDialogDelegate();
 };
diff --git a/chrome/browser/ui/global_media_controls/media_notification_service.cc b/chrome/browser/ui/global_media_controls/media_notification_service.cc
index 408d6f3..e7e5c3a 100644
--- a/chrome/browser/ui/global_media_controls/media_notification_service.cc
+++ b/chrome/browser/ui/global_media_controls/media_notification_service.cc
@@ -185,8 +185,13 @@
 
 void MediaNotificationService::Session::OnMediaRoutesChanged(
     const std::vector<media_router::MediaRoute>& routes) {
-  if (!routes.empty())
+  // Closes the media dialog after a cast session starts.
+  if (!routes.empty()) {
+    if (owner_->dialog_delegate_) {
+      owner_->dialog_delegate_->HideMediaDialog();
+    }
     item_->Dismiss();
+  }
 }
 
 void MediaNotificationService::Session::SetController(
@@ -254,6 +259,13 @@
       std::move(callback));
 }
 
+void MediaNotificationService::Session::SetPresentationManagerForTesting(
+    base::WeakPtr<media_router::WebContentsPresentationManager>
+        presentation_manager) {
+  presentation_manager_ = presentation_manager;
+  presentation_manager_->AddObserver(this);
+}
+
 // static
 void MediaNotificationService::Session::RecordDismissReason(
     GlobalMediaControlsDismissReason reason) {
@@ -472,11 +484,6 @@
   dialog_delegate_->HideMediaSession(id);
 }
 
-scoped_refptr<base::SequencedTaskRunner>
-MediaNotificationService::GetTaskRunner() const {
-  return nullptr;
-}
-
 void MediaNotificationService::RemoveItem(const std::string& id) {
   active_controllable_session_ids_.erase(id);
   frozen_session_ids_.erase(id);
@@ -488,7 +495,7 @@
     dragged_out_session_ids_.erase(id);
   }
 
-  // Copy |id| to avoid a dangling reference after the session is deleted.  This
+  // Copy |id| to avoid a dangling reference after the session is deleted. This
   // happens when |id| refers to a string owned by the session being removed.
   const auto id_copy{id};
 
@@ -497,6 +504,11 @@
   OnNotificationChanged(&id_copy);
 }
 
+scoped_refptr<base::SequencedTaskRunner>
+MediaNotificationService::GetTaskRunner() const {
+  return nullptr;
+}
+
 void MediaNotificationService::LogMediaSessionActionButtonPressed(
     const std::string& id,
     media_session::mojom::MediaSessionAction action) {
@@ -617,8 +629,10 @@
 void MediaNotificationService::AddSupplementalNotification(
     const std::string& id,
     content::WebContents* web_contents) {
+  DCHECK(web_contents);
   supplemental_notifications_.emplace(id, web_contents);
-  ShowNotification(id);
+  if (!HasSessionForWebContents(web_contents))
+    ShowNotification(id);
 }
 
 void MediaNotificationService::OnOverlayNotificationClosed(
@@ -860,7 +874,7 @@
   for (auto& observer : observers_)
     observer.OnNotificationListChanged();
 
-  // Avoid re-examining the supplemental notifications as a side-effect or
+  // Avoid re-examining the supplemental notifications as a side-effect of
   // showing or hiding a supplemental notification.
   if (!changed_notification_id ||
       base::Contains(supplemental_notifications_, *changed_notification_id))
@@ -868,20 +882,23 @@
 
   // Show or hide supplemental notifications as necessary.
   for (const auto& pair : supplemental_notifications_) {
-    auto* web_contents = pair.second;
-    const bool should_hide = std::any_of(
-        sessions_.begin(), sessions_.end(),
-        [web_contents, this](const auto& pair) {
-          return pair.second.web_contents() == web_contents &&
-                 base::Contains(active_controllable_session_ids_, pair.first);
-        });
-
     // If there is an active session associated with the same web contents as
     // this supplemental notification, hide it; if not, show it.
-    if (should_hide) {
+    if (HasSessionForWebContents(pair.second)) {
       HideNotification(pair.first);
     } else {
       ShowNotification(pair.first);
     }
   }
 }
+
+bool MediaNotificationService::HasSessionForWebContents(
+    content::WebContents* web_contents) const {
+  DCHECK(web_contents);
+  return std::any_of(sessions_.begin(), sessions_.end(),
+                     [web_contents, this](const auto& pair) {
+                       return pair.second.web_contents() == web_contents &&
+                              base::Contains(active_controllable_session_ids_,
+                                             pair.first);
+                     });
+}
diff --git a/chrome/browser/ui/global_media_controls/media_notification_service.h b/chrome/browser/ui/global_media_controls/media_notification_service.h
index b07ce3b..5b6df9e 100644
--- a/chrome/browser/ui/global_media_controls/media_notification_service.h
+++ b/chrome/browser/ui/global_media_controls/media_notification_service.h
@@ -236,6 +236,10 @@
     RegisterIsAudioDeviceSwitchingSupportedCallback(
         base::RepeatingCallback<void(bool)> callback);
 
+    void SetPresentationManagerForTesting(
+        base::WeakPtr<media_router::WebContentsPresentationManager>
+            presentation_manager);
+
    private:
     static void RecordDismissReason(GlobalMediaControlsDismissReason reason);
 
@@ -295,12 +299,6 @@
   base::WeakPtr<media_message_center::MediaNotificationItem>
   GetNotificationItem(const std::string& id);
 
-  // Called after changing anything about a notification to notify any observers
-  // and update the visibility of supplemental notifications.  If the change is
-  // associated with a particular notification ID, that ID should be passed as
-  // the argument, otherwise the argument should be nullptr.
-  void OnNotificationChanged(const std::string* changed_notification_id);
-
   // Looks up a Session object by its ID.  Returns null if not found.
   Session* GetSession(const std::string& id);
 
@@ -311,6 +309,14 @@
   base::WeakPtr<media_message_center::MediaNotificationItem>
   GetNonSessionNotificationItem(const std::string& id);
 
+  // Called after changing anything about a notification to notify any observers
+  // and update the visibility of supplemental notifications.  If the change is
+  // associated with a particular notification ID, that ID should be passed as
+  // the argument, otherwise the argument should be nullptr.
+  void OnNotificationChanged(const std::string* changed_notification_id);
+
+  bool HasSessionForWebContents(content::WebContents* web_contents) const;
+
   MediaDialogDelegate* dialog_delegate_ = nullptr;
 
   OverlayMediaNotificationsManagerImpl overlay_media_notifications_manager_;
diff --git a/chrome/browser/ui/global_media_controls/media_notification_service_unittest.cc b/chrome/browser/ui/global_media_controls/media_notification_service_unittest.cc
index 14d3e50c..73b626f 100644
--- a/chrome/browser/ui/global_media_controls/media_notification_service_unittest.cc
+++ b/chrome/browser/ui/global_media_controls/media_notification_service_unittest.cc
@@ -91,6 +91,7 @@
   MOCK_METHOD2(PopOutProxy,
                OverlayMediaNotification*(const std::string& id,
                                          gfx::Rect bounds));
+  void HideMediaDialog() override { Close(); }
 
  private:
   MediaNotificationService* service_;
@@ -125,6 +126,43 @@
   OverlayMediaNotificationsManager* manager_ = nullptr;
 };
 
+class MockWebContentsPresentationManager
+    : public media_router::WebContentsPresentationManager {
+ public:
+  void NotifyMediaRoutesChanged(
+      const std::vector<media_router::MediaRoute>& routes) {
+    for (auto& observer : observers_) {
+      observer.OnMediaRoutesChanged(routes);
+    }
+  }
+
+  void AddObserver(media_router::WebContentsPresentationManager::Observer*
+                       observer) override {
+    observers_.AddObserver(observer);
+  }
+
+  void RemoveObserver(media_router::WebContentsPresentationManager::Observer*
+                          observer) override {
+    observers_.RemoveObserver(observer);
+  }
+
+  MOCK_CONST_METHOD0(HasDefaultPresentationRequest, bool());
+  MOCK_CONST_METHOD0(GetDefaultPresentationRequest,
+                     const content::PresentationRequest&());
+  MOCK_METHOD3(OnPresentationResponse,
+               void(const content::PresentationRequest&,
+                    media_router::mojom::RoutePresentationConnectionPtr,
+                    const media_router::RouteRequestResult&));
+
+  base::WeakPtr<WebContentsPresentationManager> GetWeakPtr() override {
+    return weak_factory_.GetWeakPtr();
+  }
+
+ private:
+  base::ObserverList<media_router::WebContentsPresentationManager::Observer>
+      observers_;
+  base::WeakPtrFactory<MockWebContentsPresentationManager> weak_factory_{this};
+};
 }  // anonymous namespace
 
 class MediaNotificationServiceTest : public testing::Test {
@@ -345,12 +383,19 @@
     service_->cast_notification_provider_->OnRoutesUpdated(routes, {});
   }
 
+  MediaNotificationService::Session* GetSession(
+      const base::UnguessableToken& id) {
+    return service_->GetSession(id.ToString());
+  }
+
   MockMediaNotificationServiceObserver& observer() { return observer_; }
 
   MediaNotificationService* service() { return service_.get(); }
 
- private:
+ protected:
   content::BrowserTaskEnvironment task_environment_;
+
+ private:
   MockMediaNotificationServiceObserver observer_;
   std::unique_ptr<MediaNotificationService> service_;
   base::HistogramTester histogram_tester_;
@@ -677,8 +722,33 @@
   testing::Mock::VerifyAndClearExpectations(&observer());
 }
 
-// Regression test for https://crbug.com/1015903: we could end up in a situation
-// where the toolbar icon was disabled indefinitely.
+TEST_F(MediaNotificationServiceCastTest,
+       HideNotification_NewCastSessionStarted) {
+  // If a new cast session starts, hide the media dialog.
+  base::UnguessableToken id = SimulatePlayingControllableMedia();
+  MockMediaDialogDelegate dialog_delegate;
+  SimulateDialogOpened(&dialog_delegate);
+  EXPECT_TRUE(HasOpenDialog());
+
+  auto presentation_manager =
+      std::make_unique<MockWebContentsPresentationManager>();
+  media_router::MediaRoute media_route("id",
+                                       media_router::MediaSource("source_id"),
+                                       "sink_id", "description", true, true);
+  media_route.set_controller_type(media_router::RouteControllerType::kGeneric);
+  auto* session = GetSession(id);
+  session->SetPresentationManagerForTesting(
+      presentation_manager.get()->GetWeakPtr());
+
+  EXPECT_CALL(observer(), OnMediaDialogClosed());
+  presentation_manager->NotifyMediaRoutesChanged({media_route});
+  EXPECT_FALSE(HasOpenDialog());
+
+  task_environment_.RunUntilIdle();
+}
+
+// Regression test for https://crbug.com/1015903: we could end up in a
+// situation where the toolbar icon was disabled indefinitely.
 TEST_F(MediaNotificationServiceTest, LoseGainLoseDoesNotCauseRaceCondition) {
   // First, start an active session and include artwork.
   base::UnguessableToken id = SimulatePlayingControllableMedia();
@@ -803,7 +873,8 @@
   // Then, play the media. The notification should become active.
   SimulatePlaybackStateChanged(id, true);
 
-  // We should have recorded an interaction even though the timer has finished.
+  // We should have recorded an interaction even though the timer has
+  // finished.
   ExpectHistogramInteractionDelayAfterPause(base::TimeDelta::FromMinutes(70),
                                             1);
   EXPECT_TRUE(HasActiveNotifications());
@@ -831,13 +902,15 @@
   // Then, seek the media. The notification should become active.
   SimulateMediaSeeked(id);
 
-  // We should have recorded an interaction even though the timer has finished.
+  // We should have recorded an interaction even though the timer has
+  // finished.
   ExpectHistogramInteractionDelayAfterPause(base::TimeDelta::FromMinutes(70),
                                             1);
   EXPECT_TRUE(HasActiveNotifications());
   EXPECT_FALSE(IsSessionInactive(id));
 
-  // If we don't interact again, the notification should become inactive again.
+  // If we don't interact again, the notification should become inactive
+  // again.
   AdvanceClockMinutes(70);
   EXPECT_FALSE(HasActiveNotifications());
   EXPECT_TRUE(IsSessionInactive(id));
@@ -856,8 +929,8 @@
   AdvanceClockMinutes(59);
   EXPECT_TRUE(HasActiveNotifications());
 
-  // If we start playing again, we should not hide the notification, even after
-  // an hour.
+  // If we start playing again, we should not hide the notification, even
+  // after an hour.
   ExpectHistogramInteractionDelayAfterPause(base::TimeDelta::FromMinutes(59),
                                             0);
   SimulatePlaybackStateChanged(id, true);
@@ -894,8 +967,8 @@
   AdvanceClockMinutes(50);
   EXPECT_TRUE(HasActiveNotifications());
 
-  // If the user seeks the media before an hour is up, it should reset the hide
-  // timer.
+  // If the user seeks the media before an hour is up, it should reset the
+  // hide timer.
   ExpectHistogramInteractionDelayAfterPause(base::TimeDelta::FromMinutes(50),
                                             0);
   SimulateMediaSeeked(id);
@@ -1021,12 +1094,13 @@
   SimulatePlaybackStateChanged(id, false);
   EXPECT_TRUE(HasActiveNotifications());
 
-  // After (kTimerInMinutes-1) minutes, the notification should still be there.
+  // After (kTimerInMinutes-1) minutes, the notification should still be
+  // there.
   AdvanceClockMinutes(kTimerInMinutes - 1);
   EXPECT_TRUE(HasActiveNotifications());
 
-  // If we start playing again, we should not hide the notification, even after
-  // kTimerInMinutes.
+  // If we start playing again, we should not hide the notification, even
+  // after kTimerInMinutes.
   ExpectHistogramInteractionDelayAfterPause(
       base::TimeDelta::FromMinutes(kTimerInMinutes - 1), 0);
   SimulatePlaybackStateChanged(id, true);
diff --git a/chrome/browser/ui/global_media_controls/media_toolbar_button_controller_unittest.cc b/chrome/browser/ui/global_media_controls/media_toolbar_button_controller_unittest.cc
index a36ad8c..3145a23 100644
--- a/chrome/browser/ui/global_media_controls/media_toolbar_button_controller_unittest.cc
+++ b/chrome/browser/ui/global_media_controls/media_toolbar_button_controller_unittest.cc
@@ -73,6 +73,7 @@
   MOCK_METHOD2(PopOut,
                std::unique_ptr<OverlayMediaNotification>(const std::string& id,
                                                          gfx::Rect bounds));
+  MOCK_METHOD0(HideMediaDialog, void());
 
  private:
   MediaNotificationService* service_;
diff --git a/chrome/browser/ui/global_media_controls/presentation_request_notification_provider.cc b/chrome/browser/ui/global_media_controls/presentation_request_notification_provider.cc
index cbc6692..033de3a 100644
--- a/chrome/browser/ui/global_media_controls/presentation_request_notification_provider.cc
+++ b/chrome/browser/ui/global_media_controls/presentation_request_notification_provider.cc
@@ -16,6 +16,8 @@
 #include "components/media_router/common/providers/cast/cast_media_source.h"
 #include "content/public/browser/browser_task_traits.h"
 #include "content/public/browser/browser_thread.h"
+#include "content/public/browser/render_frame_host.h"
+#include "content/public/browser/web_contents.h"
 
 namespace {
 
@@ -103,8 +105,8 @@
   // request.
   if (presentation_manager->HasDefaultPresentationRequest() &&
       notification_service_->HasOpenDialog()) {
-    CreateItemForPresentationRequest(
-        presentation_manager->GetDefaultPresentationRequest(), nullptr);
+    OnDefaultPresentationChanged(
+        &presentation_manager->GetDefaultPresentationRequest());
   }
 }
 
@@ -138,5 +140,10 @@
   // This may replace an existing item, which is the right thing to do if we've
   // reached this point.
   item_.emplace(notification_service_, request, std::move(context));
-  notification_service_->ShowNotification(item_->id());
+
+  auto* rfh = content::RenderFrameHost::FromID(request.render_frame_host_id);
+  DCHECK(rfh);
+  auto* web_contents = content::WebContents::FromRenderFrameHost(rfh);
+  DCHECK(web_contents);
+  notification_service_->AddSupplementalNotification(item_->id(), web_contents);
 }
diff --git a/chrome/browser/ui/search/local_ntp_doodle_browsertest.cc b/chrome/browser/ui/search/local_ntp_doodle_browsertest.cc
index 880db78..901d30c 100644
--- a/chrome/browser/ui/search/local_ntp_doodle_browsertest.cc
+++ b/chrome/browser/ui/search/local_ntp_doodle_browsertest.cc
@@ -16,7 +16,6 @@
 #include "build/build_config.h"
 #include "chrome/browser/search/instant_service.h"
 #include "chrome/browser/search/instant_service_factory.h"
-#include "chrome/browser/search/ntp_features.h"
 #include "chrome/browser/search_provider_logos/logo_service_factory.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/search/instant_test_utils.h"
@@ -50,8 +49,7 @@
 
 const char kCachedB64[] = "\161\247\041\171\337\276";  // b64decode("cached++")
 const char kFreshB64[] = "abc";                        // b64decode("YWJj")
-const int kSearchboxTopPx =
-    56 + 200 + 38;  // top margin + height + bottom margin
+const int kRealboxTopPx = 56 + 200 + 38;  // top margin + height + bottom margin
 
 #if defined(OS_WIN) || defined(OS_MAC)
 const char kFreshDarkB64[] = "xyz";  // b64decode("eHl6");
@@ -118,10 +116,6 @@
         LogoServiceFactory::GetForProfile(browser()->profile()));
   }
 
-  std::string searchbox() {
-    return ntp_features::IsRealboxEnabled() ? "realbox" : "fakebox";
-  }
-
   base::Optional<int> GetDimension(content::WebContents* tab,
                                    const std::string& id,
                                    const std::string& dimension) {
@@ -361,8 +355,7 @@
   ui_test_utils::NavigateToURL(browser(),
                                GURL(chrome::kChromeSearchLocalNtpUrl));
 
-  EXPECT_THAT(GetDimension(active_tab, searchbox(), "top"),
-              Eq(kSearchboxTopPx));
+  EXPECT_THAT(GetDimension(active_tab, "realbox", "top"), Eq(kRealboxTopPx));
   EXPECT_THAT(GetComputedOpacity(active_tab, "logo-default"), Eq(1.0));
   EXPECT_THAT(GetComputedOpacity(active_tab, "logo-doodle"), Eq(0.0));
 
@@ -387,8 +380,7 @@
   ui_test_utils::NavigateToURL(browser(),
                                GURL(chrome::kChromeSearchLocalNtpUrl));
 
-  EXPECT_THAT(GetDimension(active_tab, searchbox(), "top"),
-              Eq(kSearchboxTopPx));
+  EXPECT_THAT(GetDimension(active_tab, "realbox", "top"), Eq(kRealboxTopPx));
   EXPECT_THAT(GetComputedOpacity(active_tab, "logo-default"), Eq(1.0));
   EXPECT_THAT(GetComputedOpacity(active_tab, "logo-doodle"), Eq(0.0));
 
@@ -418,8 +410,7 @@
   ui_test_utils::NavigateToURL(browser(),
                                GURL(chrome::kChromeSearchLocalNtpUrl));
 
-  EXPECT_THAT(GetDimension(active_tab, searchbox(), "top"),
-              Eq(kSearchboxTopPx));
+  EXPECT_THAT(GetDimension(active_tab, "realbox", "top"), Eq(kRealboxTopPx));
   EXPECT_THAT(GetComputedOpacity(active_tab, "logo-default"), Eq(0.0));
   EXPECT_THAT(GetComputedOpacity(active_tab, "logo-doodle"), Eq(1.0));
   EXPECT_THAT(GetComputedDisplay(active_tab, "logo-doodle-container"),
@@ -463,8 +454,7 @@
   ui_test_utils::NavigateToURL(browser(),
                                GURL(chrome::kChromeSearchLocalNtpUrl));
 
-  EXPECT_THAT(GetDimension(active_tab, searchbox(), "top"),
-              Eq(kSearchboxTopPx));
+  EXPECT_THAT(GetDimension(active_tab, "realbox", "top"), Eq(kRealboxTopPx));
   EXPECT_THAT(GetComputedOpacity(active_tab, "logo-default"), Eq(0.0));
   EXPECT_THAT(GetComputedOpacity(active_tab, "logo-doodle"), Eq(1.0));
   EXPECT_THAT(GetComputedDisplay(active_tab, "logo-doodle-container"),
@@ -501,8 +491,7 @@
   ui_test_utils::NavigateToURL(browser(),
                                GURL(chrome::kChromeSearchLocalNtpUrl));
 
-  EXPECT_THAT(GetDimension(active_tab, searchbox(), "top"),
-              Eq(kSearchboxTopPx));
+  EXPECT_THAT(GetDimension(active_tab, "realbox", "top"), Eq(kRealboxTopPx));
   EXPECT_THAT(GetComputedOpacity(active_tab, "logo-default"), Eq(0.0));
   EXPECT_THAT(GetComputedOpacity(active_tab, "logo-doodle"), Eq(1.0));
   EXPECT_THAT(GetComputedDisplay(active_tab, "logo-doodle-container"),
@@ -540,8 +529,7 @@
                                GURL(chrome::kChromeSearchLocalNtpUrl));
 
   WaitForFadeIn(active_tab, "logo-default");
-  EXPECT_THAT(GetDimension(active_tab, searchbox(), "top"),
-              Eq(kSearchboxTopPx));
+  EXPECT_THAT(GetDimension(active_tab, "realbox", "top"), Eq(kRealboxTopPx));
   EXPECT_THAT(GetComputedOpacity(active_tab, "logo-default"), Eq(1.0));
   EXPECT_THAT(GetComputedOpacity(active_tab, "logo-doodle"), Eq(0.0));
 
@@ -579,8 +567,7 @@
                                GURL(chrome::kChromeSearchLocalNtpUrl));
 
   WaitForFadeIn(active_tab, "logo-doodle");
-  EXPECT_THAT(GetDimension(active_tab, searchbox(), "top"),
-              Eq(kSearchboxTopPx));
+  EXPECT_THAT(GetDimension(active_tab, "realbox", "top"), Eq(kRealboxTopPx));
   EXPECT_THAT(GetComputedOpacity(active_tab, "logo-default"), Eq(0.0));
   EXPECT_THAT(GetComputedOpacity(active_tab, "logo-doodle"), Eq(1.0));
   EXPECT_THAT(GetComputedDisplay(active_tab, "logo-doodle-container"),
@@ -628,8 +615,7 @@
                                GURL(chrome::kChromeSearchLocalNtpUrl));
 
   WaitForFadeIn(active_tab, "logo-doodle");
-  EXPECT_THAT(GetDimension(active_tab, searchbox(), "top"),
-              Eq(kSearchboxTopPx));
+  EXPECT_THAT(GetDimension(active_tab, "realbox", "top"), Eq(kRealboxTopPx));
   EXPECT_THAT(GetComputedOpacity(active_tab, "logo-default"), Eq(0.0));
   EXPECT_THAT(GetComputedOpacity(active_tab, "logo-doodle"), Eq(1.0));
   EXPECT_THAT(GetComputedDisplay(active_tab, "logo-doodle-container"),
@@ -665,8 +651,7 @@
   ui_test_utils::NavigateToURL(browser(),
                                GURL(chrome::kChromeSearchLocalNtpUrl));
 
-  EXPECT_THAT(GetDimension(active_tab, searchbox(), "top"),
-              Eq(kSearchboxTopPx));
+  EXPECT_THAT(GetDimension(active_tab, "realbox", "top"), Eq(kRealboxTopPx));
   EXPECT_THAT(GetComputedOpacity(active_tab, "logo-default"), Eq(0.0));
   EXPECT_THAT(GetComputedOpacity(active_tab, "logo-doodle"), Eq(1.0));
   EXPECT_THAT(GetComputedDisplay(active_tab, "logo-doodle-container"),
@@ -707,8 +692,7 @@
                                GURL(chrome::kChromeSearchLocalNtpUrl));
 
   WaitForFadeIn(active_tab, "logo-doodle");
-  EXPECT_THAT(GetDimension(active_tab, searchbox(), "top"),
-              Eq(kSearchboxTopPx));
+  EXPECT_THAT(GetDimension(active_tab, "realbox", "top"), Eq(kRealboxTopPx));
   EXPECT_THAT(GetComputedOpacity(active_tab, "logo-default"), Eq(0.0));
   EXPECT_THAT(GetComputedOpacity(active_tab, "logo-doodle"), Eq(1.0));
   EXPECT_THAT(GetComputedDisplay(active_tab, "logo-doodle-container"),
@@ -763,8 +747,7 @@
   ui_test_utils::NavigateToURL(browser(),
                                GURL(chrome::kChromeSearchLocalNtpUrl));
 
-  EXPECT_THAT(GetDimension(active_tab, searchbox(), "top"),
-              Eq(kSearchboxTopPx));
+  EXPECT_THAT(GetDimension(active_tab, "realbox", "top"), Eq(kRealboxTopPx));
   EXPECT_THAT(GetComputedOpacity(active_tab, "logo-default"), Eq(0.0));
   EXPECT_THAT(GetComputedOpacity(active_tab, "logo-doodle"), Eq(1.0));
   EXPECT_THAT(GetComputedDisplay(active_tab, "logo-doodle-container"),
@@ -1187,8 +1170,7 @@
   ui_test_utils::NavigateToURL(browser(),
                                GURL(chrome::kChromeSearchLocalNtpUrl));
 
-  EXPECT_THAT(GetDimension(active_tab, searchbox(), "top"),
-              Eq(kSearchboxTopPx));
+  EXPECT_THAT(GetDimension(active_tab, "realbox", "top"), Eq(kRealboxTopPx));
   EXPECT_THAT(GetComputedOpacity(active_tab, "logo-default"), Eq(0.0));
   EXPECT_THAT(GetComputedOpacity(active_tab, "logo-doodle"), Eq(1.0));
   EXPECT_THAT(GetComputedDisplay(active_tab, "logo-doodle-container"),
@@ -1205,8 +1187,7 @@
   ASSERT_TRUE(content::ExecuteScript(
       active_tab, "document.getElementById('logo-doodle-button').click();"));
 
-  EXPECT_THAT(GetDimension(active_tab, searchbox(), "top"),
-              Eq(kSearchboxTopPx));
+  EXPECT_THAT(GetDimension(active_tab, "realbox", "top"), Eq(kRealboxTopPx));
   EXPECT_THAT(GetElementProperty(active_tab, "logo-doodle-image", "src"),
               Eq(cached_logo.metadata.animated_url.spec()));
   // TODO(sfiera): check href by clicking on button.
@@ -1411,8 +1392,7 @@
     ui_test_utils::NavigateToURL(browser(),
                                  GURL(chrome::kChromeSearchLocalNtpUrl));
 
-    EXPECT_THAT(GetDimension(active_tab, searchbox(), "top"),
-                Eq(kSearchboxTopPx))
+    EXPECT_THAT(GetDimension(active_tab, "realbox", "top"), Eq(kRealboxTopPx))
         << "iframe_height_px = " << height;
   }
 }
@@ -1441,8 +1421,7 @@
                                GURL(chrome::kChromeSearchLocalNtpUrl));
 
   // Initial dimensions are correct:
-  EXPECT_THAT(*GetDimension(active_tab, searchbox(), "top"),
-              Eq(kSearchboxTopPx));
+  EXPECT_THAT(*GetDimension(active_tab, "realbox", "top"), Eq(kRealboxTopPx));
   EXPECT_THAT(*GetDimension(active_tab, "logo-doodle-iframe", "width"),
               Eq(400));
   EXPECT_THAT(*GetDimension(active_tab, "logo-doodle-iframe", "height"),
@@ -1463,8 +1442,8 @@
                                      )js"));
 
   // Fakebox is now 180px lower, with the iframe larger, as requested.
-  EXPECT_THAT(*GetDimension(active_tab, searchbox(), "top"),
-              Eq(kSearchboxTopPx + 180));
+  EXPECT_THAT(*GetDimension(active_tab, "realbox", "top"),
+              Eq(kRealboxTopPx + 180));
   EXPECT_THAT(*GetDimension(active_tab, "logo-doodle-iframe", "width"),
               Eq(*GetDimension(active_tab, "logo", "width")));
   EXPECT_THAT(*GetDimension(active_tab, "logo-doodle-iframe", "height"),
@@ -1481,8 +1460,7 @@
                                      )js"));
 
   // Back to the original dimensions now.
-  EXPECT_THAT(*GetDimension(active_tab, searchbox(), "top"),
-              Eq(kSearchboxTopPx));
+  EXPECT_THAT(*GetDimension(active_tab, "realbox", "top"), Eq(kRealboxTopPx));
   EXPECT_THAT(*GetDimension(active_tab, "logo-doodle-iframe", "width"),
               Eq(400));
   EXPECT_THAT(*GetDimension(active_tab, "logo-doodle-iframe", "height"),
@@ -1541,8 +1519,7 @@
                                GURL(chrome::kChromeSearchLocalNtpUrl));
 
   WaitForFadeIn(active_tab, "logo-doodle");
-  EXPECT_THAT(GetDimension(active_tab, searchbox(), "top"),
-              Eq(kSearchboxTopPx));
+  EXPECT_THAT(GetDimension(active_tab, "realbox", "top"), Eq(kRealboxTopPx));
   EXPECT_THAT(GetComputedOpacity(active_tab, "logo-default"), Eq(0.0));
   EXPECT_THAT(GetComputedOpacity(active_tab, "logo-doodle"), Eq(1.0));
   EXPECT_THAT(GetComputedDisplay(active_tab, "logo-doodle-container"),
@@ -1601,8 +1578,7 @@
                                GURL(chrome::kChromeSearchLocalNtpUrl));
 
   WaitForFadeIn(active_tab, "logo-doodle");
-  EXPECT_THAT(GetDimension(active_tab, searchbox(), "top"),
-              Eq(kSearchboxTopPx));
+  EXPECT_THAT(GetDimension(active_tab, "realbox", "top"), Eq(kRealboxTopPx));
   EXPECT_THAT(GetComputedOpacity(active_tab, "logo-default"), Eq(0.0));
   EXPECT_THAT(GetComputedOpacity(active_tab, "logo-doodle"), Eq(1.0));
   EXPECT_THAT(GetComputedDisplay(active_tab, "logo-doodle-container"),
@@ -1635,8 +1611,7 @@
 
   WaitForLogoSwap(active_tab, "logo-doodle");
   EXPECT_TRUE(GetIsDarkModeApplied(active_tab));
-  EXPECT_THAT(GetDimension(active_tab, searchbox(), "top"),
-              Eq(kSearchboxTopPx));
+  EXPECT_THAT(GetDimension(active_tab, "realbox", "top"), Eq(kRealboxTopPx));
   EXPECT_THAT(GetComputedOpacity(active_tab, "logo-default"), Eq(0.0));
   EXPECT_THAT(GetComputedOpacity(active_tab, "logo-doodle"), Eq(1.0));
   EXPECT_THAT(GetComputedDisplay(active_tab, "logo-doodle-container"),
diff --git a/chrome/browser/ui/search/local_ntp_uitest.cc b/chrome/browser/ui/search/local_ntp_uitest.cc
deleted file mode 100644
index e13ec75..0000000
--- a/chrome/browser/ui/search/local_ntp_uitest.cc
+++ /dev/null
@@ -1,111 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/search/ntp_features.h"
-#include "chrome/browser/search/search.h"
-#include "chrome/browser/ui/browser.h"
-#include "chrome/browser/ui/browser_window.h"
-#include "chrome/browser/ui/location_bar/location_bar.h"
-#include "chrome/browser/ui/search/instant_test_utils.h"
-#include "chrome/browser/ui/search/local_ntp_test_utils.h"
-#include "chrome/browser/ui/tabs/tab_strip_model.h"
-#include "chrome/browser/ui/view_ids.h"
-#include "chrome/test/base/in_process_browser_test.h"
-#include "chrome/test/base/interactive_test_utils.h"
-#include "chrome/test/base/ui_test_utils.h"
-#include "components/omnibox/browser/omnibox_edit_model.h"
-#include "components/omnibox/browser/omnibox_view.h"
-#include "components/omnibox/common/omnibox_focus_state.h"
-#include "content/public/browser/web_contents.h"
-#include "content/public/test/browser_test.h"
-#include "net/test/embedded_test_server/embedded_test_server.h"
-#include "ui/gfx/geometry/point.h"
-#include "ui/gfx/geometry/rect.h"
-#include "ui/gfx/geometry/vector2d.h"
-
-class LocalNtpUiTest : public InProcessBrowserTest {
- public:
-  LocalNtpUiTest() {}
-
-  OmniboxView* omnibox() {
-    return browser()->window()->GetLocationBar()->GetOmniboxView();
-  }
-};
-
-IN_PROC_BROWSER_TEST_F(LocalNtpUiTest, FakeboxRedirectsToOmnibox) {
-  if (ntp_features::IsRealboxEnabled())
-    return;
-
-  content::WebContents* active_tab =
-      local_ntp_test_utils::OpenNewTab(browser(), GURL("about:blank"));
-  local_ntp_test_utils::NavigateToNTPAndWaitUntilLoaded(browser(), 1000);
-
-  // This is required to make the mouse events we send below arrive at the right
-  // place. It *should* be the default for all interactive_ui_tests anyway, but
-  // on Mac it isn't; see crbug.com/641969.
-  ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser()));
-
-  // Make sure that the omnibox doesn't have focus already.
-  ui_test_utils::FocusView(browser(), VIEW_ID_TAB_CONTAINER);
-  ASSERT_EQ(OMNIBOX_FOCUS_NONE, omnibox()->model()->focus_state());
-
-  // Make sure the fakebox is visible.
-  bool result = false;
-  const std::string is_fakebox_visible = R"js(
-        (function(elem) {
-          return elem && elem.offsetWidth > 0 && elem.offsetHeight > 0 &&
-              window.getComputedStyle(elem).visibility != 'hidden';
-        })(document.getElementById('fakebox')))js";
-  ASSERT_TRUE(instant_test_utils::GetBoolFromJS(active_tab, is_fakebox_visible,
-                                                &result));
-  EXPECT_TRUE(result);
-
-  // Get the position of the fakebox on the page.
-  double fakebox_x = 0;
-  ASSERT_TRUE(instant_test_utils::GetDoubleFromJS(
-      active_tab,
-      "document.getElementById('fakebox').getBoundingClientRect().left",
-      &fakebox_x));
-  double fakebox_y = 0;
-  ASSERT_TRUE(instant_test_utils::GetDoubleFromJS(
-      active_tab,
-      "document.getElementById('fakebox').getBoundingClientRect().top",
-      &fakebox_y));
-
-  // Move the mouse over the fakebox.
-  gfx::Vector2d fakebox_pos(static_cast<int>(std::ceil(fakebox_x)),
-                            static_cast<int>(std::ceil(fakebox_y)));
-  gfx::Point origin = active_tab->GetContainerBounds().origin();
-  ASSERT_TRUE(ui_test_utils::SendMouseMoveSync(origin + fakebox_pos +
-                                               gfx::Vector2d(1, 1)));
-
-  // Click on the fakebox, and wait for the omnibox to receive invisible focus.
-  ASSERT_TRUE(
-      ui_test_utils::SendMouseEventsSync(ui_controls::LEFT, ui_controls::DOWN));
-  ASSERT_TRUE(
-      ui_test_utils::SendMouseEventsSync(ui_controls::LEFT, ui_controls::UP));
-  ui_test_utils::WaitForViewFocus(browser(), VIEW_ID_OMNIBOX, true);
-  EXPECT_EQ(OMNIBOX_FOCUS_INVISIBLE, omnibox()->model()->focus_state());
-
-  // The fakebox should now also have focus.
-  ASSERT_TRUE(instant_test_utils::GetBoolFromJS(
-      active_tab, "document.body.classList.contains('fakebox-focused')",
-      &result));
-  EXPECT_TRUE(result);
-
-  // Type "a" and wait for the omnibox to receive visible focus.
-  ASSERT_TRUE(ui_test_utils::SendKeyPressSync(
-      browser(), ui::KeyboardCode::VKEY_A,
-      /*control=*/false, /*shift=*/false, /*alt=*/false, /*command=*/false));
-  ui_test_utils::WaitForViewFocus(browser(), VIEW_ID_OMNIBOX, true);
-  EXPECT_EQ(OMNIBOX_FOCUS_VISIBLE, omnibox()->model()->focus_state());
-
-  // The typed text should have arrived in the omnibox.
-  EXPECT_EQ("a", base::UTF16ToUTF8(omnibox()->GetText()));
-
-  // On the JS side, the fakebox should have been hidden.
-  ASSERT_TRUE(instant_test_utils::GetBoolFromJS(active_tab, is_fakebox_visible,
-                                                &result));
-  EXPECT_FALSE(result);
-}
diff --git a/chrome/browser/ui/search/local_ntp_voice_search_browsertest.cc b/chrome/browser/ui/search/local_ntp_voice_search_browsertest.cc
index 4af2d20..47988e30 100644
--- a/chrome/browser/ui/search/local_ntp_voice_search_browsertest.cc
+++ b/chrome/browser/ui/search/local_ntp_voice_search_browsertest.cc
@@ -5,7 +5,6 @@
 #include "base/command_line.h"
 #include "build/build_config.h"
 #include "chrome/browser/permissions/permission_manager_factory.h"
-#include "chrome/browser/search/ntp_features.h"
 #include "chrome/browser/search/search.h"
 #include "chrome/browser/search_engines/ui_thread_search_terms_data.h"
 #include "chrome/browser/ui/browser.h"
@@ -25,15 +24,6 @@
 #include "testing/gtest/include/gtest/gtest.h"
 #include "url/gurl.h"
 
-namespace {
-
-std::string searchbox_microphone() {
-  return ntp_features::IsRealboxEnabled() ? "realbox-microphone"
-                                          : "fakebox-microphone";
-}
-
-}  // namespace
-
 using LocalNTPVoiceSearchSmokeTest = InProcessBrowserTest;
 
 IN_PROC_BROWSER_TEST_F(LocalNTPVoiceSearchSmokeTest,
@@ -56,10 +46,8 @@
   bool microphone_is_visible = false;
   ASSERT_TRUE(instant_test_utils::GetBoolFromJS(
       active_tab,
-      "!!document.getElementById('" + searchbox_microphone() +
-          "') && "
-          "!document.getElementById('" +
-          searchbox_microphone() + "').hidden",
+      "!!document.getElementById('realbox-microphone') && "
+      "!document.getElementById('realbox-microphone').hidden",
       &microphone_is_visible));
   EXPECT_TRUE(microphone_is_visible);
 
@@ -107,8 +95,7 @@
 
   // Click on the microphone button, which will trigger a permission request.
   ASSERT_TRUE(content::ExecuteScript(
-      active_tab,
-      "document.getElementById('" + searchbox_microphone() + "').click();"));
+      active_tab, "document.getElementById('realbox-microphone').click();"));
 
   // Make sure the request arrived.
   prompt_factory.WaitForPermissionBubble();
diff --git a/chrome/browser/ui/views/autofill/autofill_popup_view_native_views.cc b/chrome/browser/ui/views/autofill/autofill_popup_view_native_views.cc
index ff0d6eea..599922c 100644
--- a/chrome/browser/ui/views/autofill/autofill_popup_view_native_views.cc
+++ b/chrome/browser/ui/views/autofill/autofill_popup_view_native_views.cc
@@ -41,6 +41,7 @@
 #include "ui/views/accessibility/view_accessibility.h"
 #include "ui/views/background.h"
 #include "ui/views/border.h"
+#include "ui/views/controls/color_tracking_icon_view.h"
 #include "ui/views/controls/image_view.h"
 #include "ui/views/controls/label.h"
 #include "ui/views/controls/menu/menu_config.h"
@@ -108,23 +109,6 @@
                         views::GridLayout::ColumnSize::kUsePreferred, 0, 0);
 }
 
-// An image view that shows a vector icon and tracks changes in the theme.
-class VectorIconView : public views::ImageView {
- public:
-  explicit VectorIconView(const gfx::VectorIcon& icon) : icon_(icon) {}
-
-  // views::ImageView
-  void OnThemeChanged() override {
-    ImageView::OnThemeChanged();
-    const SkColor color = GetNativeTheme()->GetSystemColor(
-        ui::NativeTheme::kColorId_DefaultIconColor);
-    SetImage(gfx::CreateVectorIcon(icon_, gfx::kFaviconSize, color));
-  }
-
- private:
-  const gfx::VectorIcon& icon_;
-};
-
 std::unique_ptr<views::ImageView> ImageViewFromImageSkia(
     const gfx::ImageSkia& image_skia) {
   if (image_skia.isNull())
@@ -136,7 +120,8 @@
 
 std::unique_ptr<views::ImageView> ImageViewFromVectorIcon(
     const gfx::VectorIcon& vector_icon) {
-  return std::make_unique<VectorIconView>(vector_icon);
+  return std::make_unique<views::ColorTrackingIconView>(vector_icon,
+                                                        gfx::kFaviconSize);
 }
 
 std::unique_ptr<views::ImageView> GetIconImageViewByName(
diff --git a/chrome/browser/ui/views/frame/tab_strip_region_view.cc b/chrome/browser/ui/views/frame/tab_strip_region_view.cc
index 0ca3c12c..db331e9 100644
--- a/chrome/browser/ui/views/frame/tab_strip_region_view.cc
+++ b/chrome/browser/ui/views/frame/tab_strip_region_view.cc
@@ -32,7 +32,8 @@
             views::ScrollView::ScrollWithLayers::kEnabled));
     tab_strip_scroll_container->SetBackgroundColor(base::nullopt);
     tab_strip_scroll_container->SetHorizontalScrollBarMode(
-        views::ScrollView::ScrollBarMode::kDisabled);
+        views::ScrollView::ScrollBarMode::kHiddenButEnabled);
+    tab_strip_scroll_container->SetTreatAllScrollEventsAsHorizontal(true);
     tab_strip_container_ = tab_strip_scroll_container;
     tab_strip_scroll_container->SetContents(std::move(tab_strip));
   } else {
diff --git a/chrome/browser/ui/views/global_media_controls/media_dialog_view.cc b/chrome/browser/ui/views/global_media_controls/media_dialog_view.cc
index f67b3b0..6e7d588 100644
--- a/chrome/browser/ui/views/global_media_controls/media_dialog_view.cc
+++ b/chrome/browser/ui/views/global_media_controls/media_dialog_view.cc
@@ -98,6 +98,10 @@
   return active_sessions_view_->PopOut(id, bounds);
 }
 
+void MediaDialogView::HideMediaDialog() {
+  HideDialog();
+}
+
 void MediaDialogView::AddedToWidget() {
   int corner_radius =
       views::LayoutProvider::Get()->GetCornerRadiusMetric(views::EMPHASIS_HIGH);
diff --git a/chrome/browser/ui/views/global_media_controls/media_dialog_view.h b/chrome/browser/ui/views/global_media_controls/media_dialog_view.h
index f9f3922..e3ec2ec 100644
--- a/chrome/browser/ui/views/global_media_controls/media_dialog_view.h
+++ b/chrome/browser/ui/views/global_media_controls/media_dialog_view.h
@@ -35,6 +35,7 @@
   void HideMediaSession(const std::string& id) override;
   std::unique_ptr<OverlayMediaNotification> PopOut(const std::string& id,
                                                    gfx::Rect bounds) override;
+  void HideMediaDialog() override;
 
   // views::View implementation.
   void AddedToWidget() override;
diff --git a/chrome/browser/ui/views/global_media_controls/media_notification_device_selector_view.cc b/chrome/browser/ui/views/global_media_controls/media_notification_device_selector_view.cc
index f7a2647..8ae72c68 100644
--- a/chrome/browser/ui/views/global_media_controls/media_notification_device_selector_view.cc
+++ b/chrome/browser/ui/views/global_media_controls/media_notification_device_selector_view.cc
@@ -307,8 +307,9 @@
   delegate_->OnDeviceSelectorViewSizeChanged();
 }
 
-// TODO(muyaoxu):Change the logic to work with Cast devices.
 bool MediaNotificationDeviceSelectorView::ShouldBeVisible() const {
+  if (has_cast_device_)
+    return true;
   if (!is_audio_device_switching_enabled_)
     return false;
   // The UI should be visible if there are more than one unique devices. That is
@@ -363,6 +364,7 @@
 void MediaNotificationDeviceSelectorView::OnModelUpdated(
     const media_router::CastDialogModel& model) {
   RemoveDevicesOfType(DeviceEntryUIType::kCast);
+  has_cast_device_ = !model.media_sinks().empty();
   for (auto sink : model.media_sinks()) {
     auto device_entry_view = std::make_unique<CastDeviceEntryView>(
         this, foreground_color_, background_color_, sink);
@@ -370,9 +372,7 @@
     device_entry_ui_map_[device_entry_view->tag()] = device_entry_view.get();
     device_entry_views_container_->AddChildView(std::move(device_entry_view));
   }
-  SetVisible(true);
-  delegate_->OnDeviceSelectorViewSizeChanged();
-  Layout();
+  UpdateVisibility();
 }
 
 void MediaNotificationDeviceSelectorView::OnControllerInvalidated() {
diff --git a/chrome/browser/ui/views/global_media_controls/media_notification_device_selector_view.h b/chrome/browser/ui/views/global_media_controls/media_notification_device_selector_view.h
index 89adc99..4714ac6 100644
--- a/chrome/browser/ui/views/global_media_controls/media_notification_device_selector_view.h
+++ b/chrome/browser/ui/views/global_media_controls/media_notification_device_selector_view.h
@@ -99,6 +99,7 @@
 
   bool is_expanded_ = false;
   bool is_audio_device_switching_enabled_ = false;
+  bool has_cast_device_ = false;
   MediaNotificationDeviceSelectorViewDelegate* const delegate_;
   std::string current_device_id_;
   SkColor foreground_color_, background_color_;
diff --git a/chrome/browser/ui/views/global_media_controls/media_notification_device_selector_view_unittest.cc b/chrome/browser/ui/views/global_media_controls/media_notification_device_selector_view_unittest.cc
index c9d74f20..d36cf18 100644
--- a/chrome/browser/ui/views/global_media_controls/media_notification_device_selector_view_unittest.cc
+++ b/chrome/browser/ui/views/global_media_controls/media_notification_device_selector_view_unittest.cc
@@ -357,7 +357,7 @@
 
 TEST_F(MediaNotificationDeviceSelectorViewTest, VisibilityChanges) {
   // The device selector view should become hidden when there is only one
-  // unique device.
+  // unique device, unless there exists a cast device.
   MockMediaNotificationDeviceSelectorViewDelegate delegate;
   auto* provider = delegate.GetProvider();
   provider->AddDevice("Speaker", "1");
@@ -373,6 +373,12 @@
 
   testing::Mock::VerifyAndClearExpectations(&delegate);
 
+  EXPECT_CALL(delegate, OnDeviceSelectorViewSizeChanged);
+  view_->OnModelUpdated(CreateModelWithSinks({CreateMediaSink()}));
+  EXPECT_TRUE(view_->GetVisible());
+
+  testing::Mock::VerifyAndClearExpectations(&delegate);
+  view_->OnModelUpdated(CreateModelWithSinks({}));
   provider->ResetDevices();
   provider->AddDevice("Speaker", "1");
   provider->AddDevice("Headphones",
diff --git a/chrome/browser/ui/views/location_bar/custom_tab_bar_view_browsertest.cc b/chrome/browser/ui/views/location_bar/custom_tab_bar_view_browsertest.cc
index f59e221..ea4e267 100644
--- a/chrome/browser/ui/views/location_bar/custom_tab_bar_view_browsertest.cc
+++ b/chrome/browser/ui/views/location_bar/custom_tab_bar_view_browsertest.cc
@@ -20,6 +20,7 @@
 #include "components/security_interstitials/content/security_interstitial_controller_client.h"
 #include "components/security_interstitials/content/security_interstitial_page.h"
 #include "components/security_interstitials/content/security_interstitial_tab_helper.h"
+#include "components/security_interstitials/content/settings_page_helper.h"
 #include "components/security_interstitials/core/metrics_helper.h"
 #include "content/public/browser/navigation_entry.h"
 #include "content/public/browser/navigation_handle.h"
@@ -134,7 +135,8 @@
                 nullptr,
                 nullptr,
                 base::i18n::GetConfiguredLocale(),
-                GURL())) {}
+                GURL(),
+                nullptr /* settings_page_helper */)) {}
   void OnInterstitialClosing() override {}
   bool ShouldDisplayURL() const override { return false; }
 
diff --git a/chrome/browser/ui/views/webauthn/authenticator_qr_sheet_view.cc b/chrome/browser/ui/views/webauthn/authenticator_qr_sheet_view.cc
index 909f06c..d84186df 100644
--- a/chrome/browser/ui/views/webauthn/authenticator_qr_sheet_view.cc
+++ b/chrome/browser/ui/views/webauthn/authenticator_qr_sheet_view.cc
@@ -9,9 +9,6 @@
 #include "base/strings/string_piece.h"
 #include "chrome/common/qr_code_generator/dino_image.h"
 #include "chrome/common/qr_code_generator/qr_code_generator.h"
-#include "third_party/boringssl/src/include/openssl/ec.h"
-#include "third_party/boringssl/src/include/openssl/ec_key.h"
-#include "third_party/boringssl/src/include/openssl/obj.h"
 #include "ui/gfx/canvas.h"
 #include "ui/views/layout/box_layout.h"
 #include "ui/views/view.h"
@@ -39,8 +36,11 @@
   static constexpr int kDinoY =
       kMid - (dino_image::kDinoHeight * kDinoTilePixels) / 2;
 
-  explicit QRView(base::span<const uint8_t> qr_data) {
-    base::Optional<QRCode::GeneratedCode> code = qr_.Generate(qr_data);
+  explicit QRView(const std::string& qr_string) {
+    CHECK_LE(qr_string.size(), QRCodeGenerator::V5::kInputBytes);
+
+    base::Optional<QRCode::GeneratedCode> code =
+        qr_.Generate(base::as_bytes(base::make_span(qr_string)));
     DCHECK(code);
     // The QR Encoder supports dynamic sizing but we expect our data to fit in
     // a version five code.
@@ -50,10 +50,12 @@
 
   ~QRView() override = default;
 
-  void RefreshQRCode(base::span<const uint8_t> new_qr_data) {
+  void RefreshQRCode(const std::string& qr_string) {
+    CHECK_LE(qr_string.size(), QRCodeGenerator::V5::kInputBytes);
+
     state_ = (state_ + 1) % 6;
-    base::Optional<QRCode::GeneratedCode> code =
-        qr_.Generate(new_qr_data, /*mask=*/state_);
+    base::Optional<QRCode::GeneratedCode> code = qr_.Generate(
+        base::as_bytes(base::make_span(qr_string)), /*mask=*/state_);
     DCHECK(code);
     qr_tiles_ = code->data;
     SchedulePaint();
@@ -170,77 +172,11 @@
   DISALLOW_COPY_AND_ASSIGN(QRView);
 };
 
-// kCompressedPublicKeySize is the size of an X9.62 compressed P-256 public key.
-constexpr size_t kCompressedPublicKeySize = 33;
-
-std::array<uint8_t, kCompressedPublicKeySize> SeedToCompressedPublicKey(
-    base::span<const uint8_t, 32> seed) {
-  bssl::UniquePtr<EC_GROUP> p256(
-      EC_GROUP_new_by_curve_name(NID_X9_62_prime256v1));
-  bssl::UniquePtr<EC_KEY> key(
-      EC_KEY_derive_from_secret(p256.get(), seed.data(), seed.size()));
-  const EC_POINT* public_key = EC_KEY_get0_public_key(key.get());
-
-  std::array<uint8_t, kCompressedPublicKeySize> ret;
-  CHECK_EQ(ret.size(), EC_POINT_point2oct(
-                           p256.get(), public_key, POINT_CONVERSION_COMPRESSED,
-                           ret.data(), ret.size(), /*ctx=*/nullptr));
-  return ret;
-}
-
-// Base64EncodedSize returns the number of bytes required to base64 encode an
-// input of |input_length| bytes, without padding.
-constexpr size_t Base64EncodedSize(size_t input_length) {
-  return ((input_length * 4) + 2) / 3;
-}
-
-// BuildQRData writes a URL suitable for encoding as a QR to |out_buf|
-// and returns a span pointing into that buffer. The URL is generated based on
-// |qr_generator_key|.
-base::span<uint8_t> BuildQRData(
-    uint8_t out_buf[QRCode::V5::kInputBytes],
-    base::span<const uint8_t, device::cablev2::kQRKeySize> qr_generator_key) {
-  static_assert(device::cablev2::kQRSeedSize <= device::cablev2::kQRKeySize,
-                "");
-  const std::array<uint8_t, kCompressedPublicKeySize> compressed_public_key =
-      SeedToCompressedPublicKey(
-          base::span<const uint8_t, device::cablev2::kQRSeedSize>(
-              qr_generator_key.data(), device::cablev2::kQRSeedSize));
-
-  uint8_t
-      qr_data[EXTENT(compressed_public_key) + device::cablev2::kQRSecretSize];
-  memcpy(qr_data, compressed_public_key.data(), compressed_public_key.size());
-  static_assert(EXTENT(qr_generator_key) == device::cablev2::kQRSeedSize +
-                                                device::cablev2::kQRSecretSize,
-                "");
-  memcpy(qr_data + compressed_public_key.size(),
-         &qr_generator_key[device::cablev2::kQRSeedSize],
-         device::cablev2::kQRSecretSize);
-
-  std::string base64_qr_data;
-  base::Base64UrlEncode(
-      base::StringPiece(reinterpret_cast<const char*>(qr_data),
-                        sizeof(qr_data)),
-      base::Base64UrlEncodePolicy::OMIT_PADDING, &base64_qr_data);
-  static constexpr size_t kEncodedDataLength =
-      Base64EncodedSize(sizeof(qr_data));
-  DCHECK_EQ(kEncodedDataLength, base64_qr_data.size());
-
-  static constexpr char kPrefix[] = "fido://c1/";
-  static constexpr size_t kPrefixLength = sizeof(kPrefix) - 1;
-
-  static_assert(QRCode::V5::kInputBytes >= kPrefixLength + kEncodedDataLength,
-                "unexpected QR input length");
-  memcpy(out_buf, kPrefix, kPrefixLength);
-  memcpy(&out_buf[kPrefixLength], base64_qr_data.data(), kEncodedDataLength);
-  return base::span<uint8_t>(out_buf, kPrefixLength + kEncodedDataLength);
-}
-
 }  // anonymous namespace
 
 class AuthenticatorQRViewCentered : public views::View {
  public:
-  explicit AuthenticatorQRViewCentered(base::span<const uint8_t> qr_data) {
+  explicit AuthenticatorQRViewCentered(const std::string& qr_data) {
     views::BoxLayout* layout =
         SetLayoutManager(std::make_unique<views::BoxLayout>(
             views::BoxLayout::Orientation::kHorizontal));
@@ -252,7 +188,7 @@
     AddChildView(qr_view_);
   }
 
-  void RefreshQRCode(base::span<const uint8_t> new_qr_data) {
+  void RefreshQRCode(const std::string& new_qr_data) {
     qr_view_->RefreshQRCode(new_qr_data);
   }
 
@@ -262,17 +198,15 @@
 AuthenticatorQRSheetView::AuthenticatorQRSheetView(
     std::unique_ptr<AuthenticatorQRSheetModel> sheet_model)
     : AuthenticatorRequestSheetView(std::move(sheet_model)),
-      qr_generator_key_(static_cast<AuthenticatorQRSheetModel*>(model())
-                            ->dialog_model()
-                            ->qr_generator_key()) {}
+      qr_string_(static_cast<AuthenticatorQRSheetModel*>(model())
+                     ->dialog_model()
+                     ->cable_qr_string()) {}
 
 AuthenticatorQRSheetView::~AuthenticatorQRSheetView() = default;
 
 std::unique_ptr<views::View>
 AuthenticatorQRSheetView::BuildStepSpecificContent() {
-  uint8_t qr_data_buf[QRCode::V5::kInputBytes];
-  auto qr_view = std::make_unique<AuthenticatorQRViewCentered>(
-      BuildQRData(qr_data_buf, qr_generator_key_));
+  auto qr_view = std::make_unique<AuthenticatorQRViewCentered>(qr_string_);
   qr_view_ = qr_view.get();
 
   timer_.Start(FROM_HERE, base::TimeDelta::FromMilliseconds(600), this,
@@ -281,6 +215,5 @@
 }
 
 void AuthenticatorQRSheetView::Update() {
-  uint8_t qr_data_buf[QRCode::V5::kInputBytes];
-  qr_view_->RefreshQRCode(BuildQRData(qr_data_buf, qr_generator_key_));
+  qr_view_->RefreshQRCode(qr_string_);
 }
diff --git a/chrome/browser/ui/views/webauthn/authenticator_qr_sheet_view.h b/chrome/browser/ui/views/webauthn/authenticator_qr_sheet_view.h
index 04a57d69..a52d6de7 100644
--- a/chrome/browser/ui/views/webauthn/authenticator_qr_sheet_view.h
+++ b/chrome/browser/ui/views/webauthn/authenticator_qr_sheet_view.h
@@ -12,7 +12,6 @@
 #include "base/timer/timer.h"
 #include "chrome/browser/ui/views/webauthn/authenticator_request_sheet_view.h"
 #include "chrome/browser/ui/webauthn/sheet_models.h"
-#include "device/fido/cable/v2_constants.h"
 
 class AuthenticatorQRViewCentered;
 
@@ -32,7 +31,7 @@
   void Update();
 
   AuthenticatorQRViewCentered* qr_view_ = nullptr;
-  base::span<const uint8_t, device::cablev2::kQRKeySize> qr_generator_key_;
+  const std::string qr_string_;
   base::RepeatingTimer timer_;
 
   DISALLOW_COPY_AND_ASSIGN(AuthenticatorQRSheetView);
diff --git a/chrome/browser/ui/webauthn/authenticator_dialog_browsertest.cc b/chrome/browser/ui/webauthn/authenticator_dialog_browsertest.cc
index 0141dfc8b..8cd4003 100644
--- a/chrome/browser/ui/webauthn/authenticator_dialog_browsertest.cc
+++ b/chrome/browser/ui/webauthn/authenticator_dialog_browsertest.cc
@@ -40,9 +40,9 @@
         AuthenticatorTransport::kUsbHumanInterfaceDevice,
         AuthenticatorTransport::kInternal,
         AuthenticatorTransport::kCloudAssistedBluetoothLowEnergy};
-    std::array<uint8_t, device::cablev2::kQRKeySize> qr_key = {0};
     model->set_cable_transport_info(/*cable_extension_provided=*/true,
-                                    /*have_paired_phones=*/false, qr_key);
+                                    /*have_paired_phones=*/false,
+                                    "fido://qrcode");
     model->StartFlow(std::move(transport_availability), base::nullopt);
 
     // The dialog should immediately close as soon as it is displayed.
diff --git a/chrome/browser/ui/webui/commander/commander_handler.cc b/chrome/browser/ui/webui/commander/commander_handler.cc
index c6932ad6..40f07899 100644
--- a/chrome/browser/ui/webui/commander/commander_handler.cc
+++ b/chrome/browser/ui/webui/commander/commander_handler.cc
@@ -22,7 +22,7 @@
 constexpr char kResultSetIdKey[] = "result_set_id";
 constexpr char kTitleKey[] = "title";
 constexpr char kEntityKey[] = "entity";
-constexpr char kAnnotationKey[] = "annotations";
+constexpr char kAnnotationKey[] = "annotation";
 constexpr char kMatchedRangesKey[] = "matched_ranges";
 constexpr char kOptionsKey[] = "options";
 }  // namespace
diff --git a/chrome/browser/ui/webui/new_tab_page/new_tab_page_ui.cc b/chrome/browser/ui/webui/new_tab_page/new_tab_page_ui.cc
index b6c37d2..6d7c961 100644
--- a/chrome/browser/ui/webui/new_tab_page/new_tab_page_ui.cc
+++ b/chrome/browser/ui/webui/new_tab_page/new_tab_page_ui.cc
@@ -69,10 +69,7 @@
                         .spec());
 
   // Realbox.
-  const bool realbox_enabled =
-      ntp_features::IsRealboxEnabled() &&
-      base::FeatureList::IsEnabled(ntp_features::kWebUIRealbox);
-  source->AddBoolean("realboxEnabled", realbox_enabled);
+  source->AddBoolean("realboxEnabled", true);
   source->AddBoolean(
       "realboxMatchOmniboxTheme",
       base::FeatureList::IsEnabled(ntp_features::kRealboxMatchOmniboxTheme));
diff --git a/chrome/browser/ui/webui/ntp/ntp_resource_cache.cc b/chrome/browser/ui/webui/ntp/ntp_resource_cache.cc
index cbf85a63..e91a8ec 100644
--- a/chrome/browser/ui/webui/ntp/ntp_resource_cache.cc
+++ b/chrome/browser/ui/webui/ntp/ntp_resource_cache.cc
@@ -370,11 +370,11 @@
                                 chrome::kLearnMoreEnterpriseURL);
     base::string16 enterprise_info;
     if (connector->IsCloudManaged()) {
-      const std::string enterprise_display_domain =
-          connector->GetEnterpriseDisplayDomain();
+      const std::string enterprise_domain_manager =
+          connector->GetEnterpriseDomainManager();
       enterprise_info = l10n_util::GetStringFUTF16(
           IDS_ASH_ENTERPRISE_DEVICE_MANAGED_BY,
-          base::UTF8ToUTF16(enterprise_display_domain));
+          base::UTF8ToUTF16(enterprise_domain_manager));
     } else if (connector->IsActiveDirectoryManaged()) {
       enterprise_info =
           l10n_util::GetStringUTF16(IDS_ASH_ENTERPRISE_DEVICE_MANAGED);
diff --git a/chrome/browser/ui/webui/settings/accessibility_main_handler.cc b/chrome/browser/ui/webui/settings/accessibility_main_handler.cc
index 9f4901c..5b6d2119 100644
--- a/chrome/browser/ui/webui/settings/accessibility_main_handler.cc
+++ b/chrome/browser/ui/webui/settings/accessibility_main_handler.cc
@@ -24,6 +24,8 @@
 #include "base/numerics/ranges.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/component_updater/soda_component_installer.h"
+#include "chrome/browser/component_updater/soda_en_us_component_installer.h"
+#include "chrome/browser/component_updater/soda_ja_jp_component_installer.h"
 #include "chrome/common/pref_names.h"
 #include "chrome/grit/chromium_strings.h"
 #include "chrome/grit/generated_resources.h"
@@ -34,9 +36,23 @@
 
 namespace {
 
-int GetDownloadProgress(int64_t downloaded_bytes, int64_t total_bytes) {
-  if (downloaded_bytes == -1 || total_bytes == -1 || total_bytes == 0)
+int GetDownloadProgress(
+    std::unordered_map<std::string, update_client::CrxUpdateItem>
+        downloading_components) {
+  int total_bytes = 0;
+  int downloaded_bytes = 0;
+
+  for (auto component : downloading_components) {
+    if (component.second.downloaded_bytes >= 0 &&
+        component.second.total_bytes > 0) {
+      downloaded_bytes += component.second.downloaded_bytes;
+      total_bytes += component.second.total_bytes;
+    }
+  }
+
+  if (total_bytes == 0)
     return -1;
+
   DCHECK_LE(downloaded_bytes, total_bytes);
   return 100 *
          base::ClampToRange(double{downloaded_bytes} / total_bytes, 0.0, 1.0);
@@ -125,7 +141,11 @@
 }
 #else
 void AccessibilityMainHandler::OnEvent(Events event, const std::string& id) {
-  if (id != component_updater::SODAComponentInstallerPolicy::GetExtensionId())
+  if (id != component_updater::SODAComponentInstallerPolicy::GetExtensionId() &&
+      id != component_updater::SodaEnUsComponentInstallerPolicy::
+                GetExtensionId() &&
+      id !=
+          component_updater::SodaJaJpComponentInstallerPolicy::GetExtensionId())
     return;
 
   switch (event) {
@@ -136,8 +156,8 @@
     case Events::COMPONENT_UPDATE_UPDATING: {
       update_client::CrxUpdateItem item;
       g_browser_process->component_updater()->GetComponentDetails(id, &item);
-      const int progress =
-          GetDownloadProgress(item.downloaded_bytes, item.total_bytes);
+      downloading_components_[id] = item;
+      const int progress = GetDownloadProgress(downloading_components_);
       // When GetDownloadProgress returns -1, do nothing. It returns -1 when the
       // downloaded or total bytes is unknown.
       if (progress != -1) {
diff --git a/chrome/browser/ui/webui/settings/accessibility_main_handler.h b/chrome/browser/ui/webui/settings/accessibility_main_handler.h
index 9824c7980..ce1e801 100644
--- a/chrome/browser/ui/webui/settings/accessibility_main_handler.h
+++ b/chrome/browser/ui/webui/settings/accessibility_main_handler.h
@@ -22,6 +22,10 @@
 class ListValue;
 }
 
+namespace update_client {
+struct CrxUpdateItem;
+}  // namespace update_client
+
 class PrefService;
 
 namespace settings {
@@ -64,6 +68,8 @@
   // component_updater::ServiceObserver:
   void OnEvent(Events event, const std::string& id) override;
 
+  std::unordered_map<std::string, update_client::CrxUpdateItem>
+      downloading_components_;
   PrefService* prefs_;
   ScopedObserver<component_updater::ComponentUpdateService,
                  component_updater::ComponentUpdateService::Observer>
diff --git a/chrome/browser/webauthn/authenticator_request_dialog_model.cc b/chrome/browser/webauthn/authenticator_request_dialog_model.cc
index d586650..04358b98 100644
--- a/chrome/browser/webauthn/authenticator_request_dialog_model.cc
+++ b/chrome/browser/webauthn/authenticator_request_dialog_model.cc
@@ -226,7 +226,7 @@
 }
 
 void AuthenticatorRequestDialogModel::StartPhonePairing() {
-  DCHECK(qr_generator_key_);
+  DCHECK(cable_qr_string_);
   SetCurrentStep(Step::kCableV2QRCode);
 }
 
@@ -585,11 +585,10 @@
 void AuthenticatorRequestDialogModel::set_cable_transport_info(
     bool cable_extension_provided,
     bool have_paired_phones,
-    const base::Optional<std::array<uint8_t, device::cablev2::kQRKeySize>>&
-        qr_generator_key) {
+    const base::Optional<std::string>& cable_qr_string) {
   cable_extension_provided_ = cable_extension_provided;
   have_paired_phones_ = have_paired_phones;
-  qr_generator_key_ = qr_generator_key;
+  cable_qr_string_ = cable_qr_string;
 }
 
 base::WeakPtr<AuthenticatorRequestDialogModel>
diff --git a/chrome/browser/webauthn/authenticator_request_dialog_model.h b/chrome/browser/webauthn/authenticator_request_dialog_model.h
index f23ab63fe..3dcdbb0 100644
--- a/chrome/browser/webauthn/authenticator_request_dialog_model.h
+++ b/chrome/browser/webauthn/authenticator_request_dialog_model.h
@@ -20,8 +20,6 @@
 #include "chrome/browser/webauthn/authenticator_reference.h"
 #include "chrome/browser/webauthn/authenticator_transport.h"
 #include "chrome/browser/webauthn/observable_authenticator_list.h"
-#include "device/fido/cable/cable_discovery_data.h"
-#include "device/fido/cable/v2_constants.h"
 #include "device/fido/fido_request_handler_base.h"
 #include "device/fido/fido_transport_protocol.h"
 
@@ -366,10 +364,7 @@
     return transport_availability_.available_transports;
   }
 
-  base::span<const uint8_t, device::cablev2::kQRKeySize> qr_generator_key()
-      const {
-    return *qr_generator_key_;
-  }
+  const std::string& cable_qr_string() const { return *cable_qr_string_; }
 
   void CollectPIN(base::Optional<int> attempts,
                   base::OnceCallback<void(std::string)> provide_pin_cb);
@@ -413,8 +408,7 @@
   void set_cable_transport_info(
       bool cable_extension_provided,
       bool has_paired_phones,
-      const base::Optional<std::array<uint8_t, device::cablev2::kQRKeySize>>&
-          qr_generator_key);
+      const base::Optional<std::string>& cable_qr_string);
 
   bool win_native_api_enabled() const {
     return transport_availability_.has_win_native_api_authenticator;
@@ -509,8 +503,7 @@
   // have_paired_phones_ indicates whether this profile knows of any paired
   // phones.
   bool have_paired_phones_ = false;
-  base::Optional<std::array<uint8_t, device::cablev2::kQRKeySize>>
-      qr_generator_key_;
+  base::Optional<std::string> cable_qr_string_;
   // win_native_api_already_tried_ is true if the Windows-native UI has been
   // displayed already and the user cancelled it. In this case, we shouldn't
   // jump straight to showing it again.
diff --git a/chrome/browser/webauthn/chrome_authenticator_request_delegate.cc b/chrome/browser/webauthn/chrome_authenticator_request_delegate.cc
index fd728ed..64630c4f 100644
--- a/chrome/browser/webauthn/chrome_authenticator_request_delegate.cc
+++ b/chrome/browser/webauthn/chrome_authenticator_request_delegate.cc
@@ -33,6 +33,7 @@
 #include "content/public/browser/render_frame_host.h"
 #include "content/public/browser/web_contents.h"
 #include "crypto/random.h"
+#include "device/fido/cable/v2_handshake.h"
 #include "device/fido/features.h"
 #include "device/fido/fido_authenticator.h"
 #include "device/fido/fido_discovery_factory.h"
@@ -359,11 +360,13 @@
 
   base::Optional<std::array<uint8_t, device::cablev2::kQRKeySize>>
       qr_generator_key;
+  base::Optional<std::string> qr_string;
   bool have_paired_phones = false;
   std::vector<std::unique_ptr<device::cablev2::Pairing>> paired_phones;
   if (base::FeatureList::IsEnabled(device::kWebAuthPhoneSupport)) {
     qr_generator_key.emplace();
     crypto::RandBytes(*qr_generator_key);
+    qr_string = device::cablev2::qr::Encode(*qr_generator_key);
     paired_phones = GetCablePairings();
     have_paired_phones = !paired_phones.empty();
 
@@ -379,8 +382,8 @@
     return;
   }
 
-  weak_dialog_model_->set_cable_transport_info(
-      cable_extension_provided, have_paired_phones, qr_generator_key);
+  weak_dialog_model_->set_cable_transport_info(cable_extension_provided,
+                                               have_paired_phones, qr_string);
   discovery_factory->set_cable_data(std::move(pairings), qr_generator_key,
                                     std::move(paired_phones));
 
diff --git a/chrome/build/linux.pgo.txt b/chrome/build/linux.pgo.txt
index 0fb92e1..5874a2a 100644
--- a/chrome/build/linux.pgo.txt
+++ b/chrome/build/linux.pgo.txt
@@ -1 +1 @@
-chrome-linux-master-1601899131-feda22e3411bdb75c005a38c5197b1e76964f668.profdata
+chrome-linux-master-1601920728-6028d40b51a1c3ae51d439d61f82d0425613d326.profdata
diff --git a/chrome/build/win32.pgo.txt b/chrome/build/win32.pgo.txt
index 75e18c1..3805a6fb 100644
--- a/chrome/build/win32.pgo.txt
+++ b/chrome/build/win32.pgo.txt
@@ -1 +1 @@
-chrome-win32-master-1601877511-e7db431e3df4886bdee72d3fd137fde2437674f5.profdata
+chrome-win32-master-1601899131-c43b6187adc90e2cb7e0fb0be3a8513091bf4fd9.profdata
diff --git a/chrome/common/webui_url_constants.cc b/chrome/common/webui_url_constants.cc
index b14b8d1..7d3c279 100644
--- a/chrome/common/webui_url_constants.cc
+++ b/chrome/common/webui_url_constants.cc
@@ -422,6 +422,7 @@
 const char kPrivacySubPage[] = "privacy";
 const char kResetSubPage[] = "reset";
 const char kResetProfileSettingsSubPage[] = "resetProfileSettings";
+const char kSafeBrowsingEnhancedProtectionSubPage[] = "security?q=enhanced";
 const char kSafeBrowsingSubPage[] = "security";
 const char kSafetyCheckSubPage[] = "safetyCheck";
 const char kSearchSubPage[] = "search";
diff --git a/chrome/common/webui_url_constants.h b/chrome/common/webui_url_constants.h
index fae8f94c..936f710 100644
--- a/chrome/common/webui_url_constants.h
+++ b/chrome/common/webui_url_constants.h
@@ -372,6 +372,7 @@
 extern const char kPrivacySubPage[];
 extern const char kResetSubPage[];
 extern const char kResetProfileSettingsSubPage[];
+extern const char kSafeBrowsingEnhancedProtectionSubPage[];
 extern const char kSafeBrowsingSubPage[];
 extern const char kSafetyCheckSubPage[];
 extern const char kSearchSubPage[];
diff --git a/chrome/renderer/chrome_content_settings_agent_delegate.cc b/chrome/renderer/chrome_content_settings_agent_delegate.cc
index 5a5f2ded..e3271544 100644
--- a/chrome/renderer/chrome_content_settings_agent_delegate.cc
+++ b/chrome/renderer/chrome_content_settings_agent_delegate.cc
@@ -12,6 +12,7 @@
 #include "third_party/blink/public/web/web_local_frame.h"
 
 #if BUILDFLAG(ENABLE_EXTENSIONS)
+#include "base/metrics/histogram_functions.h"
 #include "extensions/common/constants.h"
 #include "extensions/common/extension.h"
 #include "extensions/common/permissions/api_permission.h"
@@ -73,6 +74,16 @@
       extension_dispatcher_->script_context_set().GetCurrent();
   if (current_context && current_context->HasAPIPermission(
                              extensions::APIPermission::kClipboardRead)) {
+    if (current_context->context_type() ==
+        extensions::Feature::CONTENT_SCRIPT_CONTEXT) {
+      bool has_user_activation =
+          render_frame_->GetWebFrame()->HasTransientUserActivation();
+      // TODO(https://crbug.com/1051198): Evaluate and deprecate content script
+      // read without user activation after enough data is gathered.
+      base::UmaHistogramBoolean(
+          "Clipboard.ExtensionContentScriptReadHasUserActivation",
+          has_user_activation);
+    }
     return true;
   }
 #endif
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
index dd010a6..6448d175 100644
--- a/chrome/test/BUILD.gn
+++ b/chrome/test/BUILD.gn
@@ -4580,7 +4580,6 @@
       "../browser/feedback/system_logs/log_sources/crash_ids_source_unittest.cc",
 
       # NTP is in native code on Android.
-      "../browser/search/ntp_features_unittest.cc",
       "../browser/search/shopping_tasks/shopping_tasks_service_unittest.cc",
     ]
     if (is_posix || is_fuchsia) {
@@ -6216,7 +6215,6 @@
       "../browser/ui/search/instant_extended_interactive_uitest.cc",
       "../browser/ui/search/instant_test_base.cc",
       "../browser/ui/search/instant_test_base.h",
-      "../browser/ui/search/local_ntp_uitest.cc",
       "../browser/ui/search/third_party_ntp_uitest.cc",
       "../browser/ui/send_mouse_move_uitest_win.cc",
       "../browser/ui/signin_view_controller_interactive_uitest.cc",
diff --git a/chrome/test/data/extensions/api_test/metrics/manifest.json b/chrome/test/data/extensions/api_test/metrics/manifest.json
index 1f3043f..c844a9a 100644
--- a/chrome/test/data/extensions/api_test/metrics/manifest.json
+++ b/chrome/test/data/extensions/api_test/metrics/manifest.json
@@ -5,7 +5,8 @@
   "manifest_version": 2,
   "description": "end-to-end browser test for chrome.metricsPrivate API",
   "background": {
-    "scripts": ["test.js"]
+    "scripts": ["test.js"],
+    "persistent": true
   },
   "permissions": ["metricsPrivate"]
 }
diff --git a/chrome/test/data/extensions/api_test/service_worker/worker_based_background/windows_basic/service_worker_background.js b/chrome/test/data/extensions/api_test/service_worker/worker_based_background/windows_basic/service_worker_background.js
index f1dd4f0..b0096962 100644
--- a/chrome/test/data/extensions/api_test/service_worker/worker_based_background/windows_basic/service_worker_background.js
+++ b/chrome/test/data/extensions/api_test/service_worker/worker_based_background/windows_basic/service_worker_background.js
@@ -5,9 +5,7 @@
 var createWindowUtil = function(urlToLoad, createdCallback) {
   try {
     chrome.windows.create({ 'url': urlToLoad, 'type': 'normal',
-        'width': 600, 'height': 400 }, function(window) {
-      createdCallback({width: window.width, height: window.height});
-    });
+        'width': 600, 'height': 400 }, createdCallback);
   } catch (e) {
     chrome.test.fail(e);
   }
@@ -15,9 +13,23 @@
 
 var getAllWindowUtil = function(populateValue, getAllCallback) {
   try {
-    chrome.windows.getAll({populate: populateValue}, function(window) {
-      getAllCallback({length: window.length});
-    });
+    chrome.windows.getAll({populate: populateValue}, getAllCallback);
+  } catch (e) {
+    chrome.test.fail(e);
+  }
+}
+
+var getWindowUtil = function(windowId, getCallback) {
+  try {
+    chrome.windows.get(windowId, getCallback);
+  } catch (e) {
+    chrome.test.fail(e);
+  }
+}
+
+var getCurrentWindowUtil = function(getCurrentCallback) {
+  try {
+    chrome.windows.getCurrent(getCurrentCallback);
   } catch (e) {
     chrome.test.fail(e);
   }
@@ -25,27 +37,38 @@
 
 chrome.test.runTests([
   // Get the window that was automatically created.
-  function testWindowGetBeforeCreate() {
+  function testWindowGetAllBeforeCreate() {
     var populateValue = true;
-    getAllWindowUtil(populateValue, function(windowData) {
-      chrome.test.assertEq(1, windowData.length);
+    getAllWindowUtil(populateValue, function(allWindowsData) {
+      chrome.test.assertEq(1, allWindowsData.length);
       chrome.test.succeed();
     });
   },
   // Create a new window.
   function testWindowCreate() {
-    createWindowUtil('blank.html', function(windowData) {
-      chrome.test.assertEq(600, windowData.width);
-      chrome.test.assertEq(400, windowData.height);
+    createWindowUtil('blank.html', function(createdWindowData) {
+      chrome.test.assertEq(600, createdWindowData.width);
+      chrome.test.assertEq(400, createdWindowData.height);
       chrome.test.succeed();
     });
   },
   // Check that the created window exists.
-  function testWindowGetAfterCreate() {
+  function testWindowGetAllAfterCreate() {
     var populateValue = true;
-    getAllWindowUtil(populateValue, function(windowData) {
-      chrome.test.assertEq(2, windowData.length);
+    getAllWindowUtil(populateValue, function(allWindowsData) {
+      chrome.test.assertEq(2, allWindowsData.length);
+      var createdWindowId = allWindowsData[allWindowsData.length - 1].id;
+      getWindowUtil(createdWindowId, function(windowData) {
+        chrome.test.assertEq(600, windowData.width);
+        chrome.test.assertEq(400, windowData.height);
+        chrome.test.succeed();
+      });
+      // Check that the created window is the current window.
+      getCurrentWindowUtil(function(currentWindowData) {
+        chrome.test.assertEq(createdWindowId, currentWindowData.id);
+        chrome.test.succeed();
+      });
       chrome.test.succeed();
     });
   },
-]);
+  ]);
diff --git a/chrome/test/data/pdf/params_parser_test.js b/chrome/test/data/pdf/params_parser_test.js
index b19810a..3728853 100644
--- a/chrome/test/data/pdf/params_parser_test.js
+++ b/chrome/test/data/pdf/params_parser_test.js
@@ -13,6 +13,10 @@
    */
   function testParamsParser() {
     const paramsParser = new OpenPdfParamsParser(function(destination) {
+      // Set the dummy viewport dimensions for calculating the zoom level for
+      // view destination with 'FitR' type.
+      paramsParser.setViewportDimensions({width: 300, height: 500});
+
       if (destination === 'RU') {
         return Promise.resolve(
             {messageId: 'getNamedDestination_1', pageNumber: 26});
@@ -40,9 +44,27 @@
           namedDestinationView: 'XYZ,111,null,1.7',
           pageNumber: 13
         });
+      } else if (destination === 'DestWithFitR') {
+        return Promise.resolve({
+          messageId: 'getNamedDestination_7',
+          namedDestinationView: 'FitR,20,100,120,300',
+          pageNumber: 0
+        });
+      } else if (destination === 'DestWithFitRReversedCoordinates') {
+        return Promise.resolve({
+          messageId: 'getNamedDestination_8',
+          namedDestinationView: 'FitR,120,300,20,100',
+          pageNumber: 0
+        });
+      } else if (destination === 'DestWithFitRWithNull') {
+        return Promise.resolve({
+          messageId: 'getNamedDestination_9',
+          namedDestinationView: 'FitR,null,100,100,300',
+          pageNumber: 0
+        });
       } else {
         return Promise.resolve(
-            {messageId: 'getNamedDestination_7', pageNumber: -1});
+            {messageId: 'getNamedDestination_10', pageNumber: -1});
       }
     });
 
@@ -142,6 +164,38 @@
           chrome.test.assertEq(undefined, params.viewPosition);
         });
 
+    // Checking #nameddest=name with a nameddest that specifies the view fit
+    // type is "FitR" with multiple valid parameters.
+    paramsParser.getViewportFromUrlParams(
+        `${url}#nameddest=DestWithFitR`, function(params) {
+          chrome.test.assertEq(0, params.page);
+          chrome.test.assertEq(2.5, params.zoom);
+          chrome.test.assertEq(20, params.position.x);
+          chrome.test.assertEq(100, params.position.y);
+          chrome.test.assertEq(undefined, params.viewPosition);
+        });
+
+    // Checking #nameddest=name with a nameddest that specifies the view fit
+    // type is "FitR" with multiple valid parameters.
+    paramsParser.getViewportFromUrlParams(
+        `${url}#nameddest=DestWithFitRReversedCoordinates`, function(params) {
+          chrome.test.assertEq(0, params.page);
+          chrome.test.assertEq(2.5, params.zoom);
+          chrome.test.assertEq(20, params.position.x);
+          chrome.test.assertEq(100, params.position.y);
+          chrome.test.assertEq(undefined, params.viewPosition);
+        });
+
+    // Checking #nameddest=name with a nameddest that specifies the view fit
+    // type is "FitR" with one NULL parameters.
+    paramsParser.getViewportFromUrlParams(
+        `${url}#nameddest=DestWithFitRWithNull`, function(params) {
+          chrome.test.assertEq(0, params.page);
+          chrome.test.assertEq(undefined, params.zoom);
+          chrome.test.assertEq(undefined, params.position);
+          chrome.test.assertEq(undefined, params.viewPosition);
+        });
+
     // Checking #view=Fit.
     paramsParser.getViewportFromUrlParams(`${url}#view=Fit`, function(params) {
       chrome.test.assertEq(FittingType.FIT_TO_PAGE, params.view);
@@ -205,6 +259,20 @@
           chrome.test.assertEq(undefined, params.view);
           chrome.test.assertEq(undefined, params.viewPosition);
         });
+    // Checking #view=[wrong parameter].
+    paramsParser.getViewportFromUrlParams(`${url}#view=FitR`, function(params) {
+      chrome.test.assertEq(undefined, params.view);
+      chrome.test.assertEq(undefined, params.viewPosition);
+    });
+    // Checking #view=[wrong parameter],[position].
+    paramsParser.getViewportFromUrlParams(
+        `${url}#view=FitR,20,100,120,300`, function(params) {
+          chrome.test.assertEq(undefined, params.zoom);
+          chrome.test.assertEq(undefined, params.position);
+          chrome.test.assertEq(undefined, params.view);
+          chrome.test.assertEq(undefined, params.viewPosition);
+        });
+
 
     // Checking #toolbar=0 to disable the toolbar.
     chrome.test.assertFalse(paramsParser.shouldShowToolbar(`${url}#toolbar=0`));
diff --git a/chrome/test/data/webui/BUILD.gn b/chrome/test/data/webui/BUILD.gn
index c7de1d53..d3db9062 100644
--- a/chrome/test/data/webui/BUILD.gn
+++ b/chrome/test/data/webui/BUILD.gn
@@ -293,6 +293,7 @@
         "$root_gen_dir/chrome/test/data/webui/settings/chromeos/internet_config_test.m.js",
         "$root_gen_dir/chrome/test/data/webui/settings/chromeos/internet_detail_page_tests.m.js",
         "$root_gen_dir/chrome/test/data/webui/settings/chromeos/internet_known_networks_page_tests.m.js",
+        "$root_gen_dir/chrome/test/data/webui/settings/chromeos/internet_subpage_tests.m.js",
         "$root_gen_dir/chrome/test/data/webui/settings/chromeos/localized_link_test.m.js",
         "$root_gen_dir/chrome/test/data/webui/settings/chromeos/multidevice_feature_item_tests.m.js",
         "$root_gen_dir/chrome/test/data/webui/settings/chromeos/multidevice_feature_toggle_tests.m.js",
diff --git a/chrome/test/data/webui/chromeos/diagnostics/cpu_card_test.js b/chrome/test/data/webui/chromeos/diagnostics/cpu_card_test.js
index 2f6c65f..393f5817 100644
--- a/chrome/test/data/webui/chromeos/diagnostics/cpu_card_test.js
+++ b/chrome/test/data/webui/chromeos/diagnostics/cpu_card_test.js
@@ -64,6 +64,11 @@
       assertEquals(currentlyUsingValue, dataPoints[0].value);
       assertEquals(
           fakeCpuUsage[0].cpu_temp_degrees_celcius, dataPoints[1].value);
+
+      const cpuChart =
+          diagnostics_test_utils.getRealtimeCpuChartElement(cpuElement);
+      assertEquals(fakeCpuUsage[0].percent_usage_user, cpuChart.user);
+      assertEquals(fakeCpuUsage[0].percent_usage_system, cpuChart.system);
     });
   });
 });
\ No newline at end of file
diff --git a/chrome/test/data/webui/chromeos/diagnostics/diagnostics_test_utils.js b/chrome/test/data/webui/chromeos/diagnostics/diagnostics_test_utils.js
index 92ca728c..2cd8e1c 100644
--- a/chrome/test/data/webui/chromeos/diagnostics/diagnostics_test_utils.js
+++ b/chrome/test/data/webui/chromeos/diagnostics/diagnostics_test_utils.js
@@ -20,4 +20,14 @@
  */
 export function getPercentBarChartElement(element) {
   return element.shadowRoot.querySelector('percent-bar-chart');
-}
\ No newline at end of file
+}
+
+/**
+ * Helper function for getting a realtime-cpu-chart element from a
+ * diagnostics card.
+ * @param {!HTMLElement} element
+ * @return {!Array<!HTMLElement>}
+ */
+export function getRealtimeCpuChartElement(element) {
+  return element.shadowRoot.querySelector('realtime-cpu-chart');
+}
diff --git a/chrome/test/data/webui/settings/chromeos/BUILD.gn b/chrome/test/data/webui/settings/chromeos/BUILD.gn
index c5e20d5..c641b68 100644
--- a/chrome/test/data/webui/settings/chromeos/BUILD.gn
+++ b/chrome/test/data/webui/settings/chromeos/BUILD.gn
@@ -46,6 +46,7 @@
     "internet_config_test.js",
     "internet_detail_page_tests.js",
     "internet_known_networks_page_tests.js",
+    "internet_subpage_tests.js",
     "localized_link_test.js",
     "multidevice_feature_item_tests.js",
     "multidevice_feature_toggle_tests.js",
diff --git a/chrome/test/data/webui/settings/chromeos/internet_subpage_tests.js b/chrome/test/data/webui/settings/chromeos/internet_subpage_tests.js
index a068f7b..98ab4ba0 100644
--- a/chrome/test/data/webui/settings/chromeos/internet_subpage_tests.js
+++ b/chrome/test/data/webui/settings/chromeos/internet_subpage_tests.js
@@ -2,6 +2,18 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+// clang-format off
+// #import 'chrome://os-settings/chromeos/os_settings.js';
+
+// #import {FakeNetworkConfig} from 'chrome://test/chromeos/fake_network_config_mojom.m.js';
+// #import {MojoInterfaceProviderImpl} from 'chrome://resources/cr_components/chromeos/network/mojo_interface_provider.m.js';
+// #import {OncMojo} from 'chrome://resources/cr_components/chromeos/network/onc_mojo.m.js';
+// #import {Router, routes} from 'chrome://os-settings/chromeos/os_settings.js';
+// #import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
+// #import {getDeepActiveElement} from 'chrome://resources/js/util.m.js';
+// #import {eventToPromise, flushTasks, waitAfterNextRender} from 'chrome://test/test_util.m.js';
+// clang-format on
+
 suite('InternetSubpage', function() {
   /** @type {?SettingsInternetSubpageElement} */
   let internetSubpage = null;
@@ -98,7 +110,7 @@
       await flushAsync();
 
       const deepLinkElement = internetSubpage.$$('#deviceEnabledButton');
-      assert(!!deepLinkElement);
+      assertTrue(!!deepLinkElement);
       await test_util.waitAfterNextRender(deepLinkElement);
       assertEquals(
           deepLinkElement, getDeepActiveElement(),
@@ -147,7 +159,7 @@
       await flushAsync();
 
       const deepLinkElement = internetSubpage.$$('#deviceEnabledButton');
-      assert(!!deepLinkElement);
+      assertTrue(!!deepLinkElement);
       await test_util.waitAfterNextRender(deepLinkElement);
       assertEquals(
           deepLinkElement, getDeepActiveElement(),
@@ -232,7 +244,7 @@
       await flushAsync();
 
       const deepLinkElement = internetSubpage.$$('#tetherEnabledButton');
-      assert(!!deepLinkElement);
+      assertTrue(!!deepLinkElement);
       await test_util.waitAfterNextRender(deepLinkElement);
       assertEquals(
           deepLinkElement, getDeepActiveElement(),
diff --git a/chrome/test/data/webui/settings/chromeos/os_settings_v3_browsertest.js b/chrome/test/data/webui/settings/chromeos/os_settings_v3_browsertest.js
index a777a47..61e7365 100644
--- a/chrome/test/data/webui/settings/chromeos/os_settings_v3_browsertest.js
+++ b/chrome/test/data/webui/settings/chromeos/os_settings_v3_browsertest.js
@@ -99,6 +99,7 @@
  ['InternetConfig', 'internet_config_test.m.js'],
  ['InternetDetailPage', 'internet_detail_page_tests.m.js'],
  ['InternetKnownNetworksPage', 'internet_known_networks_page_tests.m.js'],
+ ['InternetSubpage', 'internet_subpage_tests.m.js'],
  ['LocalizedLink', 'localized_link_test.m.js'],
  ['MultideviceFeatureItem', 'multidevice_feature_item_tests.m.js'],
  ['MultideviceFeatureToggle', 'multidevice_feature_toggle_tests.m.js'],
diff --git a/chrome/test/data/webui/tab_strip/drag_manager_test.js b/chrome/test/data/webui/tab_strip/drag_manager_test.js
index 2465aef..5223c18 100644
--- a/chrome/test/data/webui/tab_strip/drag_manager_test.js
+++ b/chrome/test/data/webui/tab_strip/drag_manager_test.js
@@ -650,7 +650,7 @@
     assertFalse(isDraggedOut);
   });
 
-  test('DropTabWithoutMovingShowsContextMenu', async () => {
+  test('DragEndWithoutMovingShowsContextMenu', async () => {
     const draggedTab = delegate.children[0];
     const dragDetails = {
       bubbles: true,
@@ -660,7 +660,7 @@
       dataTransfer: new MockDataTransfer(),
     };
     draggedTab.dispatchEvent(new DragEvent('dragstart', dragDetails));
-    draggedTab.dispatchEvent(new DragEvent('drop', dragDetails));
+    draggedTab.dispatchEvent(new DragEvent('dragend', dragDetails));
 
     assertEquals(
         1, testTabStripEmbedderProxy.getCallCount('showTabContextMenu'));
@@ -671,7 +671,7 @@
     assertEquals(dragDetails.clientY, clientY);
   });
 
-  test('DropTabAfterMovingDoesNotShowContextMenu', async () => {
+  test('DragendAfterMovingDoesNotShowContextMenu', async () => {
     const draggedTab = delegate.children[0];
     const dragOverTab = delegate.children[1];
     const dragDetails = {
@@ -684,7 +684,7 @@
     draggedTab.dispatchEvent(new DragEvent('dragstart', dragDetails));
     dragOverTab.dispatchEvent(new DragEvent(
         'dragover', Object.assign({}, dragDetails, {clientX: 200})));
-    draggedTab.dispatchEvent(new DragEvent('drop', dragDetails));
+    draggedTab.dispatchEvent(new DragEvent('dragend', dragDetails));
 
     assertEquals(
         0, testTabStripEmbedderProxy.getCallCount('showTabContextMenu'));
diff --git a/chrome/test/data/webui/webui_resource_browsertest.cc b/chrome/test/data/webui/webui_resource_browsertest.cc
index cee6f71..c10bd5b4 100644
--- a/chrome/test/data/webui/webui_resource_browsertest.cc
+++ b/chrome/test/data/webui/webui_resource_browsertest.cc
@@ -116,13 +116,6 @@
   std::vector<int> include_libraries_;
 };
 
-IN_PROC_BROWSER_TEST_F(WebUIResourceBrowserTestV0, I18nProcessTest) {
-  AddLibrary(IDR_WEBUI_JS_LOAD_TIME_DATA);
-  AddLibrary(IDR_WEBUI_JS_I18N_TEMPLATE_NO_PROCESS);
-  AddLibrary(IDR_WEBUI_JS_UTIL);
-  LoadFile("i18n_process_test.html");
-}
-
 IN_PROC_BROWSER_TEST_F(WebUIResourceBrowserTest, ListTest) {
   LoadTestUrl("js/cr/ui/list_test.html");
 }
diff --git a/chromecast/browser/BUILD.gn b/chromecast/browser/BUILD.gn
index d04d8b4..7bf72823 100644
--- a/chromecast/browser/BUILD.gn
+++ b/chromecast/browser/BUILD.gn
@@ -446,6 +446,8 @@
       "webview/platform_views_rpc_instance.h",
       "webview/web_content_controller.cc",
       "webview/web_content_controller.h",
+      "webview/webview_browser_context.cc",
+      "webview/webview_browser_context.h",
       "webview/webview_controller.cc",
       "webview/webview_controller.h",
       "webview/webview_navigation_throttle.cc",
diff --git a/chromecast/browser/cast_content_browser_client.cc b/chromecast/browser/cast_content_browser_client.cc
index 6763a87..eb7dfed 100644
--- a/chromecast/browser/cast_content_browser_client.cc
+++ b/chromecast/browser/cast_content_browser_client.cc
@@ -867,7 +867,6 @@
 void CastContentBrowserClient::RegisterNonNetworkNavigationURLLoaderFactories(
     int frame_tree_node_id,
     base::UkmSourceId ukm_source_id,
-    NonNetworkURLLoaderFactoryDeprecatedMap* uniquely_owned_factories,
     NonNetworkURLLoaderFactoryMap* factories) {
 #if BUILDFLAG(ENABLE_CHROMECAST_EXTENSIONS)
   content::WebContents* web_contents =
@@ -886,7 +885,6 @@
 void CastContentBrowserClient::RegisterNonNetworkSubresourceURLLoaderFactories(
     int render_process_id,
     int render_frame_id,
-    NonNetworkURLLoaderFactoryDeprecatedMap* uniquely_owned_factories,
     NonNetworkURLLoaderFactoryMap* factories) {
   if (render_frame_id == MSG_ROUTING_NONE) {
     LOG(ERROR) << "Service worker not supported.";
diff --git a/chromecast/browser/cast_content_browser_client.h b/chromecast/browser/cast_content_browser_client.h
index ebf2f2a..e0f806b 100644
--- a/chromecast/browser/cast_content_browser_client.h
+++ b/chromecast/browser/cast_content_browser_client.h
@@ -229,12 +229,10 @@
   void RegisterNonNetworkNavigationURLLoaderFactories(
       int frame_tree_node_id,
       base::UkmSourceId ukm_source_id,
-      NonNetworkURLLoaderFactoryDeprecatedMap* uniquely_owned_factories,
       NonNetworkURLLoaderFactoryMap* factories) override;
   void RegisterNonNetworkSubresourceURLLoaderFactories(
       int render_process_id,
       int render_frame_id,
-      NonNetworkURLLoaderFactoryDeprecatedMap* uniquely_owned_factories,
       NonNetworkURLLoaderFactoryMap* factories) override;
   void OnNetworkServiceCreated(
       network::mojom::NetworkService* network_service) override;
diff --git a/chromecast/browser/webview/proto/webview.proto b/chromecast/browser/webview/proto/webview.proto
index c4ef025..24fd148 100644
--- a/chromecast/browser/webview/proto/webview.proto
+++ b/chromecast/browser/webview/proto/webview.proto
@@ -26,6 +26,9 @@
   // This is the cast window ID that will be assigned to the web contents
   // window.
   int32 window_id = 2;
+  // True if this webview should exist in an incognito context. It will never
+  // persist state.
+  bool incognito = 3;
 }
 
 message WebviewCreateResponse {
diff --git a/chromecast/browser/webview/webview_browser_context.cc b/chromecast/browser/webview/webview_browser_context.cc
new file mode 100644
index 0000000..fc182d5
--- /dev/null
+++ b/chromecast/browser/webview/webview_browser_context.cc
@@ -0,0 +1,102 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chromecast/browser/webview/webview_browser_context.h"
+#include "base/files/file_path.h"
+#include "content/public/browser/resource_context.h"
+
+namespace chromecast {
+
+class WebviewBrowserContext::ResourceContext : public content::ResourceContext {
+ public:
+  ResourceContext() {}
+  ~ResourceContext() override {}
+
+  ResourceContext(const ResourceContext&) = delete;
+  void operator=(const ResourceContext&) = delete;
+};
+
+WebviewBrowserContext::WebviewBrowserContext(
+    content::BrowserContext* main_browser_context)
+    : main_browser_context_(main_browser_context),
+      resource_context_(std::make_unique<ResourceContext>()) {}
+WebviewBrowserContext::~WebviewBrowserContext() {}
+
+base::FilePath WebviewBrowserContext::GetPath() {
+  return base::FilePath();
+}
+
+bool WebviewBrowserContext::IsOffTheRecord() {
+  return true;
+}
+
+content::ResourceContext* WebviewBrowserContext::GetResourceContext() {
+  return resource_context_.get();
+}
+
+content::DownloadManagerDelegate*
+WebviewBrowserContext::GetDownloadManagerDelegate() {
+  return main_browser_context_->GetDownloadManagerDelegate();
+}
+
+content::BrowserPluginGuestManager* WebviewBrowserContext::GetGuestManager() {
+  return nullptr;
+}
+
+storage::SpecialStoragePolicy*
+WebviewBrowserContext::GetSpecialStoragePolicy() {
+  return nullptr;
+}
+
+content::PushMessagingService*
+WebviewBrowserContext::GetPushMessagingService() {
+  return nullptr;
+}
+
+content::StorageNotificationService*
+WebviewBrowserContext::GetStorageNotificationService() {
+  return nullptr;
+}
+
+content::SSLHostStateDelegate*
+WebviewBrowserContext::GetSSLHostStateDelegate() {
+  return nullptr;
+}
+
+content::PermissionControllerDelegate*
+WebviewBrowserContext::GetPermissionControllerDelegate() {
+  return main_browser_context_->GetPermissionControllerDelegate();
+}
+
+content::ClientHintsControllerDelegate*
+WebviewBrowserContext::GetClientHintsControllerDelegate() {
+  return nullptr;
+}
+
+content::BackgroundFetchDelegate*
+WebviewBrowserContext::GetBackgroundFetchDelegate() {
+  return nullptr;
+}
+
+content::BackgroundSyncController*
+WebviewBrowserContext::GetBackgroundSyncController() {
+  return nullptr;
+}
+
+content::BrowsingDataRemoverDelegate*
+WebviewBrowserContext::GetBrowsingDataRemoverDelegate() {
+  return nullptr;
+}
+
+content::SharedCorsOriginAccessList*
+WebviewBrowserContext::GetSharedCorsOriginAccessList() {
+  return main_browser_context_->GetSharedCorsOriginAccessList();
+}
+
+std::unique_ptr<content::ZoomLevelDelegate>
+WebviewBrowserContext::CreateZoomLevelDelegate(const base::FilePath&) {
+  return nullptr;
+}
+
+}  // namespace chromecast
diff --git a/chromecast/browser/webview/webview_browser_context.h b/chromecast/browser/webview/webview_browser_context.h
new file mode 100644
index 0000000..235f6525
--- /dev/null
+++ b/chromecast/browser/webview/webview_browser_context.h
@@ -0,0 +1,53 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROMECAST_BROWSER_WEBVIEW_WEBVIEW_BROWSER_CONTEXT_H_
+#define CHROMECAST_BROWSER_WEBVIEW_WEBVIEW_BROWSER_CONTEXT_H_
+
+#include "content/public/browser/browser_context.h"
+
+namespace chromecast {
+
+// This provides an incognito browser context for webviews to use.
+class WebviewBrowserContext : public content::BrowserContext {
+ public:
+  explicit WebviewBrowserContext(content::BrowserContext* main_browser_context);
+  ~WebviewBrowserContext() override;
+
+  WebviewBrowserContext(const WebviewBrowserContext&) = delete;
+  void operator=(const WebviewBrowserContext&) = delete;
+
+  // BrowserContext implementation:
+  base::FilePath GetPath() override;
+  bool IsOffTheRecord() override;
+  content::ResourceContext* GetResourceContext() override;
+  content::DownloadManagerDelegate* GetDownloadManagerDelegate() override;
+  content::BrowserPluginGuestManager* GetGuestManager() override;
+  storage::SpecialStoragePolicy* GetSpecialStoragePolicy() override;
+  content::PushMessagingService* GetPushMessagingService() override;
+  content::StorageNotificationService* GetStorageNotificationService() override;
+  content::SSLHostStateDelegate* GetSSLHostStateDelegate() override;
+  content::PermissionControllerDelegate* GetPermissionControllerDelegate()
+      override;
+  content::ClientHintsControllerDelegate* GetClientHintsControllerDelegate()
+      override;
+  content::BackgroundFetchDelegate* GetBackgroundFetchDelegate() override;
+  content::BackgroundSyncController* GetBackgroundSyncController() override;
+  content::BrowsingDataRemoverDelegate* GetBrowsingDataRemoverDelegate()
+      override;
+  content::SharedCorsOriginAccessList* GetSharedCorsOriginAccessList() override;
+  std::unique_ptr<content::ZoomLevelDelegate> CreateZoomLevelDelegate(
+      const base::FilePath&) override;
+
+ private:
+  class ResourceContext;
+
+  content::BrowserContext* main_browser_context_;
+
+  std::unique_ptr<ResourceContext> resource_context_;
+};
+
+}  // namespace chromecast
+
+#endif  // CHROMECAST_BROWSER_WEBVIEW_WEBVIEW_BROWSER_CONTEXT_H_
diff --git a/chromecast/browser/webview/webview_rpc_instance.cc b/chromecast/browser/webview/webview_rpc_instance.cc
index df69663a..3c451aed 100644
--- a/chromecast/browser/webview/webview_rpc_instance.cc
+++ b/chromecast/browser/webview/webview_rpc_instance.cc
@@ -9,6 +9,7 @@
 #include "chromecast/browser/cast_browser_context.h"
 #include "chromecast/browser/cast_browser_process.h"
 #include "chromecast/browser/webview/platform_views_rpc_instance.h"
+#include "chromecast/browser/webview/webview_browser_context.h"
 #include "chromecast/browser/webview/webview_controller.h"
 #include "third_party/grpc/src/include/grpcpp/grpcpp.h"
 #include "third_party/grpc/src/include/grpcpp/security/server_credentials.h"
@@ -46,11 +47,14 @@
       FROM_HERE,
       base::BindOnce(&WebviewRpcInstance::CreateWebview, base::Unretained(this),
                      request_->create().webview_id(),
-                     request_->create().window_id()));
+                     request_->create().window_id(),
+                     request_->create().incognito()));
   return true;
 }
 
-void WebviewRpcInstance::CreateWebview(int app_id, int window_id) {
+void WebviewRpcInstance::CreateWebview(int app_id,
+                                       int window_id,
+                                       bool incognito) {
   app_id_ = app_id;
   window_id_ = window_id;
   // Only start listening for window events after the Webview is created. It
@@ -60,6 +64,11 @@
 
   content::BrowserContext* browser_context =
       shell::CastBrowserProcess::GetInstance()->browser_context();
+  if (incognito) {
+    incognito_context_ =
+        std::make_unique<WebviewBrowserContext>(browser_context);
+    browser_context = incognito_context_.get();
+  }
   controller_ = std::make_unique<WebviewController>(browser_context, this,
                                                     enabled_for_dev_);
 
diff --git a/chromecast/browser/webview/webview_rpc_instance.h b/chromecast/browser/webview/webview_rpc_instance.h
index 6a7f1ab9..d2860cc 100644
--- a/chromecast/browser/webview/webview_rpc_instance.h
+++ b/chromecast/browser/webview/webview_rpc_instance.h
@@ -9,6 +9,8 @@
 
 namespace chromecast {
 
+class WebviewBrowserContext;
+
 class WebviewRpcInstance : public PlatformViewsRpcInstance {
  public:
   WebviewRpcInstance(webview::PlatformViewsService::AsyncService* service,
@@ -23,9 +25,10 @@
   bool Initialize() override;
 
  private:
-  void CreateWebview(int app_id, int window_id);
+  void CreateWebview(int app_id, int window_id, bool incognito);
   webview::PlatformViewsService::AsyncService* platform_views_service_;
   bool enabled_for_dev_ = false;
+  std::unique_ptr<WebviewBrowserContext> incognito_context_;
 
   DISALLOW_COPY_AND_ASSIGN(WebviewRpcInstance);
 };
diff --git a/chromeos/components/diagnostics_ui/resources/cpu_card.html b/chromeos/components/diagnostics_ui/resources/cpu_card.html
index 6d079b6..b1c66e2 100644
--- a/chromeos/components/diagnostics_ui/resources/cpu_card.html
+++ b/chromeos/components/diagnostics_ui/resources/cpu_card.html
@@ -4,6 +4,10 @@
 <diagnostics-card>
   <div id="cardTitle" slot="title">[[i18n('cpuTitle')]]</div>
   <!-- TODO(michaelcheco): Add i18n string for percent number format -->
+  <realtime-cpu-chart slot="left-panel" id="realtimeCpuChart"
+    user="[[cpuUsage_.percent_usage_user]]"
+    system="[[cpuUsage_.percent_usage_system]]">
+  </realtime-cpu-chart>
   <data-point slot="body" id="cpuUsageUser"
     value="[[computeCurrentlyUsing_(cpuUsage_.percent_usage_system,
         cpuUsage_.percent_usage_user)]]">
diff --git a/chromeos/components/diagnostics_ui/resources/cpu_card.js b/chromeos/components/diagnostics_ui/resources/cpu_card.js
index 4c6b4bb0..aec8b026 100644
--- a/chromeos/components/diagnostics_ui/resources/cpu_card.js
+++ b/chromeos/components/diagnostics_ui/resources/cpu_card.js
@@ -5,8 +5,10 @@
 import './data_point.js';
 import './diagnostics_card.js';
 import './diagnostics_shared_css.js';
+import './realtime_cpu_chart.js';
 
 import {html, Polymer} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
+
 import {CpuUsage, SystemDataProviderInterface} from './diagnostics_types.js'
 import {getSystemDataProvider} from './mojo_interface_provider.js';
 import {I18nBehavior} from 'chrome://resources/js/i18n_behavior.m.js';
diff --git a/chromeos/components/phonehub/BUILD.gn b/chromeos/components/phonehub/BUILD.gn
index 8d3a7e9..c6a8dc7c 100644
--- a/chromeos/components/phonehub/BUILD.gn
+++ b/chromeos/components/phonehub/BUILD.gn
@@ -22,6 +22,8 @@
     "connection_scheduler.h",
     "connection_scheduler_impl.cc",
     "connection_scheduler_impl.h",
+    "cros_state_sender.cc",
+    "cros_state_sender.h",
     "do_not_disturb_controller.cc",
     "do_not_disturb_controller.h",
     "do_not_disturb_controller_impl.cc",
@@ -157,6 +159,7 @@
     "browser_tabs_model_unittest.cc",
     "connection_manager_impl_unittest.cc",
     "connection_scheduler_impl_unittest.cc",
+    "cros_state_sender_unittest.cc",
     "do_not_disturb_controller_impl_unittest.cc",
     "feature_status_provider_impl_unittest.cc",
     "find_my_device_controller_impl_unittest.cc",
diff --git a/chromeos/components/phonehub/connection_manager_impl.cc b/chromeos/components/phonehub/connection_manager_impl.cc
index f544551..57e754fa 100644
--- a/chromeos/components/phonehub/connection_manager_impl.cc
+++ b/chromeos/components/phonehub/connection_manager_impl.cc
@@ -5,6 +5,7 @@
 #include "chromeos/components/phonehub/connection_manager_impl.h"
 
 #include "base/bind_helpers.h"
+#include "chromeos/constants/chromeos_features.h"
 #include "chromeos/services/device_sync/public/cpp/device_sync_client.h"
 #include "chromeos/services/multidevice_setup/public/cpp/multidevice_setup_client.h"
 #include "chromeos/services/secure_channel/public/cpp/client/secure_channel_client.h"
@@ -66,11 +67,19 @@
     return;
   }
 
-  connection_attempt_ = secure_channel_client_->InitiateConnectionToDevice(
-      *remote_device, *local_device, kPhoneHubFeatureName,
-      secure_channel::ConnectionMedium::kNearbyConnections,
-      secure_channel::ConnectionPriority::kMedium);
+  if (features::IsPhoneHubUseBleEnabled()) {
+    connection_attempt_ = secure_channel_client_->ListenForConnectionFromDevice(
+        *remote_device, *local_device, kPhoneHubFeatureName,
+        secure_channel::ConnectionMedium::kBluetoothLowEnergy,
+        secure_channel::ConnectionPriority::kMedium);
+  } else {
+    connection_attempt_ = secure_channel_client_->InitiateConnectionToDevice(
+        *remote_device, *local_device, kPhoneHubFeatureName,
+        secure_channel::ConnectionMedium::kNearbyConnections,
+        secure_channel::ConnectionPriority::kMedium);
+  }
   connection_attempt_->SetDelegate(this);
+
   NotifyStatusChanged();
 }
 
diff --git a/chromeos/components/phonehub/connection_manager_impl_unittest.cc b/chromeos/components/phonehub/connection_manager_impl_unittest.cc
index 9bdd63a..b3f041a 100644
--- a/chromeos/components/phonehub/connection_manager_impl_unittest.cc
+++ b/chromeos/components/phonehub/connection_manager_impl_unittest.cc
@@ -7,7 +7,9 @@
 #include <memory>
 
 #include "base/macros.h"
+#include "base/test/scoped_feature_list.h"
 #include "chromeos/components/multidevice/remote_device_test_util.h"
+#include "chromeos/constants/chromeos_features.h"
 #include "chromeos/services/device_sync/public/cpp/fake_device_sync_client.h"
 #include "chromeos/services/multidevice_setup/public/cpp/fake_multidevice_setup_client.h"
 #include "chromeos/services/secure_channel/public/cpp/client/fake_client_channel.h"
@@ -94,9 +96,15 @@
     auto fake_connection_attempt =
         std::make_unique<chromeos::secure_channel::FakeConnectionAttempt>();
     fake_connection_attempt_ = fake_connection_attempt.get();
-    fake_secure_channel_client_->set_next_initiate_connection_attempt(
-        test_remote_device_, test_local_device_,
-        std::move(fake_connection_attempt));
+    if (features::IsPhoneHubUseBleEnabled()) {
+      fake_secure_channel_client_->set_next_listen_connection_attempt(
+          test_remote_device_, test_local_device_,
+          std::move(fake_connection_attempt));
+    } else {
+      fake_secure_channel_client_->set_next_initiate_connection_attempt(
+          test_remote_device_, test_local_device_,
+          std::move(fake_connection_attempt));
+    }
   }
 
   chromeos::multidevice::RemoteDeviceRef test_remote_device_;
@@ -230,5 +238,27 @@
   EXPECT_EQ(ConnectionManager::Status::kDisconnected, GetStatus());
 }
 
+TEST_F(ConnectionManagerImplTest, SuccessfullyAttemptConnectionWithBle) {
+  base::test::ScopedFeatureList scoped_feature_list_;
+  scoped_feature_list_.InitWithFeatures(
+      {features::kPhoneHub, features::kPhoneHubUseBle}, {});
+  CreateFakeConnectionAttempt();
+  connection_manager_->AttemptConnection();
+
+  // Status has been updated to connecting, verify that the status observer
+  // has been called.
+  EXPECT_EQ(1u, GetNumStatusObserverCalls());
+  EXPECT_EQ(ConnectionManager::Status::kConnecting, GetStatus());
+
+  auto fake_client_channel =
+      std::make_unique<chromeos::secure_channel::FakeClientChannel>();
+  fake_connection_attempt_->NotifyConnection(std::move(fake_client_channel));
+
+  // Status has been updated to connected, verify that the status observer has
+  // been called.
+  EXPECT_EQ(2u, GetNumStatusObserverCalls());
+  EXPECT_EQ(ConnectionManager::Status::kConnected, GetStatus());
+}
+
 }  // namespace phonehub
 }  // namespace chromeos
diff --git a/chromeos/components/phonehub/cros_state_sender.cc b/chromeos/components/phonehub/cros_state_sender.cc
new file mode 100644
index 0000000..980814dd
--- /dev/null
+++ b/chromeos/components/phonehub/cros_state_sender.cc
@@ -0,0 +1,60 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chromeos/components/phonehub/cros_state_sender.h"
+
+#include "chromeos/components/phonehub/message_sender.h"
+#include "chromeos/services/multidevice_setup/public/mojom/multidevice_setup.mojom.h"
+
+namespace chromeos {
+namespace phonehub {
+
+using multidevice_setup::mojom::Feature;
+using multidevice_setup::mojom::FeatureState;
+
+CrosStateSender::CrosStateSender(
+    MessageSender* message_sender,
+    ConnectionManager* connection_manager,
+    multidevice_setup::MultiDeviceSetupClient* multidevice_setup_client)
+    : message_sender_(message_sender),
+      connection_manager_(connection_manager),
+      multidevice_setup_client_(multidevice_setup_client) {
+  DCHECK(message_sender_);
+  DCHECK(connection_manager_);
+  DCHECK(multidevice_setup_client_);
+
+  connection_manager_->AddObserver(this);
+  multidevice_setup_client_->AddObserver(this);
+}
+
+CrosStateSender::~CrosStateSender() {
+  connection_manager_->RemoveObserver(this);
+  multidevice_setup_client_->RemoveObserver(this);
+}
+
+void CrosStateSender::AttemptUpdateCrosState() const {
+  // Wait for connection to be established.
+  if (connection_manager_->GetStatus() !=
+      ConnectionManager::Status::kConnected) {
+    return;
+  }
+
+  bool are_notifications_enabled =
+      multidevice_setup_client_->GetFeatureState(
+          Feature::kPhoneHubNotifications) == FeatureState::kEnabledByUser;
+  message_sender_->SendCrosState(are_notifications_enabled);
+}
+
+void CrosStateSender::OnConnectionStatusChanged() {
+  AttemptUpdateCrosState();
+}
+
+void CrosStateSender::OnFeatureStatesChanged(
+    const multidevice_setup::MultiDeviceSetupClient::FeatureStatesMap&
+        feature_states_map) {
+  AttemptUpdateCrosState();
+}
+
+}  // namespace phonehub
+}  // namespace chromeos
diff --git a/chromeos/components/phonehub/cros_state_sender.h b/chromeos/components/phonehub/cros_state_sender.h
new file mode 100644
index 0000000..2ff4fdd
--- /dev/null
+++ b/chromeos/components/phonehub/cros_state_sender.h
@@ -0,0 +1,47 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROMEOS_COMPONENTS_PHONEHUB_CROS_STATE_SENDER_H_
+#define CHROMEOS_COMPONENTS_PHONEHUB_CROS_STATE_SENDER_H_
+
+#include "chromeos/components/phonehub/connection_manager.h"
+#include "chromeos/services/multidevice_setup/public/cpp/multidevice_setup_client.h"
+
+namespace chromeos {
+namespace phonehub {
+
+class MessageSender;
+
+// Responsible for sending the Chrome OS's device state to the user's
+// phone.
+class CrosStateSender
+    : public ConnectionManager::Observer,
+      public multidevice_setup::MultiDeviceSetupClient::Observer {
+ public:
+  CrosStateSender(
+      MessageSender* message_sender,
+      ConnectionManager* connection_manager,
+      multidevice_setup::MultiDeviceSetupClient* multidevice_setup_client);
+  ~CrosStateSender() override;
+
+ private:
+  void AttemptUpdateCrosState() const;
+
+  // ConnectionManager::Observer:
+  void OnConnectionStatusChanged() override;
+
+  // MultiDeviceSetupClient::Observer:
+  void OnFeatureStatesChanged(
+      const multidevice_setup::MultiDeviceSetupClient::FeatureStatesMap&
+          feature_states_map) override;
+
+  MessageSender* message_sender_;
+  ConnectionManager* connection_manager_;
+  multidevice_setup::MultiDeviceSetupClient* multidevice_setup_client_;
+};
+
+}  // namespace phonehub
+}  // namespace chromeos
+
+#endif  // CHROMEOS_COMPONENTS_PHONEHUB_CROS_STATE_SENDER_H_
diff --git a/chromeos/components/phonehub/cros_state_sender_unittest.cc b/chromeos/components/phonehub/cros_state_sender_unittest.cc
new file mode 100644
index 0000000..0c66091
--- /dev/null
+++ b/chromeos/components/phonehub/cros_state_sender_unittest.cc
@@ -0,0 +1,101 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chromeos/components/phonehub/cros_state_sender.h"
+
+#include <memory>
+
+#include "chromeos/components/phonehub/fake_connection_manager.h"
+#include "chromeos/components/phonehub/fake_message_sender.h"
+#include "chromeos/services/multidevice_setup/public/cpp/fake_multidevice_setup_client.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace chromeos {
+namespace phonehub {
+
+using multidevice_setup::mojom::Feature;
+using multidevice_setup::mojom::FeatureState;
+
+class CrosStateSenderTest : public testing::Test {
+ protected:
+  CrosStateSenderTest() = default;
+  ~CrosStateSenderTest() override = default;
+
+  CrosStateSenderTest(const CrosStateSender&) = delete;
+  CrosStateSenderTest& operator=(const CrosStateSender&) = delete;
+
+  // testing::Test:
+  void SetUp() override {
+    fake_message_sender_ = std::make_unique<FakeMessageSender>();
+    fake_connection_manager_ = std::make_unique<FakeConnectionManager>();
+    fake_multidevice_setup_client_ =
+        std::make_unique<multidevice_setup::FakeMultiDeviceSetupClient>();
+    cros_state_sender_ = std::make_unique<CrosStateSender>(
+        fake_message_sender_.get(), fake_connection_manager_.get(),
+        fake_multidevice_setup_client_.get());
+  }
+
+  std::unique_ptr<FakeMessageSender> fake_message_sender_;
+  std::unique_ptr<FakeConnectionManager> fake_connection_manager_;
+  std::unique_ptr<multidevice_setup::FakeMultiDeviceSetupClient>
+      fake_multidevice_setup_client_;
+
+ private:
+  std::unique_ptr<CrosStateSender> cros_state_sender_;
+};
+
+TEST_F(CrosStateSenderTest, UpdatesOnConnected) {
+  // Set notification feature to be enabled.
+  fake_multidevice_setup_client_->SetFeatureState(
+      Feature::kPhoneHubNotifications, FeatureState::kEnabledByUser);
+  // Expect no new messages since connection has not been established.
+  EXPECT_EQ(0u, fake_message_sender_->GetCrosStateCallCount());
+
+  // Update connection state to connecting.
+  fake_connection_manager_->SetStatus(ConnectionManager::Status::kConnecting);
+  // Connecting state does not trigger a request message.
+  EXPECT_EQ(0u, fake_message_sender_->GetCrosStateCallCount());
+
+  // Simulate connected state. Expect a new message to be sent.
+  fake_connection_manager_->SetStatus(ConnectionManager::Status::kConnected);
+  EXPECT_TRUE(fake_message_sender_->GetRecentCrosState());
+  EXPECT_EQ(1u, fake_message_sender_->GetCrosStateCallCount());
+
+  // Simulate disconnected state, this should not trigger a new request.
+  fake_connection_manager_->SetStatus(ConnectionManager::Status::kDisconnected);
+  EXPECT_TRUE(fake_message_sender_->GetRecentCrosState());
+  EXPECT_EQ(1u, fake_message_sender_->GetCrosStateCallCount());
+}
+
+TEST_F(CrosStateSenderTest, NotificationFeatureStateChanged) {
+  // Set connection state to be connected.
+  fake_connection_manager_->SetStatus(ConnectionManager::Status::kConnected);
+  // Expect new messages to be sent when connection state is connected.
+  EXPECT_FALSE(fake_message_sender_->GetRecentCrosState());
+  EXPECT_EQ(1u, fake_message_sender_->GetCrosStateCallCount());
+
+  // Simulate enabling notification feature state and expect cros state to be
+  // enabled.
+  fake_multidevice_setup_client_->SetFeatureState(
+      Feature::kPhoneHubNotifications, FeatureState::kEnabledByUser);
+  EXPECT_TRUE(fake_message_sender_->GetRecentCrosState());
+  EXPECT_EQ(2u, fake_message_sender_->GetCrosStateCallCount());
+
+  // Update a different feature state and expect that it did not affect the
+  // cros state.
+  fake_multidevice_setup_client_->SetFeatureState(
+      Feature::kSmartLock, FeatureState::kDisabledByUser);
+  EXPECT_TRUE(fake_message_sender_->GetRecentCrosState());
+  EXPECT_EQ(3u, fake_message_sender_->GetCrosStateCallCount());
+
+  // Simulate disabling notification feature state and expect cros state to be
+  // disabled.
+  fake_multidevice_setup_client_->SetFeatureState(
+      Feature::kPhoneHubNotifications, FeatureState::kDisabledByUser);
+  EXPECT_FALSE(fake_message_sender_->GetRecentCrosState());
+  EXPECT_EQ(4u, fake_message_sender_->GetCrosStateCallCount());
+}
+
+}  // namespace phonehub
+}  // namespace chromeos
diff --git a/chromeos/components/phonehub/fake_find_my_device_controller.cc b/chromeos/components/phonehub/fake_find_my_device_controller.cc
index 9781641..8b184e03 100644
--- a/chromeos/components/phonehub/fake_find_my_device_controller.cc
+++ b/chromeos/components/phonehub/fake_find_my_device_controller.cc
@@ -31,7 +31,8 @@
 }
 
 void FakeFindMyDeviceController::RequestNewPhoneRingingState(bool ringing) {
-  SetIsPhoneRingingInternal(ringing);
+  if (!should_request_fail_)
+    SetIsPhoneRingingInternal(ringing);
 }
 
 FindMyDeviceController::Status
@@ -39,5 +40,10 @@
   return phone_ringing_status_;
 }
 
+void FakeFindMyDeviceController::SetShouldRequestFail(
+    bool should_request_fail) {
+  should_request_fail_ = should_request_fail;
+}
+
 }  // namespace phonehub
 }  // namespace chromeos
diff --git a/chromeos/components/phonehub/fake_find_my_device_controller.h b/chromeos/components/phonehub/fake_find_my_device_controller.h
index 514f1f7..5e8d4be 100644
--- a/chromeos/components/phonehub/fake_find_my_device_controller.h
+++ b/chromeos/components/phonehub/fake_find_my_device_controller.h
@@ -22,8 +22,14 @@
   void RequestNewPhoneRingingState(bool ringing) override;
   Status GetPhoneRingingStatus() override;
 
+  void SetShouldRequestFail(bool is_request_fail);
+
  private:
   Status phone_ringing_status_ = Status::kRingingOff;
+
+  // Indicates if the connection to the phone is working correctly. If it is
+  // true, there is a problem and the phone cannot change its state.
+  bool should_request_fail_ = false;
 };
 
 }  // namespace phonehub
diff --git a/chromeos/components/phonehub/phone_hub_manager_impl.cc b/chromeos/components/phonehub/phone_hub_manager_impl.cc
index c419041a..8fc92b5 100644
--- a/chromeos/components/phonehub/phone_hub_manager_impl.cc
+++ b/chromeos/components/phonehub/phone_hub_manager_impl.cc
@@ -9,6 +9,7 @@
 #include "chromeos/components/phonehub/browser_tabs_model_provider.h"
 #include "chromeos/components/phonehub/connection_manager_impl.h"
 #include "chromeos/components/phonehub/connection_scheduler_impl.h"
+#include "chromeos/components/phonehub/cros_state_sender.h"
 #include "chromeos/components/phonehub/do_not_disturb_controller_impl.h"
 #include "chromeos/components/phonehub/feature_status_provider_impl.h"
 #include "chromeos/components/phonehub/find_my_device_controller_impl.h"
@@ -44,6 +45,10 @@
           std::make_unique<MessageReceiverImpl>(connection_manager_.get())),
       message_sender_(
           std::make_unique<MessageSenderImpl>(connection_manager_.get())),
+      cros_state_sender_(
+          std::make_unique<CrosStateSender>(message_sender_.get(),
+                                            connection_manager_.get(),
+                                            multidevice_setup_client)),
       do_not_disturb_controller_(
           std::make_unique<DoNotDisturbControllerImpl>(message_sender_.get())),
       connection_scheduler_(std::make_unique<ConnectionSchedulerImpl>(
@@ -129,6 +134,7 @@
   find_my_device_controller_.reset();
   connection_scheduler_.reset();
   do_not_disturb_controller_.reset();
+  cros_state_sender_.reset();
   message_sender_.reset();
   message_receiver_.reset();
   feature_status_provider_.reset();
diff --git a/chromeos/components/phonehub/phone_hub_manager_impl.h b/chromeos/components/phonehub/phone_hub_manager_impl.h
index 000a4156..e56f794a 100644
--- a/chromeos/components/phonehub/phone_hub_manager_impl.h
+++ b/chromeos/components/phonehub/phone_hub_manager_impl.h
@@ -32,6 +32,7 @@
 class BrowserTabsModelController;
 class BrowserTabsModelProvider;
 class ConnectionManager;
+class CrosStateSender;
 class MessageSender;
 class MessageReceiver;
 class MutablePhoneModel;
@@ -69,6 +70,7 @@
   std::unique_ptr<FeatureStatusProvider> feature_status_provider_;
   std::unique_ptr<MessageReceiver> message_receiver_;
   std::unique_ptr<MessageSender> message_sender_;
+  std::unique_ptr<CrosStateSender> cros_state_sender_;
   std::unique_ptr<DoNotDisturbController> do_not_disturb_controller_;
   std::unique_ptr<ConnectionScheduler> connection_scheduler_;
   std::unique_ptr<FindMyDeviceController> find_my_device_controller_;
diff --git a/chromeos/components/quick_answers/BUILD.gn b/chromeos/components/quick_answers/BUILD.gn
index 60fcda3..8567886 100644
--- a/chromeos/components/quick_answers/BUILD.gn
+++ b/chromeos/components/quick_answers/BUILD.gn
@@ -6,10 +6,10 @@
   sources = [
     "quick_answers_client.cc",
     "quick_answers_client.h",
-    "quick_answers_consents.cc",
-    "quick_answers_consents.h",
     "quick_answers_model.cc",
     "quick_answers_model.h",
+    "quick_answers_notice.cc",
+    "quick_answers_notice.h",
     "result_loader.cc",
     "result_loader.h",
     "search_result_loader.cc",
@@ -62,7 +62,7 @@
 
   sources = [
     "quick_answers_client_unittest.cc",
-    "quick_answers_consents_unittest.cc",
+    "quick_answers_notice_unittest.cc",
     "search_result_loader_unittest.cc",
     "search_result_parsers/definition_result_parser_unittest.cc",
     "search_result_parsers/kp_entity_result_parser_unittest.cc",
diff --git a/chromeos/components/quick_answers/public/cpp/quick_answers_prefs.cc b/chromeos/components/quick_answers/public/cpp/quick_answers_prefs.cc
index 03bbdf1..dd42e7c 100644
--- a/chromeos/components/quick_answers/public/cpp/quick_answers_prefs.cc
+++ b/chromeos/components/quick_answers/public/cpp/quick_answers_prefs.cc
@@ -15,18 +15,18 @@
 const char kQuickAnswersConsented[] = "settings.quick_answers.consented";
 
 // A preference to keep track of the number of Quick Answers consent impression.
-const char kQuickAnswersConsentImpressionCount[] =
+const char kQuickAnswersNoticeImpressionCount[] =
     "settings.quick_answers.consent.count";
 
 // A preference to keep track of how long (in seconds) the Quick Answers consent
 // has shown to the user.
-const char kQuickAnswersConsentImpressionDuration[] =
+const char kQuickAnswersNoticeImpressionDuration[] =
     "settings.quick_answers.consent.duration";
 
 void RegisterProfilePrefs(PrefRegistrySimple* registry) {
   registry->RegisterBooleanPref(kQuickAnswersConsented, false);
-  registry->RegisterIntegerPref(kQuickAnswersConsentImpressionCount, 0);
-  registry->RegisterIntegerPref(kQuickAnswersConsentImpressionDuration, 0);
+  registry->RegisterIntegerPref(kQuickAnswersNoticeImpressionCount, 0);
+  registry->RegisterIntegerPref(kQuickAnswersNoticeImpressionDuration, 0);
 }
 
 }  // namespace prefs
diff --git a/chromeos/components/quick_answers/public/cpp/quick_answers_prefs.h b/chromeos/components/quick_answers/public/cpp/quick_answers_prefs.h
index 72e3ad8..47b572a 100644
--- a/chromeos/components/quick_answers/public/cpp/quick_answers_prefs.h
+++ b/chromeos/components/quick_answers/public/cpp/quick_answers_prefs.h
@@ -12,8 +12,8 @@
 namespace prefs {
 
 extern const char kQuickAnswersConsented[];
-extern const char kQuickAnswersConsentImpressionCount[];
-extern const char kQuickAnswersConsentImpressionDuration[];
+extern const char kQuickAnswersNoticeImpressionCount[];
+extern const char kQuickAnswersNoticeImpressionDuration[];
 
 // Registers Quick Answers specific profile preferences for browser prefs.
 void RegisterProfilePrefs(PrefRegistrySimple* registry);
diff --git a/chromeos/components/quick_answers/quick_answers_consents.cc b/chromeos/components/quick_answers/quick_answers_consents.cc
deleted file mode 100644
index 6f21f72..0000000
--- a/chromeos/components/quick_answers/quick_answers_consents.cc
+++ /dev/null
@@ -1,90 +0,0 @@
-// Copyright 2020 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chromeos/components/quick_answers/quick_answers_consents.h"
-
-#include <string>
-
-#include "base/metrics/histogram_functions.h"
-#include "base/strings/stringprintf.h"
-#include "base/time/time.h"
-#include "chromeos/components/quick_answers/public/cpp/quick_answers_prefs.h"
-#include "chromeos/components/quick_answers/utils/quick_answers_metrics.h"
-#include "components/prefs/pref_service.h"
-
-namespace chromeos {
-namespace quick_answers {
-
-QuickAnswersConsent::QuickAnswersConsent(PrefService* prefs) : prefs_(prefs) {}
-
-QuickAnswersConsent::~QuickAnswersConsent() = default;
-
-void QuickAnswersConsent::StartConsent() {
-  // Increments impression count.
-  IncrementPrefCounter(prefs::kQuickAnswersConsentImpressionCount, 1);
-
-  // Logs consent impression with how many times the user has seen the consent.
-  RecordConsentImpression(GetImpressionCount());
-
-  start_time_ = base::TimeTicks::Now();
-}
-
-void QuickAnswersConsent::DismissConsent() {
-  RecordImpressionDuration();
-  // Logs consent dismissed with impression count and impression duration.
-  RecordConsentInteraction(ConsentInteractionType::kDismiss,
-                           GetImpressionCount(), GetImpressionDuration());
-}
-
-void QuickAnswersConsent::AcceptConsent(ConsentInteractionType interaction) {
-  RecordImpressionDuration();
-  // Logs consent accepted with impression count and impression duration.
-  RecordConsentInteraction(interaction, GetImpressionCount(),
-                           GetImpressionDuration());
-
-  // Marks the consent as accepted.
-  prefs_->SetBoolean(prefs::kQuickAnswersConsented, true);
-}
-
-bool QuickAnswersConsent::ShouldShowConsent() const {
-  return !HasConsented() && !HasReachedImpressionCap() &&
-         !HasReachedDurationCap();
-}
-
-bool QuickAnswersConsent::HasConsented() const {
-  return prefs_->GetBoolean(prefs::kQuickAnswersConsented);
-}
-
-bool QuickAnswersConsent::HasReachedImpressionCap() const {
-  return GetImpressionCount() + 1 > kConsentImpressionCap;
-}
-
-bool QuickAnswersConsent::HasReachedDurationCap() const {
-  int duration_secs =
-      prefs_->GetInteger(prefs::kQuickAnswersConsentImpressionDuration);
-  return duration_secs >= kConsentDurationCap;
-}
-
-void QuickAnswersConsent::IncrementPrefCounter(const std::string& path,
-                                               int count) {
-  prefs_->SetInteger(path, prefs_->GetInteger(path) + count);
-}
-
-void QuickAnswersConsent::RecordImpressionDuration() {
-  // Records duration in pref.
-  IncrementPrefCounter(prefs::kQuickAnswersConsentImpressionDuration,
-                       GetImpressionDuration().InSeconds());
-}
-
-int QuickAnswersConsent::GetImpressionCount() const {
-  return prefs_->GetInteger(prefs::kQuickAnswersConsentImpressionCount);
-}
-
-base::TimeDelta QuickAnswersConsent::GetImpressionDuration() const {
-  DCHECK(!start_time_.is_null());
-  return base::TimeTicks::Now() - start_time_;
-}
-
-}  // namespace quick_answers
-}  // namespace chromeos
diff --git a/chromeos/components/quick_answers/quick_answers_consents.h b/chromeos/components/quick_answers/quick_answers_consents.h
deleted file mode 100644
index 7dfaea2..0000000
--- a/chromeos/components/quick_answers/quick_answers_consents.h
+++ /dev/null
@@ -1,75 +0,0 @@
-// Copyright 2020 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROMEOS_COMPONENTS_QUICK_ANSWERS_QUICK_ANSWERS_CONSENTS_H_
-#define CHROMEOS_COMPONENTS_QUICK_ANSWERS_QUICK_ANSWERS_CONSENTS_H_
-
-#include <memory>
-
-#include "base/timer/timer.h"
-
-class PrefService;
-
-namespace chromeos {
-namespace quick_answers {
-
-enum class ConsentInteractionType;
-
-// The consent will appear up to a total of 3 times.
-constexpr int kConsentImpressionCap = 3;
-// The consent will appear until viewed for a cumulative 8 seconds.
-constexpr int kConsentDurationCap = 8;
-
-// Tracks whether quick answers consent should be shown and records impression
-// count and duration when there is a interaction with the consent (shown,
-// accepted and dismissed).
-class QuickAnswersConsent {
- public:
-  explicit QuickAnswersConsent(PrefService* prefs);
-
-  QuickAnswersConsent(const QuickAnswersConsent&) = delete;
-  QuickAnswersConsent& operator=(const QuickAnswersConsent&) = delete;
-
-  virtual ~QuickAnswersConsent();
-
-  // Starts showing consent. Virtual for testing.
-  virtual void StartConsent();
-  // Marks the consent as accepted and records the impression duration. Virtual
-  // for testing.
-  virtual void AcceptConsent(ConsentInteractionType interaction);
-  // The consent is dismissed by users. Records the impression duration. Virtual
-  // for testing.
-  virtual void DismissConsent();
-  // Whether the consent should be shown (based on consent state, impression
-  // count and impression duration). Virtual for testing.
-  virtual bool ShouldShowConsent() const;
-
- private:
-  // Whether users have granted the consent.
-  bool HasConsented() const;
-  // Whether the consent has been seen by users for |kConsentImpressionCap|
-  // times.
-  bool HasReachedImpressionCap() const;
-  // Whether the consent has been seen by users for |kConsentDurationCap|
-  // seconds.
-  bool HasReachedDurationCap() const;
-  // Increments the perf counter by |count|.
-  void IncrementPrefCounter(const std::string& path, int count);
-  // Records how long the consent has been seen by the users.
-  void RecordImpressionDuration();
-  // Get how many times the consent has been seen by users.
-  int GetImpressionCount() const;
-  // Get how long the consent has been seen by users.
-  base::TimeDelta GetImpressionDuration() const;
-
-  PrefService* const prefs_;
-
-  // Time when the consent is shown.
-  base::TimeTicks start_time_;
-};
-
-}  // namespace quick_answers
-}  // namespace chromeos
-
-#endif  // CHROMEOS_COMPONENTS_QUICK_ANSWERS_QUICK_ANSWERS_CONSENTS_H_
diff --git a/chromeos/components/quick_answers/quick_answers_consents_unittest.cc b/chromeos/components/quick_answers/quick_answers_consents_unittest.cc
deleted file mode 100644
index 4b783f9..0000000
--- a/chromeos/components/quick_answers/quick_answers_consents_unittest.cc
+++ /dev/null
@@ -1,103 +0,0 @@
-// Copyright 2020 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chromeos/components/quick_answers/quick_answers_consents.h"
-
-#include <memory>
-#include <string>
-
-#include "base/test/task_environment.h"
-#include "base/test/test_mock_time_task_runner.h"
-#include "chromeos/components/quick_answers/public/cpp/quick_answers_prefs.h"
-#include "chromeos/components/quick_answers/quick_answers_model.h"
-#include "components/prefs/testing_pref_service.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace chromeos {
-namespace quick_answers {
-
-class QuickAnswersConsentTest : public testing::Test {
- public:
-  QuickAnswersConsentTest() = default;
-
-  ~QuickAnswersConsentTest() override = default;
-
-  void SetUp() override {
-    prefs::RegisterProfilePrefs(pref_service_.registry());
-    consent_ = std::make_unique<QuickAnswersConsent>(&pref_service_);
-  }
-
-  void TearDown() override { consent_.reset(); }
-
-  PrefService* pref_service() { return &pref_service_; }
-
-  base::test::TaskEnvironment task_environment_{
-      base::test::TaskEnvironment::TimeSource::MOCK_TIME};
-  TestingPrefServiceSimple pref_service_;
-  std::unique_ptr<QuickAnswersConsent> consent_;
-};
-
-TEST_F(QuickAnswersConsentTest, ShouldShowConsentHasConsented) {
-  EXPECT_TRUE(consent_->ShouldShowConsent());
-
-  pref_service()->SetBoolean(prefs::kQuickAnswersConsented, true);
-
-  // Verify that it is consented.
-  EXPECT_FALSE(consent_->ShouldShowConsent());
-}
-
-TEST_F(QuickAnswersConsentTest, ShouldShowConsentHasReachedImpressionCap) {
-  EXPECT_TRUE(consent_->ShouldShowConsent());
-
-  pref_service()->SetInteger(prefs::kQuickAnswersConsentImpressionCount, 3);
-
-  // Verify that impression cap is reached.
-  EXPECT_FALSE(consent_->ShouldShowConsent());
-}
-
-TEST_F(QuickAnswersConsentTest, ShouldShowConsentHasReachedDurationCap) {
-  EXPECT_TRUE(consent_->ShouldShowConsent());
-
-  pref_service()->SetInteger(prefs::kQuickAnswersConsentImpressionDuration, 7);
-  // Not reach impression duration cap yet.
-  EXPECT_TRUE(consent_->ShouldShowConsent());
-
-  pref_service()->SetInteger(prefs::kQuickAnswersConsentImpressionDuration, 8);
-  // Reach impression duration cap.
-  EXPECT_FALSE(consent_->ShouldShowConsent());
-}
-
-TEST_F(QuickAnswersConsentTest, AcceptConsent) {
-  EXPECT_TRUE(consent_->ShouldShowConsent());
-
-  consent_->StartConsent();
-
-  // Consent is accepted after 6 seconds.
-  task_environment_.FastForwardBy(base::TimeDelta::FromSeconds(6));
-  consent_->AcceptConsent(ConsentInteractionType::kAccept);
-
-  // Verify that it is consented.
-  ASSERT_TRUE(pref_service()->GetBoolean(prefs::kQuickAnswersConsented));
-  // Verify that the duration is recorded.
-  ASSERT_EQ(6, pref_service()->GetInteger(
-                   prefs::kQuickAnswersConsentImpressionDuration));
-  // Verify that it is consented.
-  EXPECT_FALSE(consent_->ShouldShowConsent());
-}
-
-TEST_F(QuickAnswersConsentTest, DismissConsent) {
-  // Start consent.
-  consent_->StartConsent();
-
-  // Dismiss consent after reaching the impression cap.
-  task_environment_.FastForwardBy(base::TimeDelta::FromSeconds(8));
-  consent_->DismissConsent();
-
-  // Verify that the impression count is recorded.
-  ASSERT_EQ(8, pref_service()->GetInteger(
-                   prefs::kQuickAnswersConsentImpressionDuration));
-}
-
-}  // namespace quick_answers
-}  // namespace chromeos
diff --git a/chromeos/components/quick_answers/quick_answers_model.h b/chromeos/components/quick_answers/quick_answers_model.h
index 7e1494f5..6ce34ed7 100644
--- a/chromeos/components/quick_answers/quick_answers_model.h
+++ b/chromeos/components/quick_answers/quick_answers_model.h
@@ -17,7 +17,7 @@
 namespace quick_answers {
 
 // Interaction with the consent-view (used for logging).
-enum class ConsentInteractionType {
+enum class NoticeInteractionType {
   // When user clicks on the "grant-consent" button.
   kAccept = 0,
   // When user clicks on the "manage-settings" button.
diff --git a/chromeos/components/quick_answers/quick_answers_notice.cc b/chromeos/components/quick_answers/quick_answers_notice.cc
new file mode 100644
index 0000000..470066a
--- /dev/null
+++ b/chromeos/components/quick_answers/quick_answers_notice.cc
@@ -0,0 +1,90 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chromeos/components/quick_answers/quick_answers_notice.h"
+
+#include <string>
+
+#include "base/metrics/histogram_functions.h"
+#include "base/strings/stringprintf.h"
+#include "base/time/time.h"
+#include "chromeos/components/quick_answers/public/cpp/quick_answers_prefs.h"
+#include "chromeos/components/quick_answers/utils/quick_answers_metrics.h"
+#include "components/prefs/pref_service.h"
+
+namespace chromeos {
+namespace quick_answers {
+
+QuickAnswersNotice::QuickAnswersNotice(PrefService* prefs) : prefs_(prefs) {}
+
+QuickAnswersNotice::~QuickAnswersNotice() = default;
+
+void QuickAnswersNotice::StartNotice() {
+  // Increments impression count.
+  IncrementPrefCounter(prefs::kQuickAnswersNoticeImpressionCount, 1);
+
+  // Logs how many times the user has seen the notice.
+  RecordNoticeImpression(GetImpressionCount());
+
+  start_time_ = base::TimeTicks::Now();
+}
+
+void QuickAnswersNotice::DismissNotice() {
+  RecordImpressionDuration();
+  // Logs notice dismissed with impression count and impression duration.
+  RecordNoticeInteraction(NoticeInteractionType::kDismiss, GetImpressionCount(),
+                          GetImpressionDuration());
+}
+
+void QuickAnswersNotice::AcceptNotice(NoticeInteractionType interaction) {
+  RecordImpressionDuration();
+  // Logs notice accepted with impression count and impression duration.
+  RecordNoticeInteraction(interaction, GetImpressionCount(),
+                          GetImpressionDuration());
+
+  // Marks the notice as accepted.
+  prefs_->SetBoolean(prefs::kQuickAnswersConsented, true);
+}
+
+bool QuickAnswersNotice::ShouldShowNotice() const {
+  return !IsAccepted() && !HasReachedImpressionCap() &&
+         !HasReachedDurationCap();
+}
+
+bool QuickAnswersNotice::IsAccepted() const {
+  return prefs_->GetBoolean(prefs::kQuickAnswersConsented);
+}
+
+bool QuickAnswersNotice::HasReachedImpressionCap() const {
+  return GetImpressionCount() + 1 > kNoticeImpressionCap;
+}
+
+bool QuickAnswersNotice::HasReachedDurationCap() const {
+  int duration_secs =
+      prefs_->GetInteger(prefs::kQuickAnswersNoticeImpressionDuration);
+  return duration_secs >= kNoticeDurationCap;
+}
+
+void QuickAnswersNotice::IncrementPrefCounter(const std::string& path,
+                                              int count) {
+  prefs_->SetInteger(path, prefs_->GetInteger(path) + count);
+}
+
+void QuickAnswersNotice::RecordImpressionDuration() {
+  // Records duration in pref.
+  IncrementPrefCounter(prefs::kQuickAnswersNoticeImpressionDuration,
+                       GetImpressionDuration().InSeconds());
+}
+
+int QuickAnswersNotice::GetImpressionCount() const {
+  return prefs_->GetInteger(prefs::kQuickAnswersNoticeImpressionCount);
+}
+
+base::TimeDelta QuickAnswersNotice::GetImpressionDuration() const {
+  DCHECK(!start_time_.is_null());
+  return base::TimeTicks::Now() - start_time_;
+}
+
+}  // namespace quick_answers
+}  // namespace chromeos
diff --git a/chromeos/components/quick_answers/quick_answers_notice.h b/chromeos/components/quick_answers/quick_answers_notice.h
new file mode 100644
index 0000000..a7891af2
--- /dev/null
+++ b/chromeos/components/quick_answers/quick_answers_notice.h
@@ -0,0 +1,76 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROMEOS_COMPONENTS_QUICK_ANSWERS_QUICK_ANSWERS_NOTICE_H_
+#define CHROMEOS_COMPONENTS_QUICK_ANSWERS_QUICK_ANSWERS_NOTICE_H_
+
+#include <memory>
+
+#include "base/timer/timer.h"
+
+class PrefService;
+
+namespace chromeos {
+namespace quick_answers {
+
+enum class NoticeInteractionType;
+
+// The notice will appear up to a total of 3 times.
+constexpr int kNoticeImpressionCap = 3;
+// The notice will appear until viewed for a cumulative 8 seconds.
+constexpr int kNoticeDurationCap = 8;
+
+// Tracks whether quick answers notice should be shown and records
+// impression count and duration when there is a interaction with the
+// notice (shown, accepted and dismissed).
+class QuickAnswersNotice {
+ public:
+  explicit QuickAnswersNotice(PrefService* prefs);
+
+  QuickAnswersNotice(const QuickAnswersNotice&) = delete;
+  QuickAnswersNotice& operator=(const QuickAnswersNotice&) = delete;
+
+  virtual ~QuickAnswersNotice();
+
+  // Starts showing notice. Virtual for testing.
+  virtual void StartNotice();
+  // Marks the notice as accepted and records the impression duration.
+  // Virtual for testing.
+  virtual void AcceptNotice(NoticeInteractionType interaction);
+  // The notice is dismissed by users. Records the impression duration.
+  // Virtual for testing.
+  virtual void DismissNotice();
+  // Whether the notice should be shown (based on accepted state,
+  // impression count and impression duration). Virtual for testing.
+  virtual bool ShouldShowNotice() const;
+
+  // Whether users have accepted the notice.
+  bool IsAccepted() const;
+
+ private:
+  // Whether the notice has been seen by users for
+  // |kNoticeImpressionCap| times.
+  bool HasReachedImpressionCap() const;
+  // Whether the notice has been seen by users for
+  // |kNoticeDurationCap| seconds.
+  bool HasReachedDurationCap() const;
+  // Increments the perf counter by |count|.
+  void IncrementPrefCounter(const std::string& path, int count);
+  // Records how long the notice has been seen by the users.
+  void RecordImpressionDuration();
+  // Get how many times the notice has been seen by users.
+  int GetImpressionCount() const;
+  // Get how long the notice has been seen by users.
+  base::TimeDelta GetImpressionDuration() const;
+
+  PrefService* const prefs_;
+
+  // Time when the notice is shown.
+  base::TimeTicks start_time_;
+};
+
+}  // namespace quick_answers
+}  // namespace chromeos
+
+#endif  // CHROMEOS_COMPONENTS_QUICK_ANSWERS_QUICK_ANSWERS_NOTICE_H_
diff --git a/chromeos/components/quick_answers/quick_answers_notice_unittest.cc b/chromeos/components/quick_answers/quick_answers_notice_unittest.cc
new file mode 100644
index 0000000..f623df4
--- /dev/null
+++ b/chromeos/components/quick_answers/quick_answers_notice_unittest.cc
@@ -0,0 +1,103 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chromeos/components/quick_answers/quick_answers_notice.h"
+
+#include <memory>
+#include <string>
+
+#include "base/test/task_environment.h"
+#include "base/test/test_mock_time_task_runner.h"
+#include "chromeos/components/quick_answers/public/cpp/quick_answers_prefs.h"
+#include "chromeos/components/quick_answers/quick_answers_model.h"
+#include "components/prefs/testing_pref_service.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace chromeos {
+namespace quick_answers {
+
+class QuickAnswersNoticeTest : public testing::Test {
+ public:
+  QuickAnswersNoticeTest() = default;
+
+  ~QuickAnswersNoticeTest() override = default;
+
+  void SetUp() override {
+    prefs::RegisterProfilePrefs(pref_service_.registry());
+    notice_ = std::make_unique<QuickAnswersNotice>(&pref_service_);
+  }
+
+  void TearDown() override { notice_.reset(); }
+
+  PrefService* pref_service() { return &pref_service_; }
+
+  base::test::TaskEnvironment task_environment_{
+      base::test::TaskEnvironment::TimeSource::MOCK_TIME};
+  TestingPrefServiceSimple pref_service_;
+  std::unique_ptr<QuickAnswersNotice> notice_;
+};
+
+TEST_F(QuickAnswersNoticeTest, ShouldShowNoticeShouldBeTrueIfUserHasNoticeed) {
+  EXPECT_TRUE(notice_->ShouldShowNotice());
+
+  pref_service()->SetBoolean(prefs::kQuickAnswersConsented, true);
+
+  // Verify that it is consented.
+  EXPECT_FALSE(notice_->ShouldShowNotice());
+}
+
+TEST_F(QuickAnswersNoticeTest, ShouldShowNoticeHasReachedImpressionCap) {
+  EXPECT_TRUE(notice_->ShouldShowNotice());
+
+  pref_service()->SetInteger(prefs::kQuickAnswersNoticeImpressionCount, 3);
+
+  // Verify that impression cap is reached.
+  EXPECT_FALSE(notice_->ShouldShowNotice());
+}
+
+TEST_F(QuickAnswersNoticeTest, ShouldShowNoticeHasReachedDurationCap) {
+  EXPECT_TRUE(notice_->ShouldShowNotice());
+
+  pref_service()->SetInteger(prefs::kQuickAnswersNoticeImpressionDuration, 7);
+  // Not reach impression duration cap yet.
+  EXPECT_TRUE(notice_->ShouldShowNotice());
+
+  pref_service()->SetInteger(prefs::kQuickAnswersNoticeImpressionDuration, 8);
+  // Reach impression duration cap.
+  EXPECT_FALSE(notice_->ShouldShowNotice());
+}
+
+TEST_F(QuickAnswersNoticeTest, AcceptNotice) {
+  EXPECT_TRUE(notice_->ShouldShowNotice());
+
+  notice_->StartNotice();
+
+  // Notice is accepted after 6 seconds.
+  task_environment_.FastForwardBy(base::TimeDelta::FromSeconds(6));
+  notice_->AcceptNotice(NoticeInteractionType::kAccept);
+
+  // Verify that it is consented.
+  ASSERT_TRUE(pref_service()->GetBoolean(prefs::kQuickAnswersConsented));
+  // Verify that the duration is recorded.
+  ASSERT_EQ(6, pref_service()->GetInteger(
+                   prefs::kQuickAnswersNoticeImpressionDuration));
+  // Verify that it is consented.
+  EXPECT_FALSE(notice_->ShouldShowNotice());
+}
+
+TEST_F(QuickAnswersNoticeTest, DismissNotice) {
+  // Start consent.
+  notice_->StartNotice();
+
+  // Dismiss consent after reaching the impression cap.
+  task_environment_.FastForwardBy(base::TimeDelta::FromSeconds(8));
+  notice_->DismissNotice();
+
+  // Verify that the impression count is recorded.
+  ASSERT_EQ(8, pref_service()->GetInteger(
+                   prefs::kQuickAnswersNoticeImpressionDuration));
+}
+
+}  // namespace quick_answers
+}  // namespace chromeos
diff --git a/chromeos/components/quick_answers/utils/quick_answers_metrics.cc b/chromeos/components/quick_answers/utils/quick_answers_metrics.cc
index ceeab22..1cf515d68 100644
--- a/chromeos/components/quick_answers/utils/quick_answers_metrics.cc
+++ b/chromeos/components/quick_answers/utils/quick_answers_metrics.cc
@@ -7,7 +7,7 @@
 #include "base/metrics/histogram_functions.h"
 #include "base/strings/stringprintf.h"
 #include "base/time/time.h"
-#include "chromeos/components/quick_answers/quick_answers_consents.h"
+#include "chromeos/components/quick_answers/quick_answers_notice.h"
 
 namespace chromeos {
 namespace quick_answers {
@@ -23,9 +23,9 @@
     "QuickAnswers.SelectedContent.Length";
 const char kDurationSuffix[] = ".Duration";
 
-const char kQuickAnswersConsent[] = "QuickAnswers.Consent";
-const char kQuickAnswersConsentDuration[] = "QuickAnswers.Consent.Duration";
-const char kQuickAnswersConsentImpression[] = "QuickAnswers.Consent.Impression";
+const char kQuickAnswersNotice[] = "QuickAnswers.Consent";
+const char kQuickAnswersNoticeDuration[] = "QuickAnswers.Consent.Duration";
+const char kQuickAnswersNoticeImpression[] = "QuickAnswers.Consent.Impression";
 
 std::string ResultTypeToString(ResultType result_type) {
   switch (result_type) {
@@ -45,13 +45,13 @@
   }
 }
 
-std::string ConsentInteractionTypeToString(ConsentInteractionType type) {
+std::string NoticeInteractionTypeToString(NoticeInteractionType type) {
   switch (type) {
-    case ConsentInteractionType::kAccept:
+    case NoticeInteractionType::kAccept:
       return "Accept";
-    case ConsentInteractionType::kManageSettings:
+    case NoticeInteractionType::kManageSettings:
       return "ManageSettings";
-    case ConsentInteractionType::kDismiss:
+    case NoticeInteractionType::kDismiss:
       return "Dismiss";
   }
 }
@@ -104,24 +104,24 @@
                         /*is_medium_bucketization=*/true);
 }
 
-void RecordConsentInteraction(ConsentInteractionType type,
-                              int nth_impression,
-                              const base::TimeDelta duration) {
-  std::string interaction_type = ConsentInteractionTypeToString(type);
+void RecordNoticeInteraction(NoticeInteractionType type,
+                             int nth_impression,
+                             const base::TimeDelta duration) {
+  std::string interaction_type = NoticeInteractionTypeToString(type);
   base::UmaHistogramExactLinear(
-      base::StringPrintf("%s.%s", kQuickAnswersConsentImpression,
+      base::StringPrintf("%s.%s", kQuickAnswersNoticeImpression,
                          interaction_type.c_str()),
-      nth_impression, kConsentImpressionCap);
+      nth_impression, kNoticeImpressionCap);
   base::UmaHistogramTimes(
-      base::StringPrintf("%s.%s", kQuickAnswersConsentDuration,
+      base::StringPrintf("%s.%s", kQuickAnswersNoticeDuration,
                          interaction_type.c_str()),
       duration);
 }
 
-void RecordConsentImpression(int nth_impression) {
+void RecordNoticeImpression(int nth_impression) {
   // Record every impression event.
-  base::UmaHistogramExactLinear(kQuickAnswersConsent, nth_impression,
-                                kConsentImpressionCap);
+  base::UmaHistogramExactLinear(kQuickAnswersNotice, nth_impression,
+                                kNoticeImpressionCap);
 }
 
 void RecordIntentType(IntentType intent_type) {
diff --git a/chromeos/components/quick_answers/utils/quick_answers_metrics.h b/chromeos/components/quick_answers/utils/quick_answers_metrics.h
index 90206085..b239ca9 100644
--- a/chromeos/components/quick_answers/utils/quick_answers_metrics.h
+++ b/chromeos/components/quick_answers/utils/quick_answers_metrics.h
@@ -35,12 +35,12 @@
 
 // Record user interaction with the consent UI with how many times the user has
 // seen the consent and impression duration.
-void RecordConsentInteraction(ConsentInteractionType type,
-                              int nth_impression,
-                              const base::TimeDelta duration);
+void RecordNoticeInteraction(NoticeInteractionType type,
+                             int nth_impression,
+                             const base::TimeDelta duration);
 
 // Record consent impression with how many times the user has seen the consent.
-void RecordConsentImpression(int nth_impression);
+void RecordNoticeImpression(int nth_impression);
 
 // Record the intent generated on-device.
 void RecordIntentType(IntentType intent_type);
diff --git a/chromeos/components/scanning/resources/scanner_select.html b/chromeos/components/scanning/resources/scanner_select.html
index adaad8c..af9bc5a 100644
--- a/chromeos/components/scanning/resources/scanner_select.html
+++ b/chromeos/components/scanning/resources/scanner_select.html
@@ -17,7 +17,7 @@
   </div>
   <!-- TODO(jschettler): Verify this meets a11y expecations (e.g. ChromeVox
       should announce when a new option is focused). -->
-  <select class="md-select" on-change="onSelectedScannerChange_"
+  <select class="md-select" value="{{selectedScannerId::change}}"
       hidden$="[[!loaded]]" disabled="[[disabled_]]">
     <!-- TODO(jschettler): Figure out why hiding/disabling the option doesn't
         remove it from the dropdown. -->
diff --git a/chromeos/components/scanning/resources/scanner_select.js b/chromeos/components/scanning/resources/scanner_select.js
index 1815583..0e718fa 100644
--- a/chromeos/components/scanning/resources/scanner_select.js
+++ b/chromeos/components/scanning/resources/scanner_select.js
@@ -35,6 +35,12 @@
       value: () => [],
     },
 
+    /** @type {?string} */
+    selectedScannerId: {
+      type: String,
+      notify: true,
+    },
+
     loaded: Boolean,
 
     /** @private */
@@ -67,14 +73,6 @@
   },
 
   /**
-   * @param {!Event} event
-   * @private
-   */
-  onSelectedScannerChange_(event) {
-    this.fire('selected-scanner-change', event.target);
-  },
-
-  /**
    * Disables the dropdown based on the number of available scanners.
    * @param {number} numScanners
    * @private
diff --git a/chromeos/components/scanning/resources/scanning_app.html b/chromeos/components/scanning/resources/scanning_app.html
index b3e7acd..473c89b4 100644
--- a/chromeos/components/scanning/resources/scanning_app.html
+++ b/chromeos/components/scanning/resources/scanning_app.html
@@ -1,7 +1,9 @@
 <div id="header"></div>
 <div>
-  <scanner-select scanners="[[scanners_]]" loaded="[[loaded_]]"></scanner-select>
+  <scanner-select scanners="[[scanners_]]" loaded="[[loaded_]]"
+      selected-scanner-id="{{selectedScannerId}}"></scanner-select>
 </div>
 <div>
-  <source-select sources="[[capabilities_.sources]]"></source-select>
+  <source-select sources="[[capabilities_.sources]]"
+      selected-source="{{selectedSource}}"></source-select>
 </div>
diff --git a/chromeos/components/scanning/resources/scanning_app.js b/chromeos/components/scanning/resources/scanning_app.js
index b25c7f0..420a0ae 100644
--- a/chromeos/components/scanning/resources/scanning_app.js
+++ b/chromeos/components/scanning/resources/scanning_app.js
@@ -38,11 +38,8 @@
       value: () => [],
     },
 
-    /**
-     * @type {?mojoBase.mojom.UnguessableToken}
-     * @private
-     */
-    selectedScannerId_: Object,
+    /** @type (?string) */
+    selectedScannerId: String,
 
     /**
      * @type {?chromeos.scanning.mojom.ScannerCapabilities}
@@ -50,11 +47,8 @@
      */
     capabilities_: Object,
 
-    /**
-     * @type {?chromeos.scanning.mojom.ScanSource}
-     * @private
-     */
-    selectedSoure_: Object,
+    /** @type {?string} */
+    selectedSource: String,
 
     /** @private */
     loaded_: {
@@ -63,10 +57,7 @@
     },
   },
 
-  listeners: {
-    'selected-scanner-change': 'onSelectedScannerChange_',
-    'selected-source-change': 'onSelectedSourceChange_',
-  },
+  observers: ['onSelectedScannerIdChange_(selectedScannerId)'],
 
   /** @override */
   created() {
@@ -88,7 +79,7 @@
 
     // Set the first source as the selected source since it will be the first
     // option in the dropdown.
-    this.selectedSoure_ = this.capabilities_.sources[0];
+    this.selectedSource = this.capabilities_.sources[0].name;
   },
 
   /**
@@ -109,37 +100,20 @@
     // Since the first scanner is the default option in the dropdown, set the
     // selected ID to the fist scanner's ID until a different scanner is
     // selected.
-    this.selectedScannerId_ = this.scanners_[0].id;
-    this.scanService_.getScannerCapabilities(this.selectedScannerId_)
-        .then(this.onCapabilitiesReceived_.bind(this));
+    this.selectedScannerId = tokenToString(this.scanners_[0].id);
   },
 
   /**
-   * @param {!Event} event
+   * @param {!string} selectedScannerId
    * @private
    */
-  onSelectedScannerChange_(event) {
-    const value = event.detail.value;
-    if (!this.scannerIds_.has(value)) {
+  onSelectedScannerIdChange_(selectedScannerId) {
+    if (!this.scannerIds_.has(selectedScannerId)) {
       return;
     }
 
-    this.selectedScannerId_ = this.scannerIds_.get(value);
-    this.scanService_.getScannerCapabilities(this.selectedScannerId_)
+    this.scanService_
+        .getScannerCapabilities(this.scannerIds_.get(selectedScannerId))
         .then(this.onCapabilitiesReceived_.bind(this));
   },
-
-  /**
-   * @param {!Event} event
-   * @private
-   */
-  onSelectedSourceChange_(event) {
-    const value = event.detail.value;
-    for (const source of this.capabilities_.sources) {
-      if (source.name === value) {
-        this.selectedSoure_ = source;
-        break;
-      }
-    }
-  },
 });
diff --git a/chromeos/components/scanning/resources/source_select.html b/chromeos/components/scanning/resources/source_select.html
index 16cbb4f6..0aebf8a 100644
--- a/chromeos/components/scanning/resources/source_select.html
+++ b/chromeos/components/scanning/resources/source_select.html
@@ -14,7 +14,7 @@
 <div id="controls">
   <!-- TODO(jschettler): Verify this meets a11y expecations (e.g. ChromeVox
       should announce when a new option is focused). -->
-  <select class="md-select" on-change="onSelectedSourceChange_"
+  <select class="md-select" value="{{selectedSource::change}}"
       disabled="[[disabled_]]">
     <!-- TODO(jschettler): Determine how the sources should be sorted. -->
     <template is="dom-repeat" items="[[sources]]" as="source">
diff --git a/chromeos/components/scanning/resources/source_select.js b/chromeos/components/scanning/resources/source_select.js
index 0779582..442ac80 100644
--- a/chromeos/components/scanning/resources/source_select.js
+++ b/chromeos/components/scanning/resources/source_select.js
@@ -33,6 +33,12 @@
       value: () => [],
     },
 
+    /** @type {?string} */
+    selectedSource: {
+      type: String,
+      notify: true,
+    },
+
     /** @private */
     disabled_: Boolean,
   },
@@ -51,14 +57,6 @@
   },
 
   /**
-   * @param {!Event} event
-   * @private
-   */
-  onSelectedSourceChange_(event) {
-    this.fire('selected-source-change', event.target);
-  },
-
-  /**
    * Disables the dropdown based on the number of available sources.
    * @param {number} numSources
    * @private
diff --git a/chromeos/constants/chromeos_features.cc b/chromeos/constants/chromeos_features.cc
index 6b1b0eaa..a379913a 100644
--- a/chromeos/constants/chromeos_features.cc
+++ b/chromeos/constants/chromeos_features.cc
@@ -415,6 +415,11 @@
 // and perform phone-side actions within Chrome OS.
 const base::Feature kPhoneHub{"PhoneHub", base::FEATURE_DISABLED_BY_DEFAULT};
 
+// Controls whether Phone Hub will exclusively use BLE for its connection with
+// the user's phone.
+const base::Feature kPhoneHubUseBle{"PhoneHubUseBle",
+                                    base::FEATURE_DISABLED_BY_DEFAULT};
+
 // Controls whether the camera permissions should be shown in the Plugin
 // VM app settings.
 const base::Feature kPluginVmShowCameraPermissions{
@@ -691,6 +696,10 @@
   return base::FeatureList::IsEnabled(kPhoneHub);
 }
 
+bool IsPhoneHubUseBleEnabled() {
+  return base::FeatureList::IsEnabled(kPhoneHubUseBle) && IsPhoneHubEnabled();
+}
+
 bool IsPinAutosubmitFeatureEnabled() {
   return base::FeatureList::IsEnabled(kQuickUnlockPinAutosubmit);
 }
diff --git a/chromeos/constants/chromeos_features.h b/chromeos/constants/chromeos_features.h
index 7718635..85d37f8 100644
--- a/chromeos/constants/chromeos_features.h
+++ b/chromeos/constants/chromeos_features.h
@@ -189,6 +189,8 @@
 COMPONENT_EXPORT(CHROMEOS_CONSTANTS)
 extern const base::Feature kPhoneHub;
 COMPONENT_EXPORT(CHROMEOS_CONSTANTS)
+extern const base::Feature kPhoneHubUseBle;
+COMPONENT_EXPORT(CHROMEOS_CONSTANTS)
 extern const base::Feature kPluginVmShowCameraPermissions;
 COMPONENT_EXPORT(CHROMEOS_CONSTANTS)
 extern const base::Feature kPluginVmShowMicrophonePermissions;
@@ -302,6 +304,7 @@
 COMPONENT_EXPORT(CHROMEOS_CONSTANTS) bool IsOobeScreensPriorityEnabled();
 COMPONENT_EXPORT(CHROMEOS_CONSTANTS) bool IsParentalControlsSettingsEnabled();
 COMPONENT_EXPORT(CHROMEOS_CONSTANTS) bool IsPhoneHubEnabled();
+COMPONENT_EXPORT(CHROMEOS_CONSTANTS) bool IsPhoneHubUseBleEnabled();
 COMPONENT_EXPORT(CHROMEOS_CONSTANTS) bool IsPinAutosubmitFeatureEnabled();
 COMPONENT_EXPORT(CHROMEOS_CONSTANTS)
 bool IsPinAutosubmitBackfillFeatureEnabled();
diff --git a/components/autofill/core/browser/payments/autofill_offer_manager.cc b/components/autofill/core/browser/payments/autofill_offer_manager.cc
index c0be6b5..c418886 100644
--- a/components/autofill/core/browser/payments/autofill_offer_manager.cc
+++ b/components/autofill/core/browser/payments/autofill_offer_manager.cc
@@ -62,9 +62,14 @@
   for (auto& suggestion : suggestions) {
     std::string id = suggestion.backend_id;
     if (eligible_offers_map.count(id)) {
-      suggestion.offer_label = l10n_util::GetStringFUTF16(
-          IDS_AUTOFILL_OFFERS_CASHBACK,
-          base::UTF8ToUTF16(eligible_offers_map[id]->offer_reward_amount));
+      base::string16 reward_amount =
+          base::UTF8ToUTF16(eligible_offers_map[id]->offer_reward_amount);
+
+      auto string_id = (reward_amount.find('%') == std::string::npos)
+                           ? IDS_AUTOFILL_OFFERS_DISCOUNT
+                           : IDS_AUTOFILL_OFFERS_CASHBACK;
+      suggestion.offer_label =
+          l10n_util::GetStringFUTF16(string_id, reward_amount);
     }
   }
 }
diff --git a/components/autofill/core/browser/payments/autofill_offer_manager_unittest.cc b/components/autofill/core/browser/payments/autofill_offer_manager_unittest.cc
index 60aa36e..802136d 100644
--- a/components/autofill/core/browser/payments/autofill_offer_manager_unittest.cc
+++ b/components/autofill/core/browser/payments/autofill_offer_manager_unittest.cc
@@ -96,7 +96,7 @@
   autofill_offer_manager_->UpdateSuggestionsWithOffers(GURL(kTestUrlWithParam),
                                                        suggestions);
 
-  EXPECT_EQ(suggestions[0].offer_label, base::UTF8ToUTF16("$4 cashback"));
+  EXPECT_EQ(suggestions[0].offer_label, base::UTF8ToUTF16("$4 Off"));
 }
 
 TEST_F(AutofillOfferManagerTest, UpdateSuggestionsWithOffers_EligibleCashback) {
@@ -108,7 +108,7 @@
   autofill_offer_manager_->UpdateSuggestionsWithOffers(GURL(kTestUrlWithParam),
                                                        suggestions);
 
-  EXPECT_EQ(suggestions[0].offer_label, base::UTF8ToUTF16("5% cashback"));
+  EXPECT_EQ(suggestions[0].offer_label, base::UTF8ToUTF16("5% Cash Back"));
 }
 
 TEST_F(AutofillOfferManagerTest, UpdateSuggestionsWithOffers_ExpiredOffer) {
diff --git a/components/autofill_payments_strings.grdp b/components/autofill_payments_strings.grdp
index 58f332a..f1ad220e8 100644
--- a/components/autofill_payments_strings.grdp
+++ b/components/autofill_payments_strings.grdp
@@ -507,6 +507,10 @@
 
   <!-- Credit card offers and rewards related strings -->
   <message name="IDS_AUTOFILL_OFFERS_CASHBACK" desc="Displays that a cashback offer will be rewarded if credit card is used on current page. Part of Autofill suggestions popup.">
-    <ph name="REWARD_VALUE">$1<ex>5%</ex></ph> cashback
+    <ph name="PERCENT">$1<ex>5%</ex></ph> Cash Back
   </message>
+  <message name="IDS_AUTOFILL_OFFERS_DISCOUNT" desc="Displays a discount that will be rewarded if credit card is used on current page. Part of Autofill suggestions popup.">
+    <ph name="DISCOUNT">$1<ex>$$3</ex></ph> Off
+  </message>
+
 </grit-part>
diff --git a/components/autofill_payments_strings_grdp/IDS_AUTOFILL_OFFERS_CASHBACK.png.sha1 b/components/autofill_payments_strings_grdp/IDS_AUTOFILL_OFFERS_CASHBACK.png.sha1
index 3784afc..ef49ef3 100644
--- a/components/autofill_payments_strings_grdp/IDS_AUTOFILL_OFFERS_CASHBACK.png.sha1
+++ b/components/autofill_payments_strings_grdp/IDS_AUTOFILL_OFFERS_CASHBACK.png.sha1
@@ -1 +1 @@
-c4d8bc532aa3a5146c9d639d56c364ddb1a3db14
\ No newline at end of file
+378244426ac8f525d17518614e3d7b1508061cf9
\ No newline at end of file
diff --git a/components/autofill_payments_strings_grdp/IDS_AUTOFILL_OFFERS_DISCOUNT.png.sha1 b/components/autofill_payments_strings_grdp/IDS_AUTOFILL_OFFERS_DISCOUNT.png.sha1
new file mode 100644
index 0000000..0f0c9a19
--- /dev/null
+++ b/components/autofill_payments_strings_grdp/IDS_AUTOFILL_OFFERS_DISCOUNT.png.sha1
@@ -0,0 +1 @@
+a09ae4c895b292cf8ce625cf9843a477d86dfc35
\ No newline at end of file
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_de.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_de.xtb
index bd1f510..9cb42fb1 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_de.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_de.xtb
@@ -265,6 +265,7 @@
 <translation id="8249310407154411074">Ganz nach oben</translation>
 <translation id="8261506727792406068">Löschen</translation>
 <translation id="8300705686683892304">Von App verwaltet</translation>
+<translation id="8324158725704657629">Nicht mehr fragen</translation>
 <translation id="8372893542064058268">Lässt die Hintergrundsynchronisierung für eine bestimmte Website zu.</translation>
 <translation id="8376384591331888629">Einschließlich Cookies von Drittanbietern auf dieser Website</translation>
 <translation id="83792324527827022">Eine Website verwendet Ihre Kamera und Ihr Mikrofon</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_es-419.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_es-419.xtb
index 10ff252..69dd6c4d 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_es-419.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_es-419.xtb
@@ -265,6 +265,7 @@
 <translation id="8249310407154411074">Mover al principio</translation>
 <translation id="8261506727792406068">Borrar</translation>
 <translation id="8300705686683892304">Administrados por una app</translation>
+<translation id="8324158725704657629">No volver a preguntar</translation>
 <translation id="8372893542064058268">Permite la sincronización en segundo plano para un sitio específico.</translation>
 <translation id="8376384591331888629">Habilitar también cookies de terceros en este sitio</translation>
 <translation id="83792324527827022">Un sitio está utilizando la cámara y el micrófono</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_fr.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_fr.xtb
index 023c706..bb486a0 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_fr.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_fr.xtb
@@ -265,6 +265,7 @@
 <translation id="8249310407154411074">Déplacer vers le haut</translation>
 <translation id="8261506727792406068">Supprimer</translation>
 <translation id="8300705686683892304">Gérés par l'application</translation>
+<translation id="8324158725704657629">Ne plus me demander</translation>
 <translation id="8372893542064058268">Autorise la synchronisation en arrière-plan pour un site spécifique.</translation>
 <translation id="8376384591331888629">Inclure les cookies tiers de ce site</translation>
 <translation id="83792324527827022">Un site utilise votre appareil photo et votre micro</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_mr.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_mr.xtb
index 8f87aaf8..6705c32 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_mr.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_mr.xtb
@@ -265,6 +265,7 @@
 <translation id="8249310407154411074">वर न्या</translation>
 <translation id="8261506727792406068">हटवा</translation>
 <translation id="8300705686683892304">ॲपद्वारे व्यवस्थापित</translation>
+<translation id="8324158725704657629">पुन्हा विचारू नका</translation>
 <translation id="8372893542064058268">विशिष्ट साइटसाठी पार्श्वभूमी संकालनासाठी अनुमती द्या.</translation>
 <translation id="8376384591331888629">या साइटवरील तृतीय-पक्ष कुकीच्या समावेशासह</translation>
 <translation id="83792324527827022">साइट तुमचा कॅमेरा आणि मायक्रोफोन वापरत आहे</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_nl.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_nl.xtb
index 4bd189b..be5009a2 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_nl.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_nl.xtb
@@ -265,6 +265,7 @@
 <translation id="8249310407154411074">Bovenaan zetten</translation>
 <translation id="8261506727792406068">Verwijderen</translation>
 <translation id="8300705686683892304">Beheerd door app</translation>
+<translation id="8324158725704657629">Niet meer vragen</translation>
 <translation id="8372893542064058268">Synchronisatie op de achtergrond toestaan voor een specifieke site.</translation>
 <translation id="8376384591331888629">Inclusief cookies van derden op deze site</translation>
 <translation id="83792324527827022">Een site gebruikt de camera en microfoon</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_pt-BR.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_pt-BR.xtb
index 64cc0b2..4d09cf7 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_pt-BR.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_pt-BR.xtb
@@ -265,6 +265,7 @@
 <translation id="8249310407154411074">Mover para o início</translation>
 <translation id="8261506727792406068">Excluir</translation>
 <translation id="8300705686683892304">Gerenciados por app</translation>
+<translation id="8324158725704657629">Não perguntar novamente</translation>
 <translation id="8372893542064058268">Permite a sincronização em segundo plano para um site específico.</translation>
 <translation id="8376384591331888629">Incluindo os cookies de terceiros desse site</translation>
 <translation id="83792324527827022">Um site está usando sua câmera e seu microfone</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_ru.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_ru.xtb
index 947e91f..34490c6 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_ru.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_ru.xtb
@@ -265,6 +265,7 @@
 <translation id="8249310407154411074">Переместить в начало</translation>
 <translation id="8261506727792406068">Удалить</translation>
 <translation id="8300705686683892304">Под управлением приложения</translation>
+<translation id="8324158725704657629">Больше не спрашивать</translation>
 <translation id="8372893542064058268">Разрешить фоновую синхронизацию для конкретного сайта.</translation>
 <translation id="8376384591331888629">В том числе сторонние файлы cookie на сайте</translation>
 <translation id="83792324527827022">Сайт использует вашу камеру и микрофон</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_th.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_th.xtb
index b9e4e94..095736b 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_th.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_th.xtb
@@ -265,6 +265,7 @@
 <translation id="8249310407154411074">เลื่อนไปบนสุด</translation>
 <translation id="8261506727792406068">ลบ</translation>
 <translation id="8300705686683892304">จัดการโดยแอป</translation>
+<translation id="8324158725704657629">ไม่ต้องถามอีก</translation>
 <translation id="8372893542064058268">อนุญาตให้ใช้การซิงค์ในแบ็กกราวด์สำหรับเว็บไซต์ที่เจาะจง</translation>
 <translation id="8376384591331888629">รวมคุกกี้ของบุคคลที่สามในเว็บไซต์นี้</translation>
 <translation id="83792324527827022">มีเว็บไซต์กำลังใช้กล้องถ่ายรูปและไมโครโฟน</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_ur.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_ur.xtb
index 40eeddf..468ec9e4 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_ur.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_ur.xtb
@@ -265,6 +265,7 @@
 <translation id="8249310407154411074">اوپر منتقل کریں</translation>
 <translation id="8261506727792406068">حذف کریں</translation>
 <translation id="8300705686683892304">ایپ کے زیر انتظام ہیں</translation>
+<translation id="8324158725704657629">دوبارہ مت پوچھیں</translation>
 <translation id="8372893542064058268">کسی مخصوص سائٹ کیلئے پس منظر کی مطابقت پذیری کی اجازت دیں۔</translation>
 <translation id="8376384591331888629">اس سائٹ میں فریق ثالث کوکیز سمیت</translation>
 <translation id="83792324527827022">ایک سائٹ آپ کا کیمرا اور مائیکروفون استعمال کر رہی ہے</translation>
diff --git a/components/certificate_transparency/chrome_ct_policy_enforcer_unittest.cc b/components/certificate_transparency/chrome_ct_policy_enforcer_unittest.cc
index d072578..03b849d 100644
--- a/components/certificate_transparency/chrome_ct_policy_enforcer_unittest.cc
+++ b/components/certificate_transparency/chrome_ct_policy_enforcer_unittest.cc
@@ -16,7 +16,6 @@
 #include "crypto/rsa_private_key.h"
 #include "crypto/sha2.h"
 #include "net/cert/ct_policy_status.h"
-#include "net/cert/ct_verify_result.h"
 #include "net/cert/x509_certificate.h"
 #include "net/cert/x509_util.h"
 #include "net/log/net_log_with_source.h"
diff --git a/components/feed/core/common/pref_names.cc b/components/feed/core/common/pref_names.cc
index c98e194d2..a50a96ff 100644
--- a/components/feed/core/common/pref_names.cc
+++ b/components/feed/core/common/pref_names.cc
@@ -33,6 +33,10 @@
 const char kHostOverrideHost[] = "feed.host_override.host";
 const char kHostOverrideBlessNonce[] = "feed.host_override.bless_nonce";
 
+const char kHasReachedClickAndViewActionsUploadConditions[] =
+    "feed.clicks_and_views_upload_conditions_reached";
+const char kLastFetchHadNoticeCard[] = "feed.last_fetch_had_notice_card";
+
 const char kThrottlerRequestCountListPrefName[] =
     "feedv2.request_throttler.request_counts";
 const char kThrottlerLastRequestTime[] =
@@ -61,6 +65,9 @@
   registry->RegisterDictionaryPref(feed::prefs::kMetricsData);
   registry->RegisterStringPref(feed::prefs::kClientInstanceId, "");
   registry->RegisterStringPref(feed::prefs::kActionsEndpointOverride, "");
+  registry->RegisterBooleanPref(
+      feed::prefs::kHasReachedClickAndViewActionsUploadConditions, false);
+  registry->RegisterBooleanPref(feed::prefs::kLastFetchHadNoticeCard, true);
   UserClassifier::RegisterProfilePrefs(registry);
 }
 
diff --git a/components/feed/core/common/pref_names.h b/components/feed/core/common/pref_names.h
index 2ff1020..9c38148 100644
--- a/components/feed/core/common/pref_names.h
+++ b/components/feed/core/common/pref_names.h
@@ -42,6 +42,20 @@
 // The pref name for the feed host override auth token.
 extern const char kHostOverrideBlessNonce[];
 
+// The pref name for the bit that determines whether the conditions are reached
+// to enable the upload of click and view actions in the feed with the notice
+// card when using the feature kInterestFeedConditionalClickAndViewActionUpload.
+// This is for when the privacy notice card is at the second position in the
+// feed. Currently only used in V1.
+extern const char kHasReachedClickAndViewActionsUploadConditions[];
+
+// The pref name for the bit that determines whether the notice card was present
+// in the feed in the last fetch of content. The notice card is considered as
+// present by default to make sure that the upload of click and view actions
+// doesn't take place when the notice card is present but has not yet been
+// detected. Currently only used in V1.
+extern const char kLastFetchHadNoticeCard[];
+
 // The following prefs are used only by v2.
 
 // The pref name for the request throttler counts.
diff --git a/components/feed/feed_feature_list.cc b/components/feed/feed_feature_list.cc
index ed092c3..cab56346 100644
--- a/components/feed/feed_feature_list.cc
+++ b/components/feed/feed_feature_list.cc
@@ -36,6 +36,14 @@
 const base::Feature kReportFeedUserActions{"ReportFeedUserActions",
                                            base::FEATURE_DISABLED_BY_DEFAULT};
 
+// Determines whether conditions should be reached before enabling the upload of
+// click and view actions in the feed (e.g., the user needs to view X cards).
+// For example, This is needed when the notice card is at the second position in
+// the feed.
+const base::Feature kInterestFeedV1ClicksAndViewsConditionalUpload{
+    "InterestFeedV1ClickAndViewActionsConditionalUpload",
+    base::FEATURE_DISABLED_BY_DEFAULT};
+
 const char kDefaultReferrerUrl[] =
     "https://www.googleapis.com/auth/chrome-content-suggestions";
 
diff --git a/components/feed/feed_feature_list.h b/components/feed/feed_feature_list.h
index 8906eb84..1b393c54 100644
--- a/components/feed/feed_feature_list.h
+++ b/components/feed/feed_feature_list.h
@@ -30,6 +30,8 @@
 // for personalization. Also enables the feed header menu to manage the feed.
 extern const base::Feature kReportFeedUserActions;
 
+extern const base::Feature kInterestFeedV1ClicksAndViewsConditionalUpload;
+
 std::string GetFeedReferrerUrl();
 
 }  // namespace feed
diff --git a/components/language/core/common/language_experiments.cc b/components/language/core/common/language_experiments.cc
index 263aa35..0a25484 100644
--- a/components/language/core/common/language_experiments.cc
+++ b/components/language/core/common/language_experiments.cc
@@ -32,6 +32,8 @@
     "NotifySyncOnLanguageDetermined", base::FEATURE_ENABLED_BY_DEFAULT};
 const base::Feature kDetailedLanguageSettings{
     "DetailedLanguageSettings", base::FEATURE_DISABLED_BY_DEFAULT};
+const base::Feature kTranslateAssistContent{"TranslateAssistContent",
+                                            base::FEATURE_DISABLED_BY_DEFAULT};
 const base::Feature kTranslateIntent{"TranslateIntent",
                                      base::FEATURE_DISABLED_BY_DEFAULT};
 
diff --git a/components/language/core/common/language_experiments.h b/components/language/core/common/language_experiments.h
index 74ed64a..f648153 100644
--- a/components/language/core/common/language_experiments.h
+++ b/components/language/core/common/language_experiments.h
@@ -39,6 +39,9 @@
 // This feature enables setting the application language on Android.
 extern const base::Feature kDetailedLanguageSettings;
 
+// This feature enables providing Translate data to Assistant.
+extern const base::Feature kTranslateAssistContent;
+
 // This feature enables an intent that starts translating the foreground tab.
 extern const base::Feature kTranslateIntent;
 
diff --git a/components/metrics/generate_expired_histograms_array.gni b/components/metrics/generate_expired_histograms_array.gni
index 47fef83..900ab01 100644
--- a/components/metrics/generate_expired_histograms_array.gni
+++ b/components/metrics/generate_expired_histograms_array.gni
@@ -8,7 +8,8 @@
 # Parameters:
 #   inputs:
 #     List of file name to read. Each file should be a .xml file with
-#     histogram descriptions.
+#     histogram descriptions and should be a path starting with
+#     //tools/metrics/histograms/
 #
 #   namespace (optional):
 #     Namespace in which the generated code should be scoped. If left empty,
diff --git a/components/omnibox/browser/BUILD.gn b/components/omnibox/browser/BUILD.gn
index 88dc82b0..8136b5a 100644
--- a/components/omnibox/browser/BUILD.gn
+++ b/components/omnibox/browser/BUILD.gn
@@ -125,6 +125,8 @@
     "in_memory_url_index.h",
     "in_memory_url_index_types.cc",
     "in_memory_url_index_types.h",
+    "inline_autocompletion_util.cc",
+    "inline_autocompletion_util.h",
     "keyword_extensions_delegate.cc",
     "keyword_extensions_delegate.h",
     "keyword_provider.cc",
@@ -487,6 +489,7 @@
     "history_url_provider_unittest.cc",
     "in_memory_url_index_types_unittest.cc",
     "in_memory_url_index_unittest.cc",
+    "inline_autocompletion_util_unittest.cc",
     "keyword_provider_unittest.cc",
     "local_history_zero_suggest_provider_unittest.cc",
     "location_bar_model_impl_unittest.cc",
diff --git a/components/omnibox/browser/autocomplete_match.cc b/components/omnibox/browser/autocomplete_match.cc
index 58132b9e..871c1c08 100644
--- a/components/omnibox/browser/autocomplete_match.cc
+++ b/components/omnibox/browser/autocomplete_match.cc
@@ -31,6 +31,7 @@
 #include "components/search_engines/search_engine_utils.h"
 #include "components/search_engines/template_url.h"
 #include "components/search_engines/template_url_service.h"
+#include "inline_autocompletion_util.h"
 #include "net/base/registry_controlled_domains/registry_controlled_domain.h"
 #include "ui/gfx/vector_icon_types.h"
 #include "url/third_party/mozilla/url_parse.h"
@@ -75,24 +76,6 @@
   return false;
 }
 
-// Finds the first occurrence of |search| at a wordbreak within |text|.
-size_t FindAtWordbreak(const base::string16& text,
-                       const base::string16& search) {
-  WordStarts word_starts;
-  String16VectorFromString16(text, false, &word_starts);
-  size_t next_occurrence = std::string::npos;
-  for (auto word_start : word_starts) {
-    if (next_occurrence != std::string::npos && word_start < next_occurrence)
-      continue;
-    next_occurrence = text.find(search, word_start);
-    if (next_occurrence == std::string::npos)
-      break;
-    if (word_start == next_occurrence)
-      return next_occurrence;
-  }
-  return std::string::npos;
-}
-
 }  // namespace
 
 // static
@@ -1134,7 +1117,7 @@
 void AutocompleteMatch::UpgradeMatchWithPropertiesFrom(
     AutocompleteMatch& duplicate_match) {
   // For Entity Matches, absorb the duplicate match's |allowed_to_be_default|
-  // and |inline_autocomplete| properties.
+  // and |inline_autocompletion| properties.
   if (type == AutocompleteMatchType::SEARCH_SUGGEST_ENTITY &&
       fill_into_edit == duplicate_match.fill_into_edit &&
       duplicate_match.allowed_to_be_default_match) {
diff --git a/components/omnibox/browser/inline_autocompletion_util.cc b/components/omnibox/browser/inline_autocompletion_util.cc
new file mode 100644
index 0000000..26c54c4
--- /dev/null
+++ b/components/omnibox/browser/inline_autocompletion_util.cc
@@ -0,0 +1,79 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "inline_autocompletion_util.h"
+
+size_t FindAtWordbreak(const base::string16& text,
+                       const base::string16& search,
+                       size_t search_start) {
+  std::vector<size_t> word_starts;
+  String16VectorFromString16(text, false, &word_starts);
+  size_t next_occurrence = std::string::npos;
+  for (auto word_start : word_starts) {
+    if (word_start < search_start)
+      continue;
+    if (next_occurrence != std::string::npos && word_start < next_occurrence)
+      continue;
+    next_occurrence = text.find(search, word_start);
+    if (next_occurrence == std::string::npos)
+      break;
+    if (word_start == next_occurrence)
+      return next_occurrence;
+  }
+  return std::string::npos;
+}
+
+std::vector<std::pair<size_t, size_t>> FindWordsSequentiallyAtWordbreak(
+    const base::string16& text,
+    const base::string16& search) {
+  std::vector<std::pair<size_t, size_t>> occurrences;
+  size_t cursor = 0u;
+  std::vector<size_t> search_word_starts{};
+  auto search_words =
+      String16VectorFromString16(search, false, &search_word_starts);
+  for (size_t i = 0; i < search_word_starts.size(); ++i) {
+    auto search_word = search_words[i];
+    // The non-word characters following |search_word|. Can be empty for the
+    // last word. Can be multiple characters.
+    auto delimiter =
+        search
+            .substr(search_word_starts[i],
+                    i == search_word_starts.size() - 1
+                        ? base::string16::npos
+                        : search_word_starts[i + 1] - search_word_starts[i])
+            .substr(search_word.size());
+    if ((cursor = FindAtWordbreak(text, search_word, cursor)) ==
+        std::string::npos)
+      return {};
+    occurrences.emplace_back(cursor, cursor + search_word.size());
+    cursor += search_word.size();
+    if (delimiter.empty())
+      continue;
+    if ((cursor = text.find(delimiter, cursor)) == std::string::npos)
+      return {};
+    occurrences.emplace_back(cursor, cursor + delimiter.size());
+    cursor += delimiter.size();
+  }
+  return occurrences;
+}
+
+std::vector<gfx::Range> InvertAndReverseRanges(
+    size_t length,
+    std::vector<std::pair<size_t, size_t>> ranges) {
+  std::vector<gfx::Range> inverted;
+  size_t cursor = length;
+  for (size_t i = ranges.size(); i-- != 0;) {
+    auto range = ranges[i];
+    // Skip empty ranges.
+    if (range.first == range.second)
+      continue;
+    // Merge adjacent ranges.
+    if (cursor != range.second)
+      inverted.emplace_back(cursor, range.second);
+    cursor = range.first;
+  }
+  if (cursor != 0)
+    inverted.emplace_back(cursor, 0);
+  return inverted;
+}
diff --git a/components/omnibox/browser/inline_autocompletion_util.h b/components/omnibox/browser/inline_autocompletion_util.h
new file mode 100644
index 0000000..170da1a
--- /dev/null
+++ b/components/omnibox/browser/inline_autocompletion_util.h
@@ -0,0 +1,42 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef COMPONENTS_OMNIBOX_BROWSER_INLINE_AUTOCOMPLETION_UTIL_H_
+#define COMPONENTS_OMNIBOX_BROWSER_INLINE_AUTOCOMPLETION_UTIL_H_
+
+#include <stddef.h>
+
+#include <vector>
+#include "base/strings/string16.h"
+#include "components/omnibox/browser/in_memory_url_index_types.h"
+#include "ui/gfx/range/range.h"
+
+// Finds the first occurrence of |search| at a wordbreak within |text| starting
+// at |search_start|.
+size_t FindAtWordbreak(const base::string16& text,
+                       const base::string16& search,
+                       size_t search_start = 0);
+
+// Splits |search| into words and finds them in |text|, returning a vector of
+// occurrence starts and ends.
+// - Occurrences must be sequential. E.g. 'a c' can be found in 'a b c' but not
+//   in 'c b a'.
+// - Occurrences must be at word breaks. E.g. 'a c' cannot be found in 'a bc'.
+// - Whitespaces must also match. E.g. 'a c' cannot be found in 'a-c' but can
+//   be found in 'a -c' and 'a- c'.
+// If all words in |search| were not found, then returns an empty vector.
+std::vector<std::pair<size_t, size_t>> FindWordsSequentiallyAtWordbreak(
+    const base::string16& text,
+    const base::string16& search);
+
+// Inverts and reverses |ranges| in a domain of [0, |length|). Ranges are
+// interpreted as {start, end}. E.g., if |length| is 10 and |ranges| are
+// {{2, 3} {5, 9}}, th |InvertRanges| will return {{10, 9}, {5, 3}, {2, 0}}.
+// Assumes |ranges| is in forward order; i.e. |ranges[i+1]| occurs after
+// |ranges[i]| and |ranges[i].second| after |ranges[i].first|.
+std::vector<gfx::Range> InvertAndReverseRanges(
+    size_t length,
+    std::vector<std::pair<size_t, size_t>> ranges);
+
+#endif  // COMPONENTS_OMNIBOX_BROWSER_INLINE_AUTOCOMPLETION_UTIL_H_
diff --git a/components/omnibox/browser/inline_autocompletion_util_unittest.cc b/components/omnibox/browser/inline_autocompletion_util_unittest.cc
new file mode 100644
index 0000000..12dd115
--- /dev/null
+++ b/components/omnibox/browser/inline_autocompletion_util_unittest.cc
@@ -0,0 +1,103 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "components/omnibox/browser/inline_autocompletion_util.h"
+
+#include <stddef.h>
+
+#include "base/strings/utf_string_conversions.h"
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace {
+
+TEST(InlineAutocompletionUtilTest, FindAtWordbreak) {
+  // Should find the first wordbreak occurrence.
+  EXPECT_EQ(FindAtWordbreak(base::UTF8ToUTF16("prefixmatch wordbreak_match"),
+                            base::UTF8ToUTF16("match")),
+            22u);
+
+  // Should return npos when no occurrences exist.
+  EXPECT_EQ(FindAtWordbreak(base::UTF8ToUTF16("prefixmatch"),
+                            base::UTF8ToUTF16("match")),
+            std::string::npos);
+
+  // Should skip occurrences before |search_start|.
+  EXPECT_EQ(FindAtWordbreak(base::UTF8ToUTF16("match match"),
+                            base::UTF8ToUTF16("match"), 1),
+            6u);
+}
+
+TEST(InlineAutocompletionUtilTest, FindWordsSequentiallyAtWordbreak) {
+  using pair = std::pair<size_t, size_t>;
+
+  // Occurrences must be sequential.
+  EXPECT_THAT(FindWordsSequentiallyAtWordbreak(base::UTF8ToUTF16("a b c"),
+                                               base::UTF8ToUTF16("a c")),
+              testing::ElementsAre(pair{0, 1}, pair{1, 2}, pair{4, 5}));
+  EXPECT_THAT(FindWordsSequentiallyAtWordbreak(base::UTF8ToUTF16("c b a"),
+                                               base::UTF8ToUTF16("a b")),
+              testing::ElementsAre());
+  EXPECT_THAT(FindWordsSequentiallyAtWordbreak(base::UTF8ToUTF16("b a b"),
+                                               base::UTF8ToUTF16("a b")),
+              testing::ElementsAre(pair{2, 3}, pair{3, 4}, pair{4, 5}));
+
+  // Occurrences must be at word breaks.
+  EXPECT_THAT(FindWordsSequentiallyAtWordbreak(base::UTF8ToUTF16("a b-c"),
+                                               base::UTF8ToUTF16("a c")),
+              testing::ElementsAre(pair{0, 1}, pair{1, 2}, pair{4, 5}));
+  EXPECT_THAT(FindWordsSequentiallyAtWordbreak(base::UTF8ToUTF16("a bc"),
+                                               base::UTF8ToUTF16("a c")),
+              testing::ElementsAre());
+  EXPECT_THAT(FindWordsSequentiallyAtWordbreak(base::UTF8ToUTF16("a bc c"),
+                                               base::UTF8ToUTF16("a c")),
+              testing::ElementsAre(pair{0, 1}, pair{1, 2}, pair{5, 6}));
+
+  // Whitespaces must also match
+  EXPECT_THAT(FindWordsSequentiallyAtWordbreak(base::UTF8ToUTF16("a-c"),
+                                               base::UTF8ToUTF16("a c")),
+              testing::ElementsAre());
+  EXPECT_THAT(FindWordsSequentiallyAtWordbreak(base::UTF8ToUTF16("a c"),
+                                               base::UTF8ToUTF16("a c ")),
+              testing::ElementsAre());
+  EXPECT_THAT(FindWordsSequentiallyAtWordbreak(base::UTF8ToUTF16("a -c"),
+                                               base::UTF8ToUTF16("a c")),
+              testing::ElementsAre(pair{0, 1}, pair{1, 2}, pair{3, 4}));
+  EXPECT_THAT(FindWordsSequentiallyAtWordbreak(base::UTF8ToUTF16("a- c"),
+                                               base::UTF8ToUTF16("a c")),
+              testing::ElementsAre(pair{0, 1}, pair{2, 3}, pair{3, 4}));
+  EXPECT_THAT(FindWordsSequentiallyAtWordbreak(base::UTF8ToUTF16("a c c"),
+                                               base::UTF8ToUTF16("a  c")),
+              testing::ElementsAre());
+  EXPECT_THAT(FindWordsSequentiallyAtWordbreak(base::UTF8ToUTF16("a c  c"),
+                                               base::UTF8ToUTF16("a  c")),
+              testing::ElementsAre(pair{0, 1}, pair{3, 5}, pair{5, 6}));
+}
+
+TEST(InlineAutocompletionUtilTest, InvertAndReverseRanges) {
+  // Empty |ranges| in empty |length|.
+  EXPECT_THAT(InvertAndReverseRanges(0, {}), testing::ElementsAre());
+  // Empty |ranges| in non-empty |length|. 12345 -> [12345]
+  EXPECT_THAT(InvertAndReverseRanges(5, {}),
+              testing::ElementsAre(gfx::Range{5, 0}));
+  // Single empty range in |ranges|.  12|345 -> [12345]
+  EXPECT_THAT(InvertAndReverseRanges(5, {{2, 2}}),
+              testing::ElementsAre(gfx::Range{5, 0}));
+  // Single range in |ranges|. 12[3]45 -> [12]3[45]
+  EXPECT_THAT(InvertAndReverseRanges(5, {{2, 3}}),
+              testing::ElementsAre(gfx::Range{5, 3}, gfx::Range{2, 0}));
+  // Single range in |ranges| spanning all of |length|. [12345] -> 12345
+  EXPECT_THAT(InvertAndReverseRanges(5, {{0, 5}}), testing::ElementsAre());
+  // Multiple ranges in |ranges|, including adjacent and empty ranges.
+  // 1[23][45]6[78]9 -> [1]2345[6]78[9]
+  EXPECT_THAT(InvertAndReverseRanges(9, {{1, 3}, {3, 5}, {6, 8}}),
+              testing::ElementsAre(gfx::Range{9, 8}, gfx::Range{6, 5},
+                                   gfx::Range{1, 0}));
+  // |ranges| ending at |length| and starting 0.
+  // [123][45]6[789] -> 12345[6]789
+  EXPECT_THAT(InvertAndReverseRanges(9, {{0, 3}, {3, 5}, {6, 9}}),
+              testing::ElementsAre(gfx::Range{6, 5}));
+}
+
+}  // namespace
diff --git a/components/performance_manager/graph/frame_node_impl.cc b/components/performance_manager/graph/frame_node_impl.cc
index 45a6b65..489ea99 100644
--- a/components/performance_manager/graph/frame_node_impl.cc
+++ b/components/performance_manager/graph/frame_node_impl.cc
@@ -41,8 +41,7 @@
           process_node->render_process_host_proxy()
               .render_process_host_id()
               .value(),
-          render_frame_id)),
-      weak_factory_(this) {
+          render_frame_id)) {
   DETACH_FROM_SEQUENCE(sequence_checker_);
   DCHECK(process_node);
   DCHECK(page_node);
diff --git a/components/performance_manager/graph/frame_node_impl.h b/components/performance_manager/graph/frame_node_impl.h
index 669015e5..0a4ea6ab 100644
--- a/components/performance_manager/graph/frame_node_impl.h
+++ b/components/performance_manager/graph/frame_node_impl.h
@@ -342,7 +342,7 @@
   // Inline storage for ExecutionContextPriorityDecorator data.
   execution_context_priority::AcceptedVote accepted_vote_;
 
-  base::WeakPtrFactory<FrameNodeImpl> weak_factory_;
+  base::WeakPtrFactory<FrameNodeImpl> weak_factory_{this};
 
   DISALLOW_COPY_AND_ASSIGN(FrameNodeImpl);
 };
diff --git a/components/performance_manager/graph/process_node_impl.h b/components/performance_manager/graph/process_node_impl.h
index b1356bc..1edd71b 100644
--- a/components/performance_manager/graph/process_node_impl.h
+++ b/components/performance_manager/graph/process_node_impl.h
@@ -9,6 +9,7 @@
 
 #include "base/containers/flat_set.h"
 #include "base/macros.h"
+#include "base/memory/weak_ptr.h"
 #include "base/optional.h"
 #include "base/process/process.h"
 #include "base/process/process_handle.h"
@@ -113,6 +114,10 @@
 
   void OnAllFramesInProcessFrozenForTesting() { OnAllFramesInProcessFrozen(); }
 
+  base::WeakPtr<ProcessNodeImpl> GetWeakPtr() {
+    return weak_factory_.GetWeakPtr();
+  }
+
  protected:
   void SetProcessImpl(base::Process process,
                       base::ProcessId process_id,
@@ -184,6 +189,8 @@
   // Inline storage for ProcessPriorityAggregator user data.
   std::unique_ptr<NodeAttachedData> process_priority_data_;
 
+  base::WeakPtrFactory<ProcessNodeImpl> weak_factory_{this};
+
   DISALLOW_COPY_AND_ASSIGN(ProcessNodeImpl);
 };
 
diff --git a/components/performance_manager/graph/system_node_impl.h b/components/performance_manager/graph/system_node_impl.h
index c094151b..780a249 100644
--- a/components/performance_manager/graph/system_node_impl.h
+++ b/components/performance_manager/graph/system_node_impl.h
@@ -10,6 +10,7 @@
 #include <vector>
 
 #include "base/macros.h"
+#include "base/memory/weak_ptr.h"
 #include "base/process/process_handle.h"
 #include "base/time/time.h"
 #include "components/performance_manager/graph/node_base.h"
@@ -30,7 +31,13 @@
   // nodes.
   void OnProcessMemoryMetricsAvailable();
 
+  base::WeakPtr<SystemNodeImpl> GetWeakPtr() {
+    return weak_factory_.GetWeakPtr();
+  }
+
  private:
+  base::WeakPtrFactory<SystemNodeImpl> weak_factory_{this};
+
   DISALLOW_COPY_AND_ASSIGN(SystemNodeImpl);
 };
 
diff --git a/components/performance_manager/graph/worker_node_impl.h b/components/performance_manager/graph/worker_node_impl.h
index dc64e8a..83da558 100644
--- a/components/performance_manager/graph/worker_node_impl.h
+++ b/components/performance_manager/graph/worker_node_impl.h
@@ -11,6 +11,7 @@
 
 #include "base/containers/flat_set.h"
 #include "base/macros.h"
+#include "base/memory/weak_ptr.h"
 #include "base/util/type_safety/pass_key.h"
 #include "components/performance_manager/graph/node_base.h"
 #include "components/performance_manager/public/graph/worker_node.h"
@@ -62,6 +63,10 @@
   const base::flat_set<WorkerNodeImpl*>& client_workers() const;
   const base::flat_set<WorkerNodeImpl*>& child_workers() const;
 
+  base::WeakPtr<WorkerNodeImpl> GetWeakPtr() {
+    return weak_factory_.GetWeakPtr();
+  }
+
   // Implementation details below this point.
 
   // Used by the ExecutionContextRegistry mechanism.
@@ -124,6 +129,8 @@
   // Used by ExecutionContextRegistry mechanism.
   std::unique_ptr<NodeAttachedData> execution_context_;
 
+  base::WeakPtrFactory<WorkerNodeImpl> weak_factory_{this};
+
   DISALLOW_COPY_AND_ASSIGN(WorkerNodeImpl);
 };
 
diff --git a/components/performance_manager/performance_manager.cc b/components/performance_manager/performance_manager.cc
index b12e130..e8178ed 100644
--- a/components/performance_manager/performance_manager.cc
+++ b/components/performance_manager/performance_manager.cc
@@ -8,6 +8,7 @@
 
 #include "components/performance_manager/graph/frame_node_impl.h"
 #include "components/performance_manager/graph/page_node_impl.h"
+#include "components/performance_manager/graph/process_node_impl.h"
 #include "components/performance_manager/performance_manager_impl.h"
 #include "components/performance_manager/performance_manager_registry_impl.h"
 #include "components/performance_manager/performance_manager_tab_helper.h"
@@ -86,6 +87,21 @@
 }
 
 // static
+base::WeakPtr<ProcessNode>
+PerformanceManager::GetProcessNodeForRenderProcessHost(
+    content::RenderProcessHost* rph) {
+  DCHECK(rph);
+  auto* user_data = RenderProcessUserData::GetForRenderProcessHost(rph);
+  // There is a window after a RenderProcessHost is created before
+  // CreateProcessNodeAndExposeInterfacesToRendererProcess is called, during
+  // which time the RenderProcessUserData is not attached to the RPH yet. (It's
+  // called indirectly from RenderProcessHost::Init.)
+  if (!user_data)
+    return nullptr;
+  return user_data->process_node()->GetWeakPtr();
+}
+
+// static
 void PerformanceManager::AddObserver(
     PerformanceManagerMainThreadObserver* observer) {
   PerformanceManagerRegistryImpl::GetInstance()->AddObserver(observer);
diff --git a/components/performance_manager/performance_manager_unittest.cc b/components/performance_manager/performance_manager_unittest.cc
index 762a319..9b7120f 100644
--- a/components/performance_manager/performance_manager_unittest.cc
+++ b/components/performance_manager/performance_manager_unittest.cc
@@ -10,7 +10,9 @@
 #include "base/test/bind_test_util.h"
 #include "components/performance_manager/public/graph/frame_node.h"
 #include "components/performance_manager/public/graph/page_node.h"
+#include "components/performance_manager/public/graph/process_node.h"
 #include "components/performance_manager/public/render_frame_host_proxy.h"
+#include "components/performance_manager/public/render_process_host_proxy.h"
 #include "components/performance_manager/public/web_contents_proxy.h"
 #include "components/performance_manager/test_support/performance_manager_test_harness.h"
 #include "content/public/browser/browser_task_traits.h"
@@ -49,6 +51,8 @@
   auto contents = CreateTestWebContents();
   content::RenderFrameHost* rfh = contents->GetMainFrame();
   ASSERT_TRUE(rfh);
+  content::RenderProcessHost* rph = rfh->GetProcess();
+  ASSERT_TRUE(rph);
 
   base::WeakPtr<PageNode> page_node =
       PerformanceManager::GetPageNodeForWebContents(contents.get());
@@ -57,12 +61,15 @@
   // navigation. Verify that looking them up before that returns null instead
   // of crashing.
   EXPECT_FALSE(PerformanceManager::GetFrameNodeForRenderFrameHost(rfh));
+  EXPECT_FALSE(PerformanceManager::GetProcessNodeForRenderProcessHost(rph));
 
   // Simulate a committed navigation to create the nodes.
   content::NavigationSimulator::NavigateAndCommitFromBrowser(
       contents.get(), GURL("https://www.example.com/"));
   base::WeakPtr<FrameNode> frame_node =
       PerformanceManager::GetFrameNodeForRenderFrameHost(rfh);
+  base::WeakPtr<ProcessNode> process_node =
+      PerformanceManager::GetProcessNodeForRenderProcessHost(rph);
 
   // Post a task to the Graph and make it call a function on the UI thread that
   // will ensure that the nodes are really associated with the content objects.
@@ -70,19 +77,23 @@
   base::RunLoop run_loop;
   auto check_proxies_on_main_thread =
       base::BindLambdaForTesting([&](const WebContentsProxy& wc_proxy,
-                                     const RenderFrameHostProxy& rfh_proxy) {
+                                     const RenderFrameHostProxy& rfh_proxy,
+                                     const RenderProcessHostProxy& rph_proxy) {
         EXPECT_EQ(contents.get(), wc_proxy.Get());
         EXPECT_EQ(rfh, rfh_proxy.Get());
+        EXPECT_EQ(rph, rph_proxy.Get());
         run_loop.Quit();
       });
 
   auto call_on_graph_cb = base::BindLambdaForTesting([&]() {
     EXPECT_TRUE(page_node.get());
     EXPECT_TRUE(frame_node.get());
+    EXPECT_TRUE(process_node.get());
     content::GetUIThreadTaskRunner({})->PostTask(
         FROM_HERE, base::BindOnce(std::move(check_proxies_on_main_thread),
                                   page_node->GetContentsProxy(),
-                                  frame_node->GetRenderFrameHostProxy()));
+                                  frame_node->GetRenderFrameHostProxy(),
+                                  process_node->GetRenderProcessHostProxy()));
   });
 
   PerformanceManager::CallOnGraph(FROM_HERE, call_on_graph_cb);
@@ -99,6 +110,7 @@
   auto call_on_graph_cb_2 = base::BindLambdaForTesting([&]() {
     EXPECT_FALSE(page_node.get());
     EXPECT_FALSE(frame_node.get());
+    EXPECT_FALSE(process_node.get());
     std::move(quit_closure).Run();
   });
 
diff --git a/components/performance_manager/public/performance_manager.h b/components/performance_manager/public/performance_manager.h
index 0ea87f8..a22013fe 100644
--- a/components/performance_manager/public/performance_manager.h
+++ b/components/performance_manager/public/performance_manager.h
@@ -15,6 +15,7 @@
 
 namespace content {
 class RenderFrameHost;
+class RenderProcessHost;
 class WebContents;
 }
 
@@ -24,6 +25,7 @@
 class Graph;
 class GraphOwned;
 class PageNode;
+class ProcessNode;
 class PerformanceManagerMainThreadMechanism;
 class PerformanceManagerMainThreadObserver;
 class PerformanceManagerOwned;
@@ -76,13 +78,24 @@
   static base::WeakPtr<PageNode> GetPageNodeForWebContents(
       content::WebContents* wc);
 
-  // Returns a WeakPtr to the FrameNode associated with a given RenderFrameHost,
-  // or a null WeakPtr if there's no FrameNode for this RFH. Valid to call from
-  // the main thread only, the returned WeakPtr should only be dereferenced on
-  // the PM sequence (e.g. it can be used in a CallOnGraph callback).
+  // Returns a WeakPtr to the FrameNode associated with a given
+  // RenderFrameHost, or a null WeakPtr if there's no FrameNode for this RFH.
+  // (There is a brief window after the RFH is created before the FrameNode is
+  // added.) Valid to call from the main thread only, the returned WeakPtr
+  // should only be dereferenced on the PM sequence (e.g. it can be used in a
+  // CallOnGraph callback).
   static base::WeakPtr<FrameNode> GetFrameNodeForRenderFrameHost(
       content::RenderFrameHost* rfh);
 
+  // Returns a WeakPtr to the ProcessNode associated with a given
+  // RenderProcessHost, or a null WeakPtr if there's no ProcessNode for this
+  // RPH. (There is a brief window after the RPH is created before the
+  // ProcessNode is added.) Valid to call from the main thread only, the
+  // returned WeakPtr should only be dereferenced on the PM sequence (e.g. it
+  // can be used in a CallOnGraph callback).
+  static base::WeakPtr<ProcessNode> GetProcessNodeForRenderProcessHost(
+      content::RenderProcessHost* rph);
+
   // Adds / removes an observer that is notified of PerformanceManager events
   // that happen on the main thread. Can only be called on the main thread.
   static void AddObserver(PerformanceManagerMainThreadObserver* observer);
diff --git a/components/performance_manager/public/v8_memory/v8_per_frame_memory_decorator.h b/components/performance_manager/public/v8_memory/v8_per_frame_memory_decorator.h
index 98d4dc6c..95cedaf 100644
--- a/components/performance_manager/public/v8_memory/v8_per_frame_memory_decorator.h
+++ b/components/performance_manager/public/v8_memory/v8_per_frame_memory_decorator.h
@@ -238,7 +238,9 @@
 //     SEQUENCE_CHECKER(sequence_checker_);
 //   };
 
+class V8DetailedMemoryRequestOneShot;
 class V8PerFrameMemoryObserver;
+class V8PerFrameMemoryProcessData;
 class V8PerFrameMemoryRequest;
 class V8PerFrameMemoryRequestAnySeq;
 
@@ -314,6 +316,80 @@
   SEQUENCE_CHECKER(sequence_checker_);
 };
 
+//////////////////////////////////////////////////////////////////////////////
+// The following classes report results from memory measurements.
+
+class V8PerFrameMemoryFrameData {
+ public:
+  V8PerFrameMemoryFrameData() = default;
+  virtual ~V8PerFrameMemoryFrameData() = default;
+
+  bool operator==(const V8PerFrameMemoryFrameData& other) const {
+    return v8_bytes_used_ == other.v8_bytes_used_;
+  }
+
+  // Returns the number of bytes used by V8 for this frame at the last
+  // measurement.
+  uint64_t v8_bytes_used() const { return v8_bytes_used_; }
+
+  void set_v8_bytes_used(uint64_t v8_bytes_used) {
+    v8_bytes_used_ = v8_bytes_used;
+  }
+
+  // Returns frame data for the given node, or nullptr if no measurement has
+  // been taken. The returned pointer must only be accessed on the graph
+  // sequence and may go invalid at any time after leaving the calling scope.
+  static const V8PerFrameMemoryFrameData* ForFrameNode(const FrameNode* node);
+
+ private:
+  uint64_t v8_bytes_used_ = 0;
+};
+
+class V8PerFrameMemoryProcessData {
+ public:
+  V8PerFrameMemoryProcessData() = default;
+  virtual ~V8PerFrameMemoryProcessData() = default;
+
+  bool operator==(const V8PerFrameMemoryProcessData& other) const {
+    return unassociated_v8_bytes_used_ == other.unassociated_v8_bytes_used_;
+  }
+
+  // Returns the number of bytes used by V8 at the last measurement in this
+  // process that could not be attributed to a frame.
+  uint64_t unassociated_v8_bytes_used() const {
+    return unassociated_v8_bytes_used_;
+  }
+
+  void set_unassociated_v8_bytes_used(uint64_t unassociated_v8_bytes_used) {
+    unassociated_v8_bytes_used_ = unassociated_v8_bytes_used;
+  }
+
+  // Returns process data for the given node, or nullptr if no measurement has
+  // been taken. The returned pointer must only be accessed on the graph
+  // sequence and may go invalid at any time after leaving the calling scope.
+  static const V8PerFrameMemoryProcessData* ForProcessNode(
+      const ProcessNode* node);
+
+ private:
+  uint64_t unassociated_v8_bytes_used_ = 0;
+};
+
+class V8PerFrameMemoryObserver : public base::CheckedObserver {
+ public:
+  // Called on the PM sequence when a measurement is available for
+  // |process_node|. |process_data| contains the process-level measurements for
+  // the process, and can go invalid at any time after returning from this
+  // method. Per-frame measurements can be read by walking the graph from
+  // |process_node| to find frame nodes, and calling
+  // V8PerFrameMemoryFrameData::ForFrameNode to retrieve the measurement data.
+  virtual void OnV8MemoryMeasurementAvailable(
+      const ProcessNode* process_node,
+      const V8PerFrameMemoryProcessData* process_data) = 0;
+};
+
+//////////////////////////////////////////////////////////////////////////////
+// The following classes create requests for memory measurements.
+
 class V8PerFrameMemoryRequest {
  public:
   enum class MeasurementMode {
@@ -394,6 +470,12 @@
       MeasurementMode mode,
       base::WeakPtr<V8PerFrameMemoryRequestAnySeq> off_sequence_request);
 
+  // Private constructor for V8DetailedMemoryRequestOneShot. Sets
+  // min_time_between_requests_ to 0, which is not allowed for repeating
+  // requests.
+  V8PerFrameMemoryRequest(util::PassKey<V8DetailedMemoryRequestOneShot>,
+                          MeasurementMode mode);
+
   // V8PerFrameMemoryDecorator::MeasurementRequestQueue calls
   // OnOwnerUnregistered for all requests in the queue when the owning
   // decorator or process node is removed from the graph.
@@ -424,74 +506,61 @@
   SEQUENCE_CHECKER(sequence_checker_);
 };
 
-class V8PerFrameMemoryFrameData {
+// TODO(joenotcharles): Rename the other V8PerFrameMemory* classes to
+// V8DetailedMemory*.
+class V8DetailedMemoryRequestOneShot : public V8PerFrameMemoryObserver {
  public:
-  V8PerFrameMemoryFrameData() = default;
-  virtual ~V8PerFrameMemoryFrameData() = default;
+  // A callback that will be passed the results of the measurement. |process|
+  // will always match the value passed to the V8DetailedMemoryRequestOneShot
+  // constructor.
+  using MeasurementCallback =
+      base::OnceCallback<void(const ProcessNode* process,
+                              const V8PerFrameMemoryProcessData* process_data)>;
 
-  bool operator==(const V8PerFrameMemoryFrameData& other) const {
-    return v8_bytes_used_ == other.v8_bytes_used_;
-  }
+  using MeasurementMode = V8PerFrameMemoryRequest::MeasurementMode;
 
-  // Returns the number of bytes used by V8 for this frame at the last
-  // measurement.
-  uint64_t v8_bytes_used() const { return v8_bytes_used_; }
+  // Creates a one-shot memory measurement request that will immediately be
+  // sent to |process| (which must be a renderer process). The process will
+  // perform the measurement during a GC as determined by |mode|, and
+  // |callback| will be called with the results.
+  V8DetailedMemoryRequestOneShot(
+      const ProcessNode* process,
+      MeasurementCallback callback,
+      MeasurementMode mode = MeasurementMode::kDefault);
 
-  void set_v8_bytes_used(uint64_t v8_bytes_used) {
-    v8_bytes_used_ = v8_bytes_used;
-  }
+  ~V8DetailedMemoryRequestOneShot() final;
 
-  // Returns frame data for the given node, or nullptr if no measurement has
-  // been taken. The returned pointer must only be accessed on the graph
-  // sequence and may go invalid at any time after leaving the calling scope.
-  static const V8PerFrameMemoryFrameData* ForFrameNode(const FrameNode* node);
+  V8DetailedMemoryRequestOneShot(const V8DetailedMemoryRequestOneShot&) =
+      delete;
+  V8DetailedMemoryRequestOneShot& operator=(
+      const V8DetailedMemoryRequestOneShot&) = delete;
 
- private:
-  uint64_t v8_bytes_used_ = 0;
-};
+  MeasurementMode mode() const { return mode_; }
 
-class V8PerFrameMemoryProcessData {
- public:
-  V8PerFrameMemoryProcessData() = default;
-  virtual ~V8PerFrameMemoryProcessData() = default;
+  // V8PerFrameMemoryObserver implementation.
 
-  bool operator==(const V8PerFrameMemoryProcessData& other) const {
-    return unassociated_v8_bytes_used_ == other.unassociated_v8_bytes_used_;
-  }
-
-  // Returns the number of bytes used by V8 at the last measurement in this
-  // process that could not be attributed to a frame.
-  uint64_t unassociated_v8_bytes_used() const {
-    return unassociated_v8_bytes_used_;
-  }
-
-  void set_unassociated_v8_bytes_used(uint64_t unassociated_v8_bytes_used) {
-    unassociated_v8_bytes_used_ = unassociated_v8_bytes_used;
-  }
-
-  // Returns process data for the given node, or nullptr if no measurement has
-  // been taken. The returned pointer must only be accessed on the graph
-  // sequence and may go invalid at any time after leaving the calling scope.
-  static const V8PerFrameMemoryProcessData* ForProcessNode(
-      const ProcessNode* node);
-
- private:
-  uint64_t unassociated_v8_bytes_used_ = 0;
-};
-
-class V8PerFrameMemoryObserver : public base::CheckedObserver {
- public:
-  // Called on the PM sequence when a measurement is available for
-  // |process_node|. |process_data| contains the process-level measurements for
-  // the process, and can go invalid at any time after returning from this
-  // method. Per-frame measurements can be read by walking the graph from
-  // |process_node| to find frame nodes, and calling
-  // V8PerFrameMemoryFrameData::ForFrameNode to retrieve the measurement data.
-  virtual void OnV8MemoryMeasurementAvailable(
+  void OnV8MemoryMeasurementAvailable(
       const ProcessNode* process_node,
-      const V8PerFrameMemoryProcessData* process_data) = 0;
+      const V8PerFrameMemoryProcessData* process_data) final;
+
+ private:
+  void DeleteRequest();
+
+#if DCHECK_IS_ON()
+  const ProcessNode* process_;
+#endif
+
+  MeasurementCallback callback_;
+  MeasurementMode mode_;
+  std::unique_ptr<V8PerFrameMemoryRequest> request_;
+
+  SEQUENCE_CHECKER(sequence_checker_);
 };
 
+//////////////////////////////////////////////////////////////////////////////
+// The following classes are wrappers that can be called from outside the PM
+// sequence.
+
 // Observer that can be created on any sequence, and will be notified on that
 // sequence when measurements are available. Register the observer through
 // V8PerFrameMemoryRequestAnySeq::AddObserver. The
@@ -560,6 +629,9 @@
   base::WeakPtrFactory<V8PerFrameMemoryRequestAnySeq> weak_factory_{this};
 };
 
+//////////////////////////////////////////////////////////////////////////////
+// The following internal functions are exposed in the header for testing.
+
 namespace internal {
 
 // A callback that will bind a V8DetailedMemoryReporter interface to
diff --git a/components/performance_manager/v8_memory/v8_per_frame_memory_decorator.cc b/components/performance_manager/v8_memory/v8_per_frame_memory_decorator.cc
index 3820dd7..b265d83 100644
--- a/components/performance_manager/v8_memory/v8_per_frame_memory_decorator.cc
+++ b/components/performance_manager/v8_memory/v8_per_frame_memory_decorator.cc
@@ -603,6 +603,18 @@
                                 base::Unretained(this)));
 }
 
+V8PerFrameMemoryRequest::V8PerFrameMemoryRequest(
+    util::PassKey<V8DetailedMemoryRequestOneShot>,
+    MeasurementMode mode)
+    : min_time_between_requests_(base::TimeDelta()), mode_(mode) {
+  // Do not forward to the standard constructor because it disallows the empty
+  // TimeDelta.
+#if DCHECK_IS_ON()
+  DCHECK(mode != MeasurementMode::kEagerForTesting ||
+         g_test_eager_measurement_requests_enabled);
+#endif
+}
+
 V8PerFrameMemoryRequest::~V8PerFrameMemoryRequest() {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   if (decorator_)
@@ -651,8 +663,6 @@
   const auto* process_data =
       V8PerFrameMemoryProcessData::ForProcessNode(process_node);
   DCHECK(process_data);
-  for (V8PerFrameMemoryObserver& observer : observers_)
-    observer.OnV8MemoryMeasurementAvailable(process_node, process_data);
 
   // If this request was made from off-sequence, notify its off-sequence
   // observers with a copy of the process and frame data.
@@ -683,6 +693,11 @@
                        V8PerFrameMemoryObserverAnySeq::FrameDataMap(
                            std::move(all_frame_data))));
   }
+
+  // The observer could delete the request so this must be the last thing in
+  // the function.
+  for (V8PerFrameMemoryObserver& observer : observers_)
+    observer.OnV8MemoryMeasurementAvailable(process_node, process_data);
 }
 
 void V8PerFrameMemoryRequest::StartMeasurementImpl(
@@ -704,6 +719,53 @@
 }
 
 ////////////////////////////////////////////////////////////////////////////////
+// V8DetailedMemoryRequestOneShot
+
+V8DetailedMemoryRequestOneShot::V8DetailedMemoryRequestOneShot(
+    const ProcessNode* process,
+    MeasurementCallback callback,
+    MeasurementMode mode)
+    : callback_(std::move(callback)), mode_(mode) {
+  DCHECK(process);
+  DCHECK_EQ(process->GetProcessType(), content::PROCESS_TYPE_RENDERER);
+  request_ = std::make_unique<V8PerFrameMemoryRequest>(
+      util::PassKey<V8DetailedMemoryRequestOneShot>(), mode);
+  request_->AddObserver(this);
+  request_->StartMeasurementForProcess(process);
+
+#if DCHECK_IS_ON()
+  process_ = process;
+#endif
+}
+
+V8DetailedMemoryRequestOneShot::~V8DetailedMemoryRequestOneShot() {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+  DeleteRequest();
+}
+
+void V8DetailedMemoryRequestOneShot::OnV8MemoryMeasurementAvailable(
+    const ProcessNode* process_node,
+    const V8PerFrameMemoryProcessData* process_data) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+
+#if DCHECK_IS_ON()
+  DCHECK_EQ(process_node, process_);
+#endif
+
+  // Don't send another request now that a response has been received.
+  DeleteRequest();
+
+  std::move(callback_).Run(process_node, process_data);
+}
+
+void V8DetailedMemoryRequestOneShot::DeleteRequest() {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+  if (request_)
+    request_->RemoveObserver(this);
+  request_.reset();
+}
+
+////////////////////////////////////////////////////////////////////////////////
 // V8PerFrameMemoryFrameData
 
 const V8PerFrameMemoryFrameData* V8PerFrameMemoryFrameData::ForFrameNode(
@@ -949,13 +1011,22 @@
     NotifyObserversOnMeasurementAvailable(
         const ProcessNode* process_node) const {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  for (const V8PerFrameMemoryRequest* request : bounded_measurement_requests_) {
+
+  // First collect all requests with observers to notify. The observer
+  // implementations may add or remove requests from the queue, invalidating
+  // iterators.
+  std::vector<V8PerFrameMemoryRequest*> requests_to_notify;
+  requests_to_notify.insert(requests_to_notify.end(),
+                            bounded_measurement_requests_.begin(),
+                            bounded_measurement_requests_.end());
+  requests_to_notify.insert(requests_to_notify.end(),
+                            lazy_measurement_requests_.begin(),
+                            lazy_measurement_requests_.end());
+  for (const V8PerFrameMemoryRequest* request : requests_to_notify) {
     request->NotifyObserversOnMeasurementAvailable(
         util::PassKey<MeasurementRequestQueue>(), process_node);
-  }
-  for (const V8PerFrameMemoryRequest* request : lazy_measurement_requests_) {
-    request->NotifyObserversOnMeasurementAvailable(
-        util::PassKey<MeasurementRequestQueue>(), process_node);
+    // The observer may have deleted |request| so it is no longer safe to
+    // reference.
   }
 }
 
diff --git a/components/performance_manager/v8_memory/v8_per_frame_memory_decorator_unittest.cc b/components/performance_manager/v8_memory/v8_per_frame_memory_decorator_unittest.cc
index 459d436..d7df30c 100644
--- a/components/performance_manager/v8_memory/v8_per_frame_memory_decorator_unittest.cc
+++ b/components/performance_manager/v8_memory/v8_per_frame_memory_decorator_unittest.cc
@@ -392,6 +392,89 @@
   }
 }
 
+TEST_F(V8PerFrameMemoryDecoratorTest, OneShot) {
+  // Create 2 renderer processes. Create one request that measures both of
+  // them, and a one-shot request that measures only one.
+  constexpr RenderProcessHostId kProcessId1 = RenderProcessHostId(0xFAB);
+  auto process1 = CreateNode<ProcessNodeImpl>(
+      content::PROCESS_TYPE_RENDERER,
+      RenderProcessHostProxy::CreateForTesting(kProcessId1));
+  constexpr RenderProcessHostId kProcessId2 = RenderProcessHostId(0xBAF);
+  auto process2 = CreateNode<ProcessNodeImpl>(
+      content::PROCESS_TYPE_RENDERER,
+      RenderProcessHostProxy::CreateForTesting(kProcessId2));
+
+  // Set the all process request to only send once within the test.
+  V8PerFrameMemoryRequest all_process_request(kMinTimeBetweenRequests * 100);
+  all_process_request.StartMeasurement(graph());
+
+  // Create a mock reporter for each process and expect a query and reply on
+  // each.
+  MockV8DetailedMemoryReporter mock_reporter1;
+  {
+    auto data = NewPerProcessV8MemoryUsage(1);
+    data->isolates[0]->unassociated_bytes_used = 1ULL;
+    ExpectBindAndRespondToQuery(&mock_reporter1, std::move(data), kProcessId1);
+  }
+  MockV8DetailedMemoryReporter mock_reporter2;
+  {
+    auto data = NewPerProcessV8MemoryUsage(1);
+    data->isolates[0]->unassociated_bytes_used = 2ULL;
+    ExpectBindAndRespondToQuery(&mock_reporter2, std::move(data), kProcessId2);
+  }
+
+  task_env().RunUntilIdle();
+  Mock::VerifyAndClearExpectations(&mock_reporter1);
+  Mock::VerifyAndClearExpectations(&mock_reporter2);
+
+  // Create a one-shot request for process1 and expect the callback to be
+  // called only for that process.
+  {
+    auto data = NewPerProcessV8MemoryUsage(1);
+    data->isolates[0]->unassociated_bytes_used = 3ULL;
+    ExpectQueryAndReply(&mock_reporter1, std::move(data));
+  }
+
+  uint64_t unassociated_v8_bytes_used = 0;
+  V8DetailedMemoryRequestOneShot process1_request(
+      process1.get(), base::BindLambdaForTesting(
+                          [&unassociated_v8_bytes_used, &process1](
+                              const ProcessNode* process_node,
+                              const V8PerFrameMemoryProcessData* process_data) {
+                            ASSERT_TRUE(process_data);
+                            EXPECT_EQ(process_node, process1.get());
+                            unassociated_v8_bytes_used =
+                                process_data->unassociated_v8_bytes_used();
+                          }));
+  task_env().RunUntilIdle();
+  Mock::VerifyAndClearExpectations(&mock_reporter1);
+  Mock::VerifyAndClearExpectations(&mock_reporter2);
+  EXPECT_EQ(unassociated_v8_bytes_used, 3ULL);
+
+  // Create another request, but delete it before the result arrives.
+  {
+    auto data = NewPerProcessV8MemoryUsage(1);
+    data->isolates[0]->unassociated_bytes_used = 4ULL;
+    ExpectQueryAndDelayReply(&mock_reporter1, base::TimeDelta::FromSeconds(10),
+                             std::move(data));
+  }
+
+  auto doomed_request = std::make_unique<V8DetailedMemoryRequestOneShot>(
+      process1.get(),
+      base::BindOnce([](const ProcessNode* process_node,
+                        const V8PerFrameMemoryProcessData* process_data) {
+        FAIL() << "Callback called after request deleted.";
+      }));
+
+  // Verify that requests are sent but reply is not yet received.
+  task_env().FastForwardBy(base::TimeDelta::FromSeconds(5));
+  Mock::VerifyAndClearExpectations(&mock_reporter1);
+  Mock::VerifyAndClearExpectations(&mock_reporter2);
+
+  doomed_request.reset();
+  task_env().RunUntilIdle();
+}
+
 TEST_F(V8PerFrameMemoryDecoratorTest, QueryRateIsLimited) {
   auto process = CreateNode<ProcessNodeImpl>(
       content::PROCESS_TYPE_RENDERER,
diff --git a/components/policy/resources/policy_templates_de.xtb b/components/policy/resources/policy_templates_de.xtb
index 4702d11..4b2673e 100644
--- a/components/policy/resources/policy_templates_de.xtb
+++ b/components/policy/resources/policy_templates_de.xtb
@@ -623,6 +623,9 @@
           Bitte beachten Sie, dass die Richtlinie pro Renderer-Prozess angewendet wird. Dabei wird der letzte Wert der Richtlinie angewendet, wenn ein Renderer-Prozess startet. Wenn Sie sicherstellen möchten, dass alle geladenen Tabs die gleiche Richtlinieneinstellung erhalten, ist ein Neustart des Browsers nötig. Allerdings ist es kein Problem, wenn einzelne Prozesse mit unterschiedlichen Werten für diese Richtlinie laufen.</translation>
 <translation id="2030905906517501646">Suchbegriff der Standardsuchmaschine</translation>
 <translation id="203096360153626918">Diese Richtlinie hat keine Auswirkungen auf die Android-Apps. Der Vollbildmodus kann aktiviert werden, auch wenn diese Richtlinie auf <ph name="FALSE" /> gesetzt ist.</translation>
+<translation id="2037214548071298156">Wenn die Richtlinie aktiviert oder nicht konfiguriert ist, werden über registrierte Geräte Hardwarestatistiken wie die CPU/RAM-Nutzung gemeldet.
+
+      Ist sie deaktiviert, melden registrierte Geräte keine Hardwarestatistiken.</translation>
 <translation id="2040479044912658454">Rasterdruckmodus</translation>
 <translation id="2043749682619281558">Hiermit wird die Funktion "Mauscursor hervorheben" auf dem Anmeldebildschirm aktiviert</translation>
 <translation id="2043770014371753404">Deaktivierte Unternehmensdrucker</translation>
@@ -957,7 +960,11 @@
       Wenn die Richtlinie aktiviert ist und das Chrome Cleanup Tool unerwünschte Software findet, kann es Metadaten betreffend den Scan an Google senden. Dies geschieht in Übereinstimmung mit der über SafeBrowsingExtendedReportingEnabled festgelegten Richtlinie. Der Nutzer wird dann vom Chrome Cleanup Tool gefragt, ob die unerwünschte Software gelöscht werden soll.  Ergebnisse der Bereinigung werden an Google gesendet und der Nutzer hat keine Möglichkeit, dies zu verhindern.
 
       Unter <ph name="MS_WIN_NAME" /> steht diese Funktion nur bei Instanzen zur Verfügung, die Teil einer <ph name="MS_AD_NAME" />-Domain sind, auf der Windows 10 Pro läuft, oder die von der Chrome-Verwaltung über die Cloud verwaltet werden.</translation>
+<translation id="2448315169529769573">Wenn die Richtlinie aktiviert ist, meldet <ph name="PRODUCT_OS_NAME" /> Nutzungsdaten und Fehlerberichte, inklusive Absturzberichte, an Google. Ist die Richtlinie deaktiviert, werden Nutzungsdaten und Fehlerberichte nicht gemeldet.
+
+       Ist sie nicht konfiguriert, werden Nutzungsdaten und Fehlerberichte nur für verwaltete Geräte gemeldet.</translation>
 <translation id="2454228136871844693">Für eine optimale Stabilität.</translation>
+<translation id="2456629156652006573">Nur privat</translation>
 <translation id="2463034609187171371">DHE-Verschlüsselungssammlungen in TLS aktivieren</translation>
 <translation id="2463365186486772703">Gebietsschema der App</translation>
 <translation id="2463832514638083341">Mit dieser Richtlinie wird festgelegt, wie lange (in Tagen) Metadaten von Druckaufträgen auf einem Gerät gespeichert werden.
@@ -1128,9 +1135,16 @@
       Diese Richtlinie wurde in M77 entfernt.
       Diese Richtlinie gilt für die Anmeldeseite. Sehen Sie sich auch die Richtlinie "<ph name="SITE_PER_PROCESS_POLICY_NAME" />" für die eigentliche Nutzersitzung an. Es wird empfohlen, für beide Richtlinien denselben Wert festzulegen. Wenn die Werte nicht übereinstimmen, kann es beim Beginn einer Nutzersitzung zu einer Verzögerung kommen, weil der von der Nutzerrichtlinie angegebene Wert erst angewendet werden muss.
       </translation>
+<translation id="2702023190395322609">Empfehlungen zu Medien aktivieren</translation>
 <translation id="2706708761587205154">Drucken nur mit PIN zulassen</translation>
 <translation id="2707873794476722903">Safe Browsing ist im Standardmodus aktiv.</translation>
 <translation id="2710534340210290498">Wenn diese Richtlinie auf "false" gesetzt ist, können Nutzer den Bildschirm nicht sperren, sondern sich lediglich von der Nutzersitzung abmelden. Ist diese Einstellung hingegen auf "true" gesetzt oder nicht konfiguriert, können Nutzer, die sich mit einem Passwort authentifiziert haben, den Bildschirm sperren.</translation>
+<translation id="2716623398185506073">Wenn die Richtlinie aktiviert ist, werden über registrierte Geräte Hardwarestatistiken und Kennzeichnungen im Zusammenhang mit der Stromversorgung gemeldet.
+
+      Ist sie deaktiviert oder nicht konfiguriert, melden registrierte Geräte keine Statistiken zur Stromversorgung.</translation>
+<translation id="2725855586003209701">Wenn die Richtlinie aktiviert oder nicht konfiguriert ist, wird über registrierte Geräte eine Liste mit Gerätenutzern gemeldet, die sich vor Kurzem angemeldet haben.
+
+      Ist die Richtlinie deaktiviert, melden die registrierten Geräte keine Liste mit Nutzern.</translation>
 <translation id="2731627323327011390">Verwendung von <ph name="PRODUCT_OS_NAME" />-Zertifikaten für ARC-Apps deaktivieren</translation>
 <translation id="2742843273354638707">Hiermit werden die Chrome Web Store App und der zugehörige Fußzeilenlink auf der "Neuer Tab"-Seite und im App Launcher von <ph name="PRODUCT_OS_NAME" /> ausgeblendet.
 
@@ -1250,6 +1264,17 @@
 
       Wenn diese Richtlinie nicht konfiguriert ist, werden keine Filter angewendet und alle Druckserver berücksichtigt.</translation>
 <translation id="2877225735001246144">CNAME-Suche bei der Aushandlung der Kerberos-Authentifizierung deaktivieren</translation>
+<translation id="2886215882246310669">Die Richtlinie legt fest, ob <ph name="PRODUCT_OS_NAME" /> erlaubt, dass neue Family Link-Nutzerkonten zu diesem Gerät hinzugefügt werden können.
+      Sie ist nur in Verbindung mit <ph name="DEVICE_USER_ALLOWLIST_POLICY_NAME" /> nützlich. Sie erlaubt neben den in der Zulassungsliste festgelegten Konten auch Family Link-Konten.
+      Diese Richtlinie hat keinen Einfluss auf andere Richtlinien zur Anmeldung. Sie ist insbesondere dann nicht gültig, wenn:
+      – Das Hinzufügen neuer Nutzer durch die Richtlinie <ph name="DEVICE_ALLOW_NEW_USERS_POLICY_NAME" /> deaktiviert ist.
+      – Die Richtlinie <ph name="DEVICE_USER_ALLOWLIST_POLICY_NAME" /> das Hinzufügen aller Nutzer erlaubt.
+
+      Wenn diese Richtlinie auf "False" gesetzt oder nicht konfiguriert ist, gelten für Family Link-Konten keine zusätzlichen Regeln.
+      Wenn sie auf "True" gesetzt ist, sind neben den in <ph name="DEVICE_USER_ALLOWLIST_POLICY_NAME" /> festgelegten Konten auch neue Family Link-Konten erlaubt.</translation>
+<translation id="2886969306951284125">Wenn Android-Apps an sind und die Richtlinie auf "True" gesetzt ist, werden über registrierte Geräte Android-Statusinformationen gemeldet.
+
+      Ist die Richtlinie deaktiviert oder nicht konfiguriert, melden registrierte Geräte keine Android-Statusinformationen.</translation>
 <translation id="2890645751406497668">Websites automatisch die Berechtigung erteilen, eine Verbindung zu USB-Geräten mit der angegebenen Anbieter-ID und Produkt-ID herzustellen.</translation>
 <translation id="2892414556511568464">Dadurch wird der Duplexdruck eingeschränkt. Ist die Richtlinie nicht konfiguriert, wird keine Einschränkung angewendet.</translation>
 <translation id="2893546967669465276">Systemprotokolle an den Verwaltungsserver senden</translation>
@@ -1272,6 +1297,10 @@
 <translation id="2905984450136807296">Cachelebensdauer für Authentifizierungsdaten</translation>
 <translation id="2906874737073861391">Liste der AppPack-Erweiterungen</translation>
 <translation id="2908277604670530363">Maximale Anzahl gleichzeitiger Verbindungen zum Proxyserver</translation>
+<translation id="2919544577647246857">Die Richtlinie definiert eine Liste mit Nutzern, die sich auf dem Gerät anmelden dürfen. Die Einträge haben das Format <ph name="USER_ALLOWLIST_ENTRY_FORMAT" />, zum Beispiel <ph name="USER_WHITELIST_ENTRY_EXAMPLE" />. Wenn allen Nutzern in einer Domain die Anmeldung erlaubt werden soll, verwenden Sie Einträge im Format <ph name="USER_ALLOWLIST_ENTRY_WILDCARD" />.
+
+      Wenn diese Richtlinie nicht konfiguriert ist, gibt es keine Einschränkungen im Hinblick auf die Nutzer, die sich anmelden dürfen. Zum Erstellen neuer Nutzer muss aber weiterhin die Richtlinie <ph name="DEVICE_ALLOW_NEW_USERS_POLICY_NAME" /> entsprechend konfiguriert werden.
+      Wenn <ph name="DEVICE_FAMILY_LINK_ACCOUNTS_ALLOWED_POLICY_NAME" /> aktiviert ist, dürfen sich neben den in der Richtlinie festgelegten Konten auch Nutzer von Family Link anmelden.</translation>
 <translation id="2921222258441684334">Wenn die Richtlinie auf "1" gesetzt ist, können Websites standardmäßig den physischen Standort der Nutzer verfolgen. Wenn die Richtlinie auf "2" gesetzt ist, wird die Standortermittlung standardmäßig verweigert. Sie können festlegen, dass nachgefragt wird, wenn eine Website den physischen Standort der Nutzer verfolgen möchte.
 
       Wenn die Richtlinie nicht konfiguriert ist, wird die Richtlinie <ph name="ASK_GEOLOCATION_POLICY_NAME" /> angewandt, aber Nutzer können diese Einstellung ändern.</translation>
@@ -1487,6 +1516,7 @@
       Ist die Richtlinie nicht konfiguriert, wird der Standardwert von 0 Grad verwendet und Nutzer können die Bildschirmausrichtung ändern. Die Bildschirmausrichtung wird dann nach dem Neustart nicht zurückgesetzt.</translation>
 <translation id="3264793472749429012">Standardsuchmaschinen-Codierungen</translation>
 <translation id="3273221114520206906">JavaScript-Standardeinstellung</translation>
+<translation id="328347261792478720">Der Browser zeigt standardmäßig für den Nutzer personalisierte Empfehlungen zu Medien an. Wenn diese Richtlinie deaktiviert ist, sind diese Empfehlungen für den Nutzer nicht sichtbar. Wenn sie aktiviert oder nicht konfiguriert ist, werden dem Nutzer die Empfehlungen zu Medien angezeigt.</translation>
 <translation id="3284094172359247914">Verwendung der WebUSB API steuern</translation>
 <translation id="3288595667065905535">Release-Kanal</translation>
 <translation id="3292147213643666827">Mithilfe dieser Richtlinie kann <ph name="PRODUCT_NAME" /> als Proxy zwischen <ph name="CLOUD_PRINT_NAME" /> und älteren Druckern fungieren, die an den Computer angeschlossen sind.
@@ -1503,6 +1533,9 @@
       Diese Richtlinie wird in Chrome 88 entfernt.
 
       Siehe https://www.chromestatus.com/feature/4664843055398912.</translation>
+<translation id="3302829897293005699">Wenn die Richtlinie aktiviert oder nicht konfiguriert ist, werden über registrierte Geräte Informationen zur aktiven Kiosksitzung gemeldet, z. B. die Anwendungs-ID und -version.
+
+      Ist sie deaktiviert, senden registrierte Geräte keine Informationen zur Kiosksitzung.</translation>
 <translation id="3303911765031636277">Konfigurationsrichtlinie für den Chrome Enterprise-Connector "OnFileAttached"</translation>
 <translation id="3304662785258434098">Mit dieser Richtlinie können Sie festlegen, ob Nutzer mithilfe von Ausnahmen gemischte Inhalte auf bestimmten Websites zulassen dürfen.
 
@@ -1537,6 +1570,13 @@
 <translation id="3345682490796432751">Wenn diese Richtlinie aktiviert ist, werden veraltete Plug-ins als normale Plug-ins verwendet. Ist diese Einstellung deaktiviert, werden veraltete Plug-ins nicht verwendet.
 
       Ist diese Richtlinie nicht konfiguriert, müssen die Nutzer der Ausführung von veralteten Plug-ins zustimmen.</translation>
+<translation id="3348799281602260763">Wenn die Richtlinie aktiviert ist, können WebRTC-Peer-Verbindungen ein Downgrade auf veraltete
+      Versionen der TLS/DTLS-Protokolle (DTLS 1.0, TLS 1.0 und TLS 1.1) durchführen.
+      Wenn sie deaktiviert oder nicht konfiguriert ist, sind diese TLS/DTLS-Versionen
+      deaktiviert.
+
+      Diese Richtlinie ist vorübergehend und wird in einer zukünftigen Version
+      von <ph name="PRODUCT_NAME" /> entfernt.</translation>
 <translation id="3356657927302977341">Mit der Richtlinie wird konfiguriert, ob <ph name="PRODUCT_NAME" /> unter Linux native Benachrichtigungen verwendet.
 
 Wird sie auf "True" gesetzt , kann <ph name="PRODUCT_NAME" /> native Benachrichtigungen verwenden.
@@ -1817,6 +1857,9 @@
 <translation id="3709266154059827597">Schwarze Liste für Installation von Erweiterungen konfigurieren</translation>
 <translation id="3711895659073496551">Suspend-Modus</translation>
 <translation id="3715569262675717862">Authentifizierung auf Grundlage von Clientzertifikaten</translation>
+<translation id="3727675072430693164">Wenn die Richtlinie aktiviert ist, werden über registrierte Geräte Hardwarestatistiken für SoC-Komponenten gemeldet.
+
+      Ist sie deaktiviert oder nicht konfiguriert, melden registrierte Geräte keine Statistiken.</translation>
 <translation id="3736879847913515635">"Person hinzufügen" im Nutzermanager aktivieren</translation>
 <translation id="3737890474637805114">Große Dateidownloads blockieren</translation>
 <translation id="3748900290998155147">Gibt an, ob Wakelocks zulässig sind. Wakelocks können von Erweiterungen über die Power Management Extension API oder ARC-Apps angefordert werden.
@@ -1827,6 +1870,9 @@
 <translation id="375266612405883748">Schränkt den vom Host für den Remotezugriff verwendeten UDP-Portbereich auf diesem Computer ein.
 
           Wenn diese Richtlinie nicht konfiguriert oder auf eine leere Zeichenfolge festgelegt wird, kann der Host für den Remotezugriff alle verfügbaren Ports nutzen. Falls die Richtlinie "<ph name="REMOTE_ACCESS_HOST_FIREWALL_TRAVERSAL_POLICY_NAME" />" deaktiviert ist, verwendet der Host für den Remotezugriff jedoch nur die UDP-Ports im Bereich 12400–12409.</translation>
+<translation id="3755237588083934849">Die Konfiguration der Richtlinie legt fest, wie oft Uploads mit dem Gerätestatus vorgenommen werden (in Millisekunden). Die geringste zulässige Häufigkeit beträgt 60 Sekunden.
+
+      Wenn die Richtlinie nicht konfiguriert ist, betragen die Intervalle standardmäßig 3 Stunden.</translation>
 <translation id="3756011779061588474">Entwicklermodus blockieren</translation>
 <translation id="3758089716224084329">Ermöglicht Ihnen, den von <ph name="PRODUCT_NAME" /> verwendeten Proxy-Server anzugeben, und verhindert, dass Nutzer die Proxy-Einstellungen ändern.
 
@@ -2859,6 +2905,9 @@
 
       Ist diese Richtlinie nicht konfiguriert (bis einschließlich Version M76), kann <ph name="PRODUCT_NAME" /> diese Protokolle standardmäßig weder erfassen noch hochladen. Ab Version M77 kann <ph name="PRODUCT_NAME" /> diese Protokolle standardmäßig von den meisten Profilen erfassen und hochladen, die von cloudbasierten Unternehmensrichtlinien auf Nutzerebene betroffen sind. Ab Version M77 bis einschließlich M80 kann <ph name="PRODUCT_NAME" /> diese Protokolle außerdem standardmäßig von Profilen erfassen und hochladen, die mit <ph name="PRODUCT_NAME" /> lokal verwaltet werden.</translation>
 <translation id="5331746669335642668">Cloud-Richtlinie von <ph name="PRODUCT_NAME" /> überschreibt Plattformrichtlinie.</translation>
+<translation id="5340105431123046323">Wenn die Richtlinie aktiviert oder nicht konfiguriert ist, wird über registrierte Geräte eine Liste der Netzwerkschnittstellen mit deren Typen und Hardwareadressen gemeldet.
+
+      Ist sie deaktiviert, melden registrierte Geräte keine Netzwerkschnittstellen.</translation>
 <translation id="5346587320074666194">Den Zugriff auf Sensoren für diese Websites sperren</translation>
 <translation id="5362531528507578966">Überschreibt den Standarddruckmodus mit Hintergrundgrafiken.</translation>
 <translation id="5365476955714838841">Befehlszeilenparameter für den alternativen Browser.</translation>
@@ -3246,6 +3295,9 @@
       Bei den Einträgen in dieser Liste handelt es sich um auf die Erweiterung angepasste Übereinstimmungsmuster (siehe https://developer.chrome.com/extensions/match_patterns). Wenn eine URL mit einem Eintrag in dieser Liste übereinstimmt, können Nutzer eine Datei ganz einfach über diese URL installieren. Sowohl der Speicherort der CRX-Datei als auch die Seite, über die der Download gestartet wird, also die Verweis-URL, müssen durch diese Muster zugelassen sein.
 
       "<ph name="EXTENSION_INSTALL_BLOCKLIST_POLICY_NAME" />" hat Vorrang vor dieser Richtlinie. Eine Erweiterung auf der Sperrliste wird folglich nicht installiert, auch wenn sie von einer Website auf dieser Liste stammt.</translation>
+<translation id="5860010874344790473">Wenn die Richtlinie aktiviert ist, werden Systemprotokolle an den Verwaltungsserver gesendet, damit Administratoren die Protokolle überwachen können.
+
+      Ist sie deaktiviert oder nicht konfiguriert, werden keine Systemprotokolle gemeldet.</translation>
 <translation id="5861856285460256766">Konfiguration von Elternzugriffscodes</translation>
 <translation id="5868414965372171132">Netzwerkkonfiguration auf Nutzerebene</translation>
 <translation id="587242272905978723">Zulassen, dass <ph name="PLUGIN_VM_NAME" /> Nutzerdaten von <ph name="PLUGIN_VM_NAME" /> erhebt.
@@ -3746,6 +3798,17 @@
       Bei Auswahl von "True" kann das Gerät einen Powerwash auslösen.
       Wird die Richtlinie nicht konfiguriert, ist sie standardmäßig auf "True" gesetzt und das Gerät kann einen Powerwash auslösen.
       </translation>
+<translation id="6614020900120353107">Die Richtlinie legt fest, ob der integrierte DNS-Client von <ph name="PRODUCT_NAME" /> verwendet werden soll.
+
+      Sie beeinflusst nicht, welche DNS-Server verwendet werden, sondern nur den Software-Stack, der zur Kommunikation mit den Servern verwendet wird. Wenn beispielsweise das Betriebssystem für die Verwendung eines Unternehmens-DNS-Servers konfiguriert ist, verwendet der integrierte DNS-Client genau diesen Server. Es ist jedoch möglich, dass der integrierte DNS-Client auf unterschiedliche Weise mit den Servern kommuniziert und dabei moderne DNS-relevante Protokolle wie DNS-over-TLS verwendet.
+
+      Diese Richtlinie hat keine Auswirkung auf DoH (DNS-over-HTTPS). Wie sie dieses Verhalten ändern, erfahren Sie in der Richtlinie <ph name="DNS_OVER_HTTPS_MODE_POLICY_NAME" />.
+
+      Wenn diese Richtlinie auf "True" gesetzt ist, wird, falls verfügbar, der integrierte DNS-Client verwendet.
+
+      Ist sie auf "False" gesetzt, wird der integrierte DNS-Client nie verwendet.
+
+      Wenn diese Richtlinie nicht konfiguriert ist, ist der integrierte DNS-Client unter macOS, Android – sofern weder ein privates DNS noch ein VPN aktiviert ist – und Chrome OS standardmäßig aktiviert. Der Nutzer kann dann über die Bearbeitung von chrome://flags oder die Festlegung eines Befehlszeilen-Flag entscheiden, ob der integrierte DNS-Client verwendet wird oder nicht.</translation>
 <translation id="6621839881150363218">Wenn die Richtlinie aktiviert ist, werden alle Websites isoliert. Jede Website wird dann in einem eigenen Prozess ausgeführt. Wird die Richtlinie deaktiviert, findet keine explizite Website-Isolierung statt und Feldtests von "IsolateOriginsAndroid" und "SitePerProcessAndroid" sind deaktiviert. Nutzer können die Richtlinie aber manuell aktivieren.
 
       Wenn die Richtlinie nicht konfiguriert ist, können Nutzer diese Einstellung ändern.
@@ -3867,6 +3930,9 @@
       Wenn diese Richtlinie auf einem verwalteten Gerät nicht konfiguriert ist, kann das Gerät keine virtuellen Maschinen ausführen. Nicht verwaltete Geräte können virtuelle Maschinen ausführen.</translation>
 <translation id="6786747875388722282">Erweiterungen</translation>
 <translation id="6786967369487349613">Roaming-Profilverzeichnis festlegen</translation>
+<translation id="6789422336869764846">Wenn die Richtlinie aktiviert oder nicht konfiguriert ist, wird über registrierte Geräte der Status des Entwicklerschalters des Geräts beim Start gemeldet.
+
+      Ist sie deaktiviert, melden registrierte Geräte den Status des Entwicklerschalters nicht.</translation>
 <translation id="6795485990775913659">Drucken nur ohne PIN zulassen</translation>
 <translation id="6810445994095397827">JavaScript auf diesen Websites blockieren</translation>
 <translation id="6813263547126514821">Stromsparmodus und Herunterfahren</translation>
@@ -4410,6 +4476,9 @@
 <translation id="7458437477941640506">Führen Sie kein Rollback auf die Zielversion durch, wenn die Version des Betriebssystems neuer als die der Zielversion ist. Aktualisierungen sind ebenfalls deaktiviert.</translation>
 <translation id="7459601923199346224">Diese Richtlinie steuert Nutzer- und Geräterichtlinien zur Zertifikatverwaltung.</translation>
 <translation id="7464991223784276288">Cookies von übereinstimmenden URLs auf die aktuelle Sitzung beschränken</translation>
+<translation id="7468182772656807573">Die Konfiguration der Richtlinie legt fest, wie oft Kontrollnetzwerkpakete gesendet werden (in Millisekunden). Intervalle reichen von 30 Sekunden bis zu 24 Stunden. Werte außerhalb dieses Bereiches werden automatisch auf den jeweiligen Grenzwert gesetzt.
+
+      Wenn die Richtlinie nicht konfiguriert ist, betragen die Intervalle standardmäßig 3 Minuten.</translation>
 <translation id="7469554574977894907">Suchvorschläge aktivieren</translation>
 <translation id="747014869399137701">Wenn die Richtlinie auf "1" gesetzt ist, können Websites Desktop-Benachrichtigungen anzeigen. Wenn die Richtlinie auf "2" gesetzt ist, werden Desktop-Benachrichtigungen blockiert.
 
@@ -4671,6 +4740,7 @@
           Wird sie nicht konfiguriert, werden die Tastenkombinationen für Bedienungshilfen auf dem Anmeldebildschirm standardmäßig aktiviert.</translation>
 <translation id="7777535871204167559">Externe Speichergeräte nur schreibgeschützt verwenden</translation>
 <translation id="7788511847830146438">Nach Profil</translation>
+<translation id="780629758750905699">Hinzufügen von Family Link-Konten auf diesem Gerät erlauben</translation>
 <translation id="7807139251387225825">Liste von Typen, die von der Synchronisierung ausgeschlossen werden sollen</translation>
 <translation id="7815699949432723208">Diese Richtlinie wurde eingestellt. Bitte verwenden Sie stattdessen <ph name="NATIVE_MESSAGING_ALLOWLIST_POLICY_NAME" />.
 
@@ -4818,6 +4888,9 @@
       Wenn Sie diese Einstellung deaktivieren, können Nutzer die Funktion zum automatischen Ausfüllen nicht verwenden.
 
       Ist diese Einstellung aktiviert oder nicht konfiguriert, kann der Nutzer selbst entscheiden, ob er "Automatisches Ausfüllen" nutzen möchte. Er kann dann Profile zum automatischen Ausfüllen konfigurieren und die Funktion nach eigenem Ermessen aktivieren und deaktivieren.</translation>
+<translation id="8036964468882248070">Wenn die Richtlinie aktiviert ist, werden über registrierte Geräte Hardwarestatistiken und Kennzeichnungen im Zusammenhang mit Speichergeräten gemeldet.
+
+      Ist sie deaktiviert oder nicht konfiguriert, melden registrierte Geräte keine Speicherstatistiken.</translation>
 <translation id="8044493735196713914">Startmodus von Geräten melden</translation>
 <translation id="8049769137921877885">Mit dieser Richtlinie wird festgelegt, ob Daten zu Richtlinien und zur Zeit des Richtlinienabrufs gesendet werden.
 
@@ -4895,6 +4968,9 @@
           Wenn Sie diese Richtlinie konfigurieren, kann sie vom Nutzer nicht geändert oder überschrieben werden.
 
           Ist die Richtlinie nicht konfiguriert, ist "Mauszeiger hervorheben" anfangs deaktiviert, kann jedoch vom Nutzer jederzeit aktiviert werden.</translation>
+<translation id="8164687848393015214">Ist die Richtlinie aktiviert, werden Kontrollnetzwerkpakete (<ph name="HEARTBEATS_TERM" />) zur Überwachung des Onlinestatus an den Verwaltungsserver gesendet, damit er erkennt, wenn das Gerät offline ist.
+
+      Ist die Richtlinie deaktiviert oder nicht konfiguriert, werden keine Pakete gesendet.</translation>
 <translation id="816783746144552109">Konfigurieren Sie die für das Gerät erforderliche Mindestversion von Chrome OS.</translation>
 <translation id="8171924760436219650">Mit dieser Richtlinie kann die rechte Maustaste auf dem Anmeldebildschirm als primäre Maustaste festgelegt werden</translation>
 <translation id="8176035528522326671">Unternehmensnutzer nur als primären Nutzer mehrerer Profile zulassen (Standardverhalten für von Unternehmen verwaltete Nutzer)</translation>
@@ -5185,6 +5261,7 @@
 
 Ist die Richtlinie auf "false" gesetzt oder nicht konfiguriert, kann der Nutzer den Browser verwenden, ohne sich in <ph name="PRODUCT_NAME" /> anzumelden.</translation>
 <translation id="858309738002328421">Große Dateiuploads blockieren</translation>
+<translation id="8583509234908413302">Veraltetes TLS/DTLS-Downgrade in WebRTC erlauben</translation>
 <translation id="8584279193368801689">Schränkt den PIN-Druckmodus ein. Ist die Richtlinie nicht konfiguriert, gelten keine Einschränkungen. Ist der Modus nicht verfügbar, wird diese Richtlinie ignoriert. Der PIN-Druckmodus wird nur für Drucker angewendet, die das IPPS-, HTTPS- oder USB-Protokoll bzw. IPP über USB verwenden.</translation>
 <translation id="8585558195682146109">Nutzerdownloads zum Scannen senden</translation>
 <translation id="8587229956764455752">Erstellung neuer Nutzerkonten erlauben</translation>
@@ -5395,6 +5472,9 @@
 
       Die URL-Muster haben das gleiche Format wie die Richtlinie "<ph name="URL_BLOCKLIST_POLICY_NAME" />", die unter https://www.chromium.org/administrators/url-blacklist-filter-format beschrieben ist.
       </translation>
+<translation id="8931555638815157255">Wenn die Richtlinie aktiviert oder nicht konfiguriert ist, wird über registrierte Geräte von Zeit zu Zeit die Version ihres Betriebssystems und ihrer Firmware gemeldet.
+
+      Ist die Richtlinie deaktiviert, melden registrierte Geräte keine Informationen zu der Version.</translation>
 <translation id="8937282917198525844"> Ab M81 wurde für die Standard-Formularsteuerelemente (z. B. &lt;select&gt;, &lt;button&gt;, &lt;input type=date&gt;) ein überarbeitetes Design mit verbesserter Zugänglichkeit und einer vereinheitlichten Plattform entwickelt. Mit dieser Richtlinie werden die "alten" Formularsteuerelemente bis M84 wiederhergestellt.
 
       Wenn diese Richtlinie auf "True" gesetzt wird, werden die "alten" Formularsteuerelemente für alle Websites verwendet.
@@ -5563,6 +5643,9 @@
       Wenn die Richtlinie nicht konfiguriert ist, gilt <ph name="DEFAULT_PLUGINS_SETTING_POLICY_NAME" /> für alle Websites, sofern konfiguriert. Falls nicht, wird die persönliche Einstellung des Nutzers verwendet.
 
       Genaue Informationen zu gültigen URL-Mustern finden Sie unter https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns. Allerdings werden ab M85 Muster mit den Platzhaltern "*" und "[*.]" auf dem Host für diese Richtlinie nicht mehr unterstützt.</translation>
+<translation id="9073405975862312795">Wenn die Richtlinie aktiviert oder nicht konfiguriert ist, werden über registrierte Geräte die Zeiten gemeldet, zu denen ein Nutzer auf dem Gerät aktiv ist
+
+      Ist die Richtlinie deaktiviert, werden die Zeiten von registrierten Geräten weder aufgezeichnet noch gemeldet.</translation>
 <translation id="9077227880520270584">Timer für automatische Anmeldung in lokalem Gerätekonto</translation>
 <translation id="9084985621503260744">Angaben zum Einfluss von Videoaktivitäten auf den Stromsparmodus</translation>
 <translation id="9088433379343318874">Contentanbieter für betreute Nutzer aktivieren</translation>
diff --git a/components/policy/resources/policy_templates_es-419.xtb b/components/policy/resources/policy_templates_es-419.xtb
index fcf54c8..491af2b 100644
--- a/components/policy/resources/policy_templates_es-419.xtb
+++ b/components/policy/resources/policy_templates_es-419.xtb
@@ -152,6 +152,9 @@
       Si la estableces como verdadera, se habilitará la función y los usuarios podrán cambiarla.
       De forma predeterminada, la política se establece como falsa, los usuarios no pueden anularla y no se sugiere ningún emoji.</translation>
 <translation id="1243570869342663665">Controlar el filtro de contenido para adultos de SafeSites.</translation>
+<translation id="1247850578871017740">Si configuras la política en un valor válido, <ph name="PRODUCT_NAME" /> no usará versiones de SSL/TLS anteriores a las especificadas. Se ignorarán los valores que no se reconozcan.
+
+      Si no configuras esta política, <ph name="PRODUCT_NAME" /> mostrará un mensaje de error para TLS 1.0 y TLS 1.1, pero el usuario podrá omitirlo.</translation>
 <translation id="1252536192437793850">Permite que los sitios soliciten al usuario acceso a un puerto en serie</translation>
 <translation id="1257550411839719984">Establecer el directorio de descarga predeterminado</translation>
 <translation id="1265053460044691532">Permite limitar el tiempo durante el cual un usuario autenticado mediante SAML puede acceder sin conexión.</translation>
@@ -643,6 +646,9 @@
           sin efectos adversos.</translation>
 <translation id="2030905906517501646">Palabra clave del proveedor de búsqueda predeterminado</translation>
 <translation id="203096360153626918">Esta política no tiene efecto en las apps de Android. Podrán implementar el modo de pantalla completa, incluso si esta política se establece como <ph name="FALSE" />.</translation>
+<translation id="2037214548071298156">Si habilitas la política o no la estableces, los dispositivos inscritos informarán sobre las estadísticas de hardware, como el uso de CPU/RAM.
+
+      Si la inhabilitas, los dispositivos inscritos no informarán sobre las estadísticas de hardware.</translation>
 <translation id="2040479044912658454">Modo de rasterización de impresiones</translation>
 <translation id="2043749682619281558">Habilita la función para resaltar el cursor en la pantalla de acceso</translation>
 <translation id="2043770014371753404">Impresoras empresariales inhabilitadas</translation>
@@ -977,7 +983,11 @@
 Si habilitas la política, Limpiar Chrome podrá enviar los metadatos de análisis a Google cuando detecte software no deseado, en conformidad con la política establecida por SafeBrowsingExtendedReportingEnabled. Limpiar Chrome le preguntará al usuario si quiere borrar el software no deseado.  Los resultados de la limpieza se informarán a Google, y el usuario no tendrá la opción de impedirlo.
 
       En <ph name="MS_WIN_NAME" />, esta funcionalidad solo está disponible en instancias vinculadas a un dominio de <ph name="MS_AD_NAME" />, que se ejecuten en Windows 10 Pro o inscritas en la Administración en la nube para el navegador Chrome.</translation>
+<translation id="2448315169529769573">Si habilitas la política, <ph name="PRODUCT_OS_NAME" /> informará a Google sobre las métricas de uso y los datos de diagnóstico, incluidos los informes de fallas. Si inhabilitas la política, se desactivarán los informes sobre datos de diagnóstico y métricas.
+
+       Si no la estableces, se desactivarán los informes sobre datos de diagnóstico y métricas en dispositivos no administrados y se activarán en dispositivos administrados.</translation>
 <translation id="2454228136871844693">Optimiza la estabilidad.</translation>
+<translation id="2456629156652006573">Solo privado</translation>
 <translation id="2463034609187171371">Permitir los paquetes de encriptación DHE en TLS</translation>
 <translation id="2463365186486772703">Configuración regional de la aplicación</translation>
 <translation id="2463832514638083341">Esta política controla la cantidad de días que se almacenan los metadatos de los trabajos de impresión en el dispositivo.
@@ -1146,9 +1156,16 @@
 <translation id="2694143893026486692">Se habilitó la lupa con vista acoplada</translation>
 <translation id="2696077732471707315">En la versión M77, se quitó esta política.
       Esta política se aplica a la pantalla de acceso. Consulta también la política <ph name="SITE_PER_PROCESS_POLICY_NAME" />, que se aplica a la sesión de usuario. Se recomienda establecer ambas políticas en el mismo valor. Si los valores no coinciden, es posible que se produzca un retraso cuando se ingresa una sesión de usuario mientras se aplica el valor que especifica la política del usuario.</translation>
+<translation id="2702023190395322609">Habilita las recomendaciones de contenido multimedia</translation>
 <translation id="2706708761587205154">Permite la impresión solo con PIN</translation>
 <translation id="2707873794476722903">Se activó la Navegación segura en el modo estándar.</translation>
 <translation id="2710534340210290498">Si esta política se configura como falsa, los usuarios no podrán bloquear la pantalla (solo podrán salir de la sesión). Si esta política se configura como verdadera, o no se configura, los usuarios autenticados con una contraseña podrán bloquear la pantalla.</translation>
+<translation id="2716623398185506073">Si habilitas la política, los dispositivos inscritos informarán sobre las estadísticas de hardware y los identificadores relacionados con la energía.
+
+      Si la inhabilitas o no la estableces, los dispositivos inscritos no informarán sobre las estadísticas de energía.</translation>
+<translation id="2725855586003209701">Si habilitas la política o no la estableces, los dispositivos inscritos informarán la lista de usuarios que accedieron recientemente.
+
+      Si inhabilitas la política, los dispositivos inscritos no informarán la lista de usuarios.</translation>
 <translation id="2731627323327011390">Inhabilitar el uso de certificados de <ph name="PRODUCT_OS_NAME" /> para apps de ARC</translation>
 <translation id="2742843273354638707">Permite ocultar la aplicación Chrome Web Store y el vínculo de la parte inferior de la página Nueva pestaña y del Selector de aplicaciones de <ph name="PRODUCT_OS_NAME" />.
 
@@ -1268,6 +1285,17 @@
 
       Si no se establece esta política, se omitirá el filtrado y se considerarán todos los servidores de impresión.</translation>
 <translation id="2877225735001246144">Inhabilitar la búsqueda de CNAME al negociar la autenticación de Kerberos</translation>
+<translation id="2886215882246310669">Controla si <ph name="PRODUCT_OS_NAME" /> permite agregar cuentas de usuario de Family Link nuevas en el dispositivo.
+      Esta política solo es útil si se combina con <ph name="DEVICE_USER_ALLOWLIST_POLICY_NAME" />. Permite agregar cuentas de Family Link además de las cuentas definidas en la lista de cuentas permitidas.
+      Esta política no afecta el comportamiento de otras políticas de acceso. En particular, no tendrá ningún efecto en los siguientes casos:
+      - Si no se permite agregar nuevos usuarios al dispositivo mediante la política <ph name="DEVICE_ALLOW_NEW_USERS_POLICY_NAME" />
+      - Si se permite agregar cualquier usuario mediante la política <ph name="DEVICE_USER_ALLOWLIST_POLICY_NAME" />
+
+      Si estableces esta política como falsa (o no la configuras), no se aplicarán reglas adicionales a las cuentas de Family Link.
+      Si la estableces como verdadera, podrán agregarse nuevas cuentas de usuario de Family Link además de las cuentas definidas en <ph name="DEVICE_USER_ALLOWLIST_POLICY_NAME" />.</translation>
+<translation id="2886969306951284125">Si habilitas el dispositivo para ejecutar apps para Android y estableces la política como verdadera, los dispositivos inscritos informarán sobre el estado de Android.
+
+      Si inhabilitas la política o no la estableces, los dispositivos inscritos no informarán sobre el estado de Android.</translation>
 <translation id="2890645751406497668">Otorgar permiso automáticamente a estos sitios para conectarse a dispositivos USB con los ID de producto y proveedor correspondientes</translation>
 <translation id="2892414556511568464">Restringe el modo de impresión doble. Si la política no se configura o se establece con un valor vacío, no se aplicará ninguna restricción.</translation>
 <translation id="2893546967669465276">Enviar registros del sistema al servidor de administración</translation>
@@ -1290,6 +1318,10 @@
 <translation id="2905984450136807296">Duración de los datos de autenticación almacenados en caché</translation>
 <translation id="2906874737073861391">Lista de extensiones AppPack</translation>
 <translation id="2908277604670530363">Cantidad máxima de conexiones simultáneas con el servidor proxy</translation>
+<translation id="2919544577647246857">Define la lista de usuarios con permiso para acceder al dispositivo. Las entradas que se ingresen deben tener el formato <ph name="USER_ALLOWLIST_ENTRY_FORMAT" />, p. ej., <ph name="USER_WHITELIST_ENTRY_EXAMPLE" />. Para permitir usuarios aleatorios en un dominio, usa el formato <ph name="USER_ALLOWLIST_ENTRY_WILDCARD" />.
+
+      Si no configuras esta política, no se establecerán restricciones respecto de qué usuarios pueden acceder. Ten en cuenta que, para crear nuevos usuarios, sigue siendo necesario configurar la política <ph name="DEVICE_ALLOW_NEW_USERS_POLICY_NAME" /> de manera adecuada.
+      Si habilitas <ph name="DEVICE_FAMILY_LINK_ACCOUNTS_ALLOWED_POLICY_NAME" />, los usuarios de Family Link también podrán acceder a las cuentas definidas en esta política.</translation>
 <translation id="2921222258441684334">Si estableces la política en 1, los sitios podrán hacer un seguimiento de la ubicación física de los usuarios de forma predeterminada. Si la estableces en 2, se rechazará el seguimiento de forma predeterminada. Puedes establecer que la política solicite permiso cada vez que un sitio quiera hacer un seguimiento de la ubicación física de los usuarios.
 
       Si no la estableces, se aplicará la política <ph name="ASK_GEOLOCATION_POLICY_NAME" />, pero los usuarios podrán cambiar esta configuración.</translation>
@@ -1506,6 +1538,7 @@
       Si no la estableces, el valor predeterminado será 0 grados y los usuarios podrán cambiarlo. Si deciden hacerlo, no se volverá a aplicar el valor predeterminado cuando se reinicie el dispositivo.</translation>
 <translation id="3264793472749429012">Codificación del proveedor de búsqueda predeterminado</translation>
 <translation id="3273221114520206906">Configuración de JavaScript predeterminada</translation>
+<translation id="328347261792478720">De forma predeterminada, el navegador mostrará recomendaciones de contenido multimedia personalizadas para el usuario. Si inhabilitas esta política, el usuario no verá estas recomendaciones. Si la habilitas o no la estableces, el usuario verá las recomendaciones de contenido multimedia.</translation>
 <translation id="3284094172359247914">Controla el uso de la API de WebUSB</translation>
 <translation id="3288595667065905535">Canal de versión</translation>
 <translation id="3292147213643666827">Permite que <ph name="PRODUCT_NAME" /> funcione como proxy entre <ph name="CLOUD_PRINT_NAME" /> e impresoras anteriores conectadas a la computadora.
@@ -1520,6 +1553,9 @@
       Se quitará esta política en Chrome 88.
 
       Consulta https://www.chromestatus.com/feature/4664843055398912.</translation>
+<translation id="3302829897293005699">Si habilitas la política o no la estableces, los dispositivos inscritos informarán sobre la sesión de kiosco activa, como el ID de aplicación y la versión.
+
+      Si inhabilitas la política, los dispositivos inscritos no informarán sobre la sesión de kiosco.</translation>
 <translation id="3303911765031636277">Política de configuración para el Conector de Chrome Enterprise OnFileAttached</translation>
 <translation id="3304662785258434098">Permite establecer si los usuarios pueden agregar excepciones para habilitar contenido mixto en sitios específicos.
 
@@ -1554,6 +1590,13 @@
 <translation id="3345682490796432751">Si habilitas la política, se usarán normalmente los complementos desactualizados. Si inhabilitas la política, no se usarán los complementos desactualizados.
 
       Si no estableces la política, se solicitará permiso a los usuarios para ejecutar complementos desactualizados.</translation>
+<translation id="3348799281602260763">Si habilitas la política, las conexiones entre pares con WebRTC podrán convertirse en versiones
+      obsoletas de los protocolos TLS/DTLS (DTLS 1.0, TLS 1.0 y TLS 1.1).
+      Si la inhabilitas o no la estableces, se inhabilitarán estas versiones
+      de TLS/DTLS.
+
+      Esta política es temporal y se eliminará en una versión futura
+      de <ph name="PRODUCT_NAME" />.</translation>
 <translation id="3356657927302977341">Configura si <ph name="PRODUCT_NAME" /> en Linux usará notificaciones nativas.
 
 Si se establece como verdadera o no se establece, <ph name="PRODUCT_NAME" /> podrá usar notificaciones nativas.
@@ -1832,6 +1875,9 @@
 <translation id="3709266154059827597">Configurar la lista negra de instalación de extensiones</translation>
 <translation id="3711895659073496551">Suspender</translation>
 <translation id="3715569262675717862">Autenticación basada en certificados de clientes</translation>
+<translation id="3727675072430693164">Si habilitas la política, los dispositivos inscritos informarán sobre las estadísticas de hardware de los componentes SoC.
+
+      Si la inhabilitas o no la estableces, los dispositivos inscritos no informarán sobre estas estadísticas.</translation>
 <translation id="3736879847913515635">Habilitar la opción para agregar una persona en el Administrador de usuarios</translation>
 <translation id="3737890474637805114">Bloquear la descarga de archivos grandes</translation>
 <translation id="3748900290998155147">Permite especificar si se permiten los bloqueos de activación. Las extensiones pueden solicitar estos bloqueos mediante la API de extensión de administración de energía. Las apps de ARC también pueden solicitarlos.
@@ -1843,6 +1889,9 @@
 <translation id="375266612405883748">Restringe el intervalo de puertos UDP que utiliza el host de acceso remoto en esta computadora.
 
           Si esta política no se configura o se configura en una string vacía, el host de acceso remoto podrá utilizar cualquier puerto disponible, a menos que la política <ph name="REMOTE_ACCESS_HOST_FIREWALL_TRAVERSAL_POLICY_NAME" /> esté inhabilitada. En ese caso, el host de acceso remoto utilizará puertos UDP en el intervalo de 12400 a 12409.</translation>
+<translation id="3755237588083934849">Si estableces la política, se determinará la frecuencia con la que se envían las cargas de estado del dispositivo (expresado en milisegundos). El mínimo permitido es 60 segundos.
+
+      Si no la estableces, se aplicará el intervalo predeterminado de 3 horas.</translation>
 <translation id="3756011779061588474">Bloquear modo de programador</translation>
 <translation id="3758089716224084329">Te permite establecer el servidor proxy que usa <ph name="PRODUCT_NAME" /> y evita que los usuarios cambien la configuración del proxy.
 
@@ -2284,6 +2333,7 @@
       Si no se establece, la Navegación segura operará en el modo de protección estándar, pero los usuarios podrán cambiar esta configuración.
 
       Para obtener más información sobre la Navegación segura, consulta https://developers.google.com/safe-browsing.</translation>
+<translation id="4402887080007986374">La versión válida de las Condiciones del Servicio de la Coexistencia de Educación</translation>
 <translation id="4408428864159735559">Lista de archivos compartidos de red configurados previamente</translation>
 <translation id="4410236409016356088">Habilitar la velocidad moderada del ancho de banda de la red</translation>
 <translation id="441217499641439905">Inhabilitar Google Drive a través de conexiones móviles en la app de Archivos de <ph name="PRODUCT_OS_NAME" /></translation>
@@ -2465,6 +2515,13 @@
           Para ver ejemplos de patrones, visita https://www.chromium.org/developers/how-tos/chrome-frame-getting-started.</translation>
 <translation id="467449052039111439">Abrir una lista de direcciones URL</translation>
 <translation id="4674871290487541952">Permitir los algoritmos no seguros en las verificaciones de integridad de las instalaciones y actualizaciones de extensiones</translation>
+<translation id="4677605038200415894">Si configuras la política, podrás crear una lista de patrones de URL que indiquen los sitios a los cuales se les otorga permiso automáticamente para acceder a un dispositivo USB con los ID del producto y del proveedor especificados. Para que la política sea válida, cada elemento de la lista debe incluir dispositivos y URL. Cada elemento de los dispositivos puede incluir un campo de ID del producto y uno de ID del proveedor. Los ID que omitas se considerarán comodines, con una excepción: no puedes especificar el ID del producto si no especificas también el ID del proveedor. De lo contrario la política no será válida.
+
+      El modelo de permiso de USB utiliza la URL de solicitud y la URL de incorporación (del sitio de marco de nivel superior) para permitir que la URL de solicitud acceda al dispositivo USB. Es posible que la URL de solicitud difiera de la URL de incorporación cuando el sitio que solicita el permiso se carga en un iframe. Así, el campo "urls" puede incluir hasta 2 strings separadas por coma para especificar ambas URL. Si solo especificas una, se otorgará acceso a los dispositivos USB correspondientes cuando la URL del sitio que solicita el permiso coincida con la URL especificada, independientemente del estado de incorporación. Las URL incluidas en el campo "urls" deben ser válidas; de lo contrario se ignorará la política.
+
+      Si no configuras la política, se aplicará <ph name="DEFAULT_WEB_USB_GUARD_SETTING_POLICY_NAME" /> (si se establece). De lo contrario se aplicará la configuración personal del usuario.
+
+      Los patrones de URL que se especifiquen en esta política no deben entrar en conflicto con los que se configuren a través de <ph name="WEB_USB_BLOCKED_FOR_URLS_POLICY_NAME" />. Si ese es el caso, prevalecerá esta política por sobre <ph name="WEB_USB_BLOCKED_FOR_URLS_POLICY_NAME" /> y <ph name="WEB_USB_ASK_FOR_URLS_POLICY_NAME" />.</translation>
 <translation id="4680936297850947973">Dejó de estar disponible en M68. En su lugar, usa DefaultPopupsSetting.
 
       Para obtener una explicación completa, consulta https://www.chromestatus.com/features/5675755719622656.
@@ -2877,6 +2934,9 @@
 
       Si no se configura la política, hasta la versión M76 inclusive, <ph name="PRODUCT_NAME" /> no podrá recopilar ni subir esos registros de forma predeterminada. A partir de la versión M77, <ph name="PRODUCT_NAME" /> podrá de forma predeterminada recopilar y subir esos registros de la mayoría de los perfiles afectados por las políticas empresariales en la nube para los usuarios. En las versiones posteriores a M77 y hasta la M80 inclusive, <ph name="PRODUCT_NAME" /> también podrá recopilar y subir de forma predeterminada esos registros de los perfiles afectados por la administración local de <ph name="PRODUCT_NAME" />.</translation>
 <translation id="5331746669335642668">La política de nube de <ph name="PRODUCT_NAME" /> anula la política de la plataforma.</translation>
+<translation id="5340105431123046323">Si habilitas la política o no la estableces, los dispositivos inscritos informarán la lista de interfaces de redes con sus tipos y direcciones de hardware.
+
+      Si inhabilitas la política, los dispositivos inscritos no informarán sobre las interfaces de redes.</translation>
 <translation id="5346587320074666194">Bloquea el acceso a los sensores en estos sitios</translation>
 <translation id="5362531528507578966">Anula el modo predeterminado de impresión de los gráficos de fondo.</translation>
 <translation id="5365476955714838841">Parámetros de la línea de comandos para el navegador alternativo</translation>
@@ -3148,6 +3208,8 @@
       Nota: Los nombres de los servidores se separan con comas. Se permite el uso de caracteres comodín (<ph name="WILDCARD_VALUE" />).</translation>
 <translation id="5645779841392247734">Permitir cookies en estos sitios</translation>
 <translation id="5646234199535103501">Política de configuración para Chrome Enterprise Connector OnBulkDataEntry</translation>
+<translation id="5652250453612826983">Controla las políticas de supervisión parental, que se aplican solo a las cuentas de menores de edad.
+      Estas políticas no se establecen en la Consola del administrador; se configuran directamente en el servidor de la API de Kids.</translation>
 <translation id="5656177735561364047">Habilita la función de portapapeles compartido</translation>
 <translation id="5657576769650058122">Si habilitas la política, se mantendrá activado el teclado virtual en pantalla (un dispositivo de entrada del Sistema operativo Chrome). Si inhabilitas la política, se mantendrá desactivado el teclado.
 
@@ -3258,6 +3320,9 @@
       Cada elemento en esta lista es un patrón de coincidencia con el formato de extensiones (consulta https://developer.chrome.com/extensions/match_patterns). Los usuarios pueden instalar fácilmente elementos desde cualquier URL que coincida con un elemento de la lista. Estos patrones deben permitir tanto la ubicación del archivo *.crx como la página desde donde se inicia la descarga (la URL de referencia).
 
       <ph name="EXTENSION_INSTALL_BLOCKLIST_POLICY_NAME" /> tiene prioridad sobre esta política. Esto quiere decir que no se instalará ninguna extensión de la lista de elementos bloqueados, incluso si proviene de un sitio de esta lista.</translation>
+<translation id="5860010874344790473">Si habilitas la política, se enviarán registros del sistema al servidor de administración para que los administradores puedan supervisarlos.
+
+      Si la inhabilitas o no la estableces, no se enviarán registros del sistema.</translation>
 <translation id="5861856285460256766">Configuración del código de acceso superior</translation>
 <translation id="5868414965372171132">Configuración de red de usuario</translation>
 <translation id="587242272905978723">Permite que <ph name="PLUGIN_VM_NAME" /> recopile datos de uso de <ph name="PLUGIN_VM_NAME" />.
@@ -3760,6 +3825,17 @@
       Si se establece como verdadera, permite que el dispositivo active Powerwash.
       Si no se establece, el valor predeterminado será verdadero, lo que significa que permite que el dispositivo active Powerwash.
       </translation>
+<translation id="6614020900120353107">Controla el uso del cliente DNS integrado en <ph name="PRODUCT_NAME" />.
+
+      Esta política no afecta los servidores DNS que se usan, solo la pila de software que se utiliza para comunicarse con ellos. Por ejemplo, si se configura el sistema operativo para que use un servidor DNS empresarial, el cliente DNS integrado usará ese mismo servidor. Sin embargo, es posible que el cliente DNS integrado se conecte con los servidores de diferentes maneras mediante modernos protocolos relacionados con DNS, como DNS sobre TLS.
+
+      Esta política no tiene efecto en el protocolo DNS sobre HTTPS. Si quieres cambiar ese comportamiento, consulta la política <ph name="DNS_OVER_HTTPS_MODE_POLICY_NAME" />.
+
+      Si estableces esta política como verdadera, se usará el cliente de DNS integrado cuando esté disponible.
+
+      Si se establece como falsa, no se utilizará el cliente DNS integrado.
+
+      Si no la estableces, se habilitará el cliente DNS integrado de forma predeterminada en macOS, el Sistema operativo Chrome y Android (cuando no están habilitados el DNS privado ni la VPN). Además, los usuarios podrán editar chrome://flags o especificar una marca de línea de comandos para decidir si se utiliza el cliente DNS integrado.</translation>
 <translation id="6621839881150363218">Si habilitas la política, se aislarán todos los sitios (cada sitio se ejecutará en su propio proceso). Si inhabilitas la política, no se aislará ningún sitio de forma explícita y se desactivarán las pruebas de campo de IsolateOriginsAndroid y SitePerProcessAndroid. Los usuarios podrán activar la política de forma manual.
 
       Si no estableces la política, los usuarios podrán cambiar esta configuración.
@@ -3771,6 +3847,21 @@
 <translation id="6628043374475466084">Patrones de URL en los que no es necesario comprobar si las cargas infringen las normas de protección de datos sensibles</translation>
 <translation id="6628120204569232711">Informar el estado de almacenamiento</translation>
 <translation id="663685822663765995">Restringir el modo de impresión a color</translation>
+<translation id="6640989746632867803">Si estableces la política, los usuarios no podrán omitir las decisiones de seguridad relacionadas con las descargas.
+
+       Puedes establecer la política en los siguientes valores:
+
+      * Bloquear descargas peligrosas: Se permitirán todas las descargas, excepto las que tengan advertencias de seguridad.
+
+      * Bloquear descargas potencialmente peligrosas: Se permitirán todas las descargas, excepto las que tengan advertencias de seguridad y consideren descargas potencialmente peligrosas.
+
+      * Bloquear todas las descargas: Se bloquearán todas las descargas.
+
+      * Bloquear descargas maliciosas: Se permitirán todas las descargas, excepto las que se considere con certeza que tienen software malicioso. A diferencia de las descargas peligrosas, no se tiene en cuenta el tipo de archivo, pero sí el host.
+
+      * Sin restricciones especiales: Las descargas tendrán las restricciones de seguridad convencionales conforme a los resultados del análisis de seguridad.
+
+      Nota: Estas restricciones se aplican a las descargas que se inician desde el contenido de páginas web, así como la opción "Descargar vínculo" del menú. No se aplican a la acción de descargar la página que se muestra actualmente ni a la opción para guardar como PDF desde las opciones de impresión. Obtén más información sobre la Navegación segura ( https://developers.google.com/safe-browsing ).</translation>
 <translation id="6641981670621198190">Inhabilitar la admisión de API gráficas en 3D</translation>
 <translation id="6646056064606561298">Habilita la política de administración de la energía para el inicio mediante CA.
 
@@ -3881,6 +3972,9 @@
       Si no se establece esta política en un dispositivo administrado, el dispositivo no podrá ejecutar máquinas virtuales. En cambio, los dispositivos no administrados sí podrán ejecutar máquinas virtuales.</translation>
 <translation id="6786747875388722282">Extensiones</translation>
 <translation id="6786967369487349613">Establecer el directorio del perfil de itinerancia</translation>
+<translation id="6789422336869764846">Si habilitas la política o no la estableces, los dispositivos inscritos informarán el estado del interruptor del modo de desarrollador del dispositivo cuando se inicia la máquina.
+
+      Si la inhabilitas, los dispositivos inscritos no informarán el estado del interruptor del modo de desarrollador.</translation>
 <translation id="6795485990775913659">Permitir la impresión solo sin PIN</translation>
 <translation id="6810445994095397827">Bloquear JavaScript en estos sitios</translation>
 <translation id="6813263547126514821">Encendido y apagado</translation>
@@ -4422,6 +4516,9 @@
 <translation id="7458437477941640506">No implementes una reversión a la versión objetivo si la versión del sistema operativo es más reciente que la objetivo. Las actualizaciones también se inhabilitan.</translation>
 <translation id="7459601923199346224">Controla las políticas de dispositivo y usuario para la administración de certificados.</translation>
 <translation id="7464991223784276288">Restringir las cookies solo para las URL coincidentes en la sesión actual</translation>
+<translation id="7468182772656807573">Si estableces la política, se determinará la frecuencia con la que se envían paquetes de red de control (expresado en milisegundos). Los intervalos varían de 30 segundos a 24 horas. Los valores fuera de este rango se restringirán conforme a estos valores.
+
+      Si no la estableces, se aplicará el intervalo predeterminado de 3 minutos.</translation>
 <translation id="7469554574977894907">Habilitar sugerencias de búsqueda</translation>
 <translation id="747014869399137701">Si estableces la política en 1, los sitios web podrán mostrar notificaciones de escritorio. Si la estableces en 2, se rechazarán las notificaciones de escritorio.
 
@@ -4684,6 +4781,7 @@
           De lo contrario, las combinaciones de teclas para las funciones de accesibilidad estarán habilitadas de forma predeterminada en la pantalla de acceso.</translation>
 <translation id="7777535871204167559">Tratar los dispositivos de almacenamiento externo como de solo lectura</translation>
 <translation id="7788511847830146438">Por perfil</translation>
+<translation id="780629758750905699">Permite agregar cuentas de Family Link al dispositivo</translation>
 <translation id="7807139251387225825">Lista de tipos que deben excluirse de la sincronización</translation>
 <translation id="7815699949432723208">Esta política dejó de estar disponible. En su lugar, utiliza la política "<ph name="NATIVE_MESSAGING_ALLOWLIST_POLICY_NAME" />".
 
@@ -4831,6 +4929,9 @@
       Si se inhabilita esta configuración, los usuarios no podrán acceder a "Autocompletar".
 
       Si se habilita o no se establece ningún valor, los usuarios podrán controlar "Autocompletar". De esta manera, podrán configurar los perfiles de la función y activarla o desactivarla cuando lo deseen.</translation>
+<translation id="8036964468882248070">Si habilitas la política, los dispositivos inscritos informarán sobre los identificadores y las estadísticas de hardware de los dispositivos de almacenamiento.
+
+      Si inhabilitas la política o no la estableces, los dispositivos inscritos no informarán sobre las estadísticas de almacenamiento.</translation>
 <translation id="8044493735196713914">Modo de notificación de inicio de dispositivo</translation>
 <translation id="8049769137921877885">Esta política controla el envío de los datos sobre la política y su marca de tiempo de recuperación.
 
@@ -4911,6 +5012,9 @@
           Si estableces esta política, los usuarios no podrán cambiarla ni anularla.
 
           Si no la estableces, la función de resaltar la posición del cursor estará inicialmente inhabilitada, pero el usuario podrá habilitarla en cualquier momento.</translation>
+<translation id="8164687848393015214">Si habilitas la política, se enviarán paquetes de red de control (<ph name="HEARTBEATS_TERM" />) al servidor de administración para controlar el estado en línea, lo que permite que el servidor detecte si el dispositivo está sin conexión.
+
+      Si la inhabilitas o no la estableces, no se enviarán paquetes.</translation>
 <translation id="816783746144552109">Configura la versión mínima permitida del Sistema operativo Chrome para el dispositivo.</translation>
 <translation id="8171924760436219650">Cambia el botón principal del mouse al botón derecho en la pantalla de acceso</translation>
 <translation id="8176035528522326671">Permitir que el usuario de empresa sea solo usuario principal en la sesión de perfiles múltiples (comportamiento predeterminado para usuarios administrados por empresas)</translation>
@@ -5223,6 +5327,7 @@
 
       Si se establece esta política como falsa o no se configura, el usuario podrá usar el navegador sin acceder a <ph name="PRODUCT_NAME" />.</translation>
 <translation id="858309738002328421">Bloquear la carga de archivos grandes</translation>
+<translation id="8583509234908413302">Permite que los protocolos TLS/DTLS heredados cambien a una versión inferior en WebRTC</translation>
 <translation id="8584279193368801689">Restringe el modo de impresión con PIN. Si no se configura la política, no se aplicará ninguna restricción. Si el modo no está disponible, se ignorará esta política. Ten en cuenta que solo se habilitará la función de impresión con PIN para impresoras que usen uno de los siguientes protocolos: IPPS, HTTPS, USB o IPP por USB.</translation>
 <translation id="8585558195682146109">Analizar las descargas del usuario</translation>
 <translation id="8587229956764455752">Permitir la creación de nuevas cuentas de usuario</translation>
@@ -5433,6 +5538,9 @@
 
       Los patrones de URL deben tener un formato conforme a lo especificado en la política "<ph name="URL_BLOCKLIST_POLICY_NAME" />", documentada en https://www.chromium.org/administrators/url-blacklist-filter-format.
       </translation>
+<translation id="8931555638815157255">Si habilitas la política o no la estableces, los dispositivos inscritos informarán de forma periódica su versión de SO y firmware.
+
+      Si inhabilitas la política, los dispositivos inscritos no informarán la versión.</translation>
 <translation id="8937282917198525844"> A partir de la versión M81, se actualizaron la apariencia y el estilo de los elementos estándar de los controles de formulario (p. ej., &lt;select&gt;, &lt;button&gt;, &lt;input type=date&gt;), con mejoras en la accesibilidad y la uniformidad de la plataforma. Esta política restablece los elementos antiguos de los controles de formulario "heredados" hasta la versión M84.
 
       Si se establece esta política como verdadera, se utilizarán los elementos de los controles de formulario "heredados" para todos los sitios.
@@ -5470,6 +5578,13 @@
 <translation id="8942616385591203339">Esta política controla si se muestra el consentimiento de sincronización al usuario durante el primer acceso. Debe establecerse como falso si consideras que el usuario nunca necesitará este consentimiento.
       Si se establece como falso, no se mostrará el consentimiento.
       Si se establece como verdadero o no se establece, se puede mostrar el consentimiento.</translation>
+<translation id="8943744188513019866">Esta política indica el valor válido actual de las Condiciones del Servicio de la Coexistencia de Educación.
+      Se compara con la última versión que aceptó el padre o la madre y se usa para solicitar la renovación del permiso parental cuando es necesario.
+
+      Cuando se configura esta política, se puede validar la versión de las Condiciones del Servicio.
+      Cuando no se configura esta política, no es posible verificar la validez de las Condiciones del Servicio de la Coexistencia de Educación.
+
+      Esta política solo se usa para usuarios de Family Link.</translation>
 <translation id="8943934315109955032">No revisar si se infringen las normas relacionadas con la protección de datos sensibles</translation>
 <translation id="8947415621777543415">Informar la ubicación del dispositivo</translation>
 <translation id="8948062138228904066">Lista de servidores de autenticación habilitados</translation>
@@ -5602,6 +5717,9 @@
       Si no estableces la política, se aplicará <ph name="DEFAULT_PLUGINS_SETTING_POLICY_NAME" /> (si se establece) para todos los sitios. De lo contrario se aplicará la configuración personal del usuario.
 
       Para obtener información detallada sobre los patrones de URL válidos, consulta: https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns. Sin embargo, a partir de la versión M85, ya no serán compatibles para esta política los patrones que incluyan comodines "*" y "[*.]" en el host.</translation>
+<translation id="9073405975862312795">Si habilitas la política o no la estableces, los dispositivos inscritos informarán los períodos cuando el usuario esté activo en el dispositivo.
+
+      Si inhabilitas la política, los dispositivos inscritos no registrarán ni informarán los tiempos de actividad.</translation>
 <translation id="9077227880520270584">Temporizador para el acceso automático de la cuenta local del dispositivo</translation>
 <translation id="9084985621503260744">Especificar si la actividad de video afecta a la administración de energía</translation>
 <translation id="9088433379343318874">Habilitar el proveedor de contenido de un usuario supervisado</translation>
diff --git a/components/policy/resources/policy_templates_es.xtb b/components/policy/resources/policy_templates_es.xtb
index c047e3f..4d7086a 100644
--- a/components/policy/resources/policy_templates_es.xtb
+++ b/components/policy/resources/policy_templates_es.xtb
@@ -152,6 +152,9 @@
       Si se asigna el valor "verdadero" a esta política, se habilitará esta función y los usuarios podrán cambiarla.
       De forma predeterminada, se le asignará el valor "falso", no se sugerirá ningún emoji y los usuarios no podrán anularla.</translation>
 <translation id="1243570869342663665">Controlar el filtrado de contenido para adultos de SafeSites.</translation>
+<translation id="1247850578871017740">Si se le asigna un valor válido a esta política, <ph name="PRODUCT_NAME" /> no podrá usar las versiones de SSL/TLS anteriores a la versión especificada. Los valores que no se reconozcan se ignorarán.
+
+      Si no se establece esta política, <ph name="PRODUCT_NAME" /> mostrará un error para las versiones TLS 1.0 y TLS 1.1, pero el usuario podrá evitarlo.</translation>
 <translation id="1252536192437793850">Dejar que los sitios web pidan permiso al usuario para acceder a un puerto serie</translation>
 <translation id="1257550411839719984">Establecer directorio de descargas predeterminado</translation>
 <translation id="1265053460044691532">Limitar el tiempo durante el que un usuario autenticado a través de SAML puede iniciar sesión sin conexión</translation>
@@ -2339,6 +2342,7 @@
       Si no se establece esta política, Navegación segura funcionará en modo de protección estándar, pero los usuarios podrán cambiar esta opción.
 
       Consulta la página https://developers.google.com/safe-browsing para obtener más información acerca de Navegación segura.</translation>
+<translation id="4402887080007986374">La versión válida de los Términos del Servicio de Edu Coexistence</translation>
 <translation id="4408428864159735559">Lista de sistemas de archivos de red compartidos preconfigurados.</translation>
 <translation id="4410236409016356088">Habilitar la limitación de ancho de banda</translation>
 <translation id="441217499641439905">Inhabilitar Google Drive a través de conexiones móviles en la aplicación Archivos de <ph name="PRODUCT_OS_NAME" /></translation>
@@ -2521,6 +2525,13 @@
           Puedes consultar ejemplos de patrones en la página https://www.chromium.org/developers/how-tos/chrome-frame-getting-started.</translation>
 <translation id="467449052039111439">Abrir una lista de URLs</translation>
 <translation id="4674871290487541952">Permite los algoritmos no seguros en las comprobaciones de integridad de las actualizaciones e instalaciones de extensiones</translation>
+<translation id="4677605038200415894">Si se le asigna un valor a esta política, podrás crear una lista de patrones de URL donde se especifique qué sitios web obtienen permiso para acceder a un dispositivo USB automáticamente con los ID de proveedor y producto determinados. Cada elemento de la lista debe contener dispositivos y URLs para que la política sea válida. Cada elemento de los dispositivos puede incluir un campo de ID de proveedor y otro de ID de producto. Los ID que omitas se considerarán comodines, con una excepción: no puedes especificar un ID de producto sin definir también un ID de proveedor. De lo contrario, la política no será válida.
+
+      El modelo de permisos USB usa la URL solicitante y la URL de inserción (del sitio web marco de nivel superior) para permitir a la URL solicitante que acceda al dispositivo USB. La URL solicitante puede ser distinta a la de inserción si el sitio web solicitante se carga en un iframe. Por lo tanto, el campo "urls" puede contener un máximo de 2 cadenas delimitadas por una coma para especificar estas URL. Si solo especificas una, se otorgará acceso a los dispositivos USB correspondientes cuando la URL del sitio web solicitante coincida con esta URL, independientemente del estado de inserción. Las URL del campo "urls" deben ser URL válidas. De lo contrario, la política se ignorará.
+
+      Si no se le asigna un valor a la política, se aplicará <ph name="DEFAULT_WEB_USB_GUARD_SETTING_POLICY_NAME" /> si se ha establecido previamente. Si no, se aplicará la configuración personal del usuario.
+
+      Los patrones de URL de esta política no deben entrar en conflicto con los de la política <ph name="WEB_USB_BLOCKED_FOR_URLS_POLICY_NAME" />. Si lo hacen, esta política prevalece sobre <ph name="WEB_USB_BLOCKED_FOR_URLS_POLICY_NAME" /> y <ph name="WEB_USB_ASK_FOR_URLS_POLICY_NAME" />.</translation>
 <translation id="4680936297850947973">Obsoleta en M68. Usa DefaultPopupsSetting en su lugar.
 
       Consulta una explicación completa en la página  https://www.chromestatus.com/features/5675755719622656.
@@ -3217,6 +3228,8 @@
       Nota: Si hay varios nombres de servidores, se deben separar con comas. Se permite el uso de caracteres comodín (<ph name="WILDCARD_VALUE" />).</translation>
 <translation id="5645779841392247734">Permitir cookies en estos sitios</translation>
 <translation id="5646234199535103501">Política de configuración del conector OnBulkDataEntry de Chrome Enterprise Connectors</translation>
+<translation id="5652250453612826983">Controla las políticas de supervisión parental, que se aplican exclusivamente a las cuentas infantiles.
+      Estas políticas no se configuran en la consola de administración, sino en el servidor de APIs para niños directamente.</translation>
 <translation id="5656177735561364047">Habilita la función de portapapeles compartido</translation>
 <translation id="5657576769650058122">Si se asigna el valor "Habilitada" a esta política, el teclado virtual en pantalla (un dispositivo de introducción de texto de Chrome OS) siempre estará activado. Si se le asigna el valor "Inhabilitada", este teclado siempre estará desactivado.
 
@@ -3854,6 +3867,21 @@
 <translation id="6628043374475466084">Indica los patrones de URL en los que no se comprobará si el contenido subido cumple con las normas de protección de datos sensibles.</translation>
 <translation id="6628120204569232711">Informar sobre el estado del almacenamiento</translation>
 <translation id="663685822663765995">Restringir el modo de impresión en color</translation>
+<translation id="6640989746632867803">Si se le asigna un valor a la política, los usuarios no podrán saltarse las medidas de seguridad de las descargas.
+
+       Estos son los efectos de cada valor:
+
+      * Bloquear descargas peligrosas: se permiten todas las descargas, excepto las que incluyan advertencias de seguridad.
+
+      * Bloquear descargas potencialmente peligrosas: se permiten todas las descargas, excepto las que incluyan advertencias de seguridad sobre descargas potencialmente peligrosas.
+
+      * Bloquear todas las descargas: se bloquean todas las descargas.
+
+      * Bloquear las descargas de contenido malicioso: se permiten todas las descargas, excepto las definidas como software malicioso con un nivel elevado de certeza. A diferencia de la opción Bloquear descargas peligrosas, esta opción no tiene en cuenta el tipo de archivo, pero sí el host.
+
+      * Sin restricciones especiales: las restricciones de seguridad habituales se aplican a las descargas en función de los resultados de análisis de seguridad.
+
+      Nota: Estas restricciones se aplican a las descargas activadas desde el contenido de las páginas web o mediante la opción Descargar enlace… del menú. No se aplican a la opción Descargar de la página que se muestra ni a la opción Guardar como PDF de las opciones de impresión. Consulta más información sobre Navegación segura en https://developers.google.com/safe-browsing.</translation>
 <translation id="6641981670621198190">Inhabilitar compatibilidad con API de gráficos 3D</translation>
 <translation id="6646056064606561298">Habilita la política de gestión de inicio con CA.
 
@@ -5559,6 +5587,13 @@
 <translation id="8942616385591203339">Esta política controla si se muestra Sync Consent al usuario durante el primer inicio de sesión. Se le debería asignar el valor "False" si no es necesario mostrar Sync Consent al usuario en ningún caso.
       Si se le asigna el valor "False", Sync Consent no se mostrará.
       Si se le asigna el valor "True" o no se le asigna ningún valor, Sync Consent no se puede mostrar.</translation>
+<translation id="8943744188513019866">Esta política indica la versión válida actual de los Términos del Servicio de Edu Coexistence.
+      Se compara con la última versión aceptada por el padre o madre y se utiliza para mostrar la renovación del permiso parental cuando sea necesario.
+
+      Si se le asigna un valor a la política, la versión de los Términos del Servicio puede validarse.
+      Si no se le asigna ningún valor, no será posible verificar la validez de los Términos del Servicio de Edu Coexistence.
+
+      Esta política solo se usa para usuarios de Family Link.</translation>
 <translation id="8943934315109955032">No comprueba si se infringen las normas de protección de datos sensibles</translation>
 <translation id="8947415621777543415">Informar de ubicación del dispositivo</translation>
 <translation id="8948062138228904066">Lista de permitidos de servidores de autenticación</translation>
diff --git a/components/policy/resources/policy_templates_fr.xtb b/components/policy/resources/policy_templates_fr.xtb
index a8295f73..0a8942e1 100644
--- a/components/policy/resources/policy_templates_fr.xtb
+++ b/components/policy/resources/policy_templates_fr.xtb
@@ -649,6 +649,9 @@
           </translation>
 <translation id="2030905906517501646">Mot clé du moteur de recherche par défaut</translation>
 <translation id="203096360153626918">Cette règle n'a aucun effet sur les applications Android. L'utilisation du mode plein écran est possible même si cette règle est définie sur "<ph name="FALSE" />".</translation>
+<translation id="2037214548071298156">Si cette règle est activée ou qu'elle n'est pas configurée, les appareils enregistrés communiquent des statistiques matérielles telles que l'utilisation du processeur et de la RAM.
+
+      Si cette règle est désactivée, les appareils enregistrés ne communiquent pas ces statistiques.</translation>
 <translation id="2040479044912658454">Mode de rastérisation pour l'impression</translation>
 <translation id="2043749682619281558">Activer la mise en surbrillance du curseur sur l'écran de connexion</translation>
 <translation id="2043770014371753404">Imprimantes d'entreprise désactivées</translation>
@@ -987,7 +990,11 @@
       Si cette règle est activée et que Chrome Cleanup détecte des logiciels indésirables, celui-ci peut envoyer à Google des métadonnées sur l'analyse conformément à la configuration de la règle SafeBrowsingExtendedReportingEnabled. Chrome Cleanup demande à l'utilisateur s'il souhaite supprimer les logiciels indésirables détectés.  Les résultats du nettoyage sont transmis à Google, et l'utilisateur n'a pas la possibilité d'empêcher cette transmission.
 
       Sur <ph name="MS_WIN_NAME" />, cette fonctionnalité n'est disponible que pour les instances associées à un domaine <ph name="MS_AD_NAME" />, exécutées sur Windows 10 Pro ou qui bénéficient de la gestion cloud du navigateur Chrome.</translation>
+<translation id="2448315169529769573">Si cette règle est activée, <ph name="PRODUCT_OS_NAME" /> envoie à Google les statistiques d'utilisation et les données de diagnostic, y compris les rapports d'erreur. Si cette règle est désactivée, ces statistiques et ces données ne sont pas envoyées.
+
+       Si cette règle n'est pas configurée, les statistiques et les données de diagnostic ne sont pas envoyées concernant les appareils non gérés, mais le sont pour les appareils gérés.</translation>
 <translation id="2454228136871844693">Privilégier la stabilité.</translation>
+<translation id="2456629156652006573">Privé uniquement</translation>
 <translation id="2463034609187171371">Activer des suites de chiffrement DHE dans TLS</translation>
 <translation id="2463365186486772703">Paramètres régionaux de l'application</translation>
 <translation id="2463832514638083341">Cette règle contrôle la durée (en jours) pendant laquelle les métadonnées des tâches d'impression sont conservées sur l'appareil.
@@ -1158,9 +1165,16 @@
       Cette règle a été supprimée dans M77.
       Cette règle s'applique à l'écran de connexion. Veuillez également consulter celle applicable à la session utilisateur (<ph name="SITE_PER_PROCESS_POLICY_NAME" />). Nous vous recommandons d'attribuer la même valeur à ces deux règles. Si les valeurs ne sont pas identiques, la règle relative aux utilisateurs s'applique. Cela peut ralentir l'ouverture de la session utilisateur.
       </translation>
+<translation id="2702023190395322609">Activer les recommandations de contenus multimédias</translation>
 <translation id="2706708761587205154">Autoriser l'impression avec code uniquement</translation>
 <translation id="2707873794476722903">La navigation sécurisée est active et en mode de protection standard.</translation>
 <translation id="2710534340210290498">Si cette règle est définie sur "False", les utilisateurs ne peuvent pas verrouiller l'écran (seule la déconnexion de la session de l'utilisateur est possible). Si ce paramètre est défini sur "True", ou s'il n'est pas configuré, les utilisateurs ayant procédé à l'authentification avec un mot de passe peuvent verrouiller l'écran.</translation>
+<translation id="2716623398185506073">Si cette règle est activée, les appareils enregistrés communiquent les statistiques et les identifiants matériels associés à l'alimentation.
+
+      Si cette règle est désactivée ou qu'elle n'est pas configurée, les appareils enregistrés ne fournissent pas ces statistiques.</translation>
+<translation id="2725855586003209701">Si cette règle est activée ou qu'elle n'est pas configurée, les appareils enregistrés communiquent la liste des utilisateurs qui se sont récemment connectés.
+
+      Si cette règle est désactivée, les appareils enregistrés ne communiquent pas cette liste.</translation>
 <translation id="2731627323327011390">Désactiver l'utilisation de certificats <ph name="PRODUCT_OS_NAME" /> pour les applications ARC</translation>
 <translation id="2742843273354638707">Masque l'application Chrome Web Store et le lien de bas de page sur la page Nouvel onglet et dans le lanceur d'applications de <ph name="PRODUCT_OS_NAME" />.
 
@@ -1280,6 +1294,17 @@
 
       Si cette règle n'est pas configurée, tous les serveurs d'impression sont interrogés, sans filtrage.</translation>
 <translation id="2877225735001246144">Désactiver la consultation CNAME lors de la négociation de l'authentification Kerberos</translation>
+<translation id="2886215882246310669">Permet de spécifier si <ph name="PRODUCT_OS_NAME" /> autorise ou non l'ajout de nouveaux comptes utilisateur Family Link sur l'appareil.
+      Cette règle n'est utile que si elle combinée avec la règle <ph name="DEVICE_USER_ALLOWLIST_POLICY_NAME" />. Elle autorise les comptes Family Link en plus de ceux figurant dans la liste d'autorisation.
+      Elle n'a pas d'incidence sur le comportement des autres règles de connexion. Elle n'aura surtout aucun effet dans les cas suivants :
+      - Si la règle <ph name="DEVICE_ALLOW_NEW_USERS_POLICY_NAME" /> n'autorise pas l'ajout de nouveaux utilisateurs à l'appareil
+      - Si la règle <ph name="DEVICE_USER_ALLOWLIST_POLICY_NAME" /> autorise l'ajout de tous les utilisateurs
+
+      Si cette règle est définie sur "False" ou qu'elle n'est pas configurée, aucune règle supplémentaire n'est appliquée aux comptes Family Link.
+      Si cette règle est définie sur "True", les nouveaux comptes utilisateur Family Link sont autorisés en plus de ceux que la règle <ph name="DEVICE_USER_ALLOWLIST_POLICY_NAME" /> accepte.</translation>
+<translation id="2886969306951284125">Si les appareils enregistrés sont compatibles avec les applications Android et que cette règle est définie sur "True", ils communiquent des informations sur l'état d'Android.
+
+      Si cette règle est désactivée ou qu'elle n'est pas configurée, les appareils enregistrés ne communiquent pas ces informations.</translation>
 <translation id="2890645751406497668">Autoriser automatiquement ces sites à se connecter à des appareils USB correspondant au fournisseur et aux ID de produit indiqués.</translation>
 <translation id="2892414556511568464">Limite l'impression en mode recto verso. Si la règle n'est pas définie ou qu'elle est vide, on considère qu'il n'y a aucune restriction.</translation>
 <translation id="2893546967669465276">Envoyer des journaux système au serveur de gestion</translation>
@@ -1302,6 +1327,10 @@
 <translation id="2905984450136807296">Durée de mise en cache des données d'authentification</translation>
 <translation id="2906874737073861391">Liste des extensions AppPack</translation>
 <translation id="2908277604670530363">Nombre maximal de connexions simultanées au serveur proxy</translation>
+<translation id="2919544577647246857">Permet d'établir la liste des utilisateurs autorisés à se connecter à l'appareil. Les entrées se présentent sous la forme suivante : <ph name="USER_ALLOWLIST_ENTRY_FORMAT" /> (<ph name="USER_WHITELIST_ENTRY_EXAMPLE" />, par exemple). Pour autoriser des utilisateurs arbitraires sur un domaine, utilisez les entrées sous la forme suivante : <ph name="USER_ALLOWLIST_ENTRY_WILDCARD" />.
+
+      Si cette règle n'est pas configurée, aucune restriction ne s'applique quant aux utilisateurs autorisés à se connecter. Notez que la création d'utilisateurs nécessite toujours de configurer correctement la règle <ph name="DEVICE_ALLOW_NEW_USERS_POLICY_NAME" />.
+      Si la règle <ph name="DEVICE_FAMILY_LINK_ACCOUNTS_ALLOWED_POLICY_NAME" /> est activée, les utilisateurs de Family Link sont autorisés en plus des comptes que cette règle accepte.</translation>
 <translation id="2921222258441684334">Si cette règle est définie sur "1", les sites peuvent suivre la position géographique des utilisateurs (état par défaut). Si cette règle est définie sur "2", le suivi de la position est refusé par défaut. Vous pouvez définir cette règle de façon qu'un site demande systématiquement l'autorisation de suivre la position des utilisateurs.
 
       Si cette règle n'est pas configurée, la règle <ph name="ASK_GEOLOCATION_POLICY_NAME" /> s'applique. Toutefois, les utilisateurs peuvent modifier ce paramètre.</translation>
@@ -1517,6 +1546,7 @@
       Si cette règle n'est pas configurée, la valeur par défaut est de 0 degré, et les utilisateurs sont libres de la modifier. Dans ce cas, la valeur par défaut n'est pas rétablie au redémarrage.</translation>
 <translation id="3264793472749429012">Codages du moteur de recherche par défaut</translation>
 <translation id="3273221114520206906">Paramètre JavaScript par défaut</translation>
+<translation id="328347261792478720">Par défaut, le navigateur propose à l'utilisateur des recommandations personnalisées de contenus multimédias. Si cette règle est désactivée, l'utilisateur ne bénéficie pas de ces recommandations. Si cette règle est activée ou qu'elle n'est pas configurée, l'utilisateur peut voir ces recommandations.</translation>
 <translation id="3284094172359247914">Contrôler l'utilisation de l'API WebUSB</translation>
 <translation id="3288595667065905535">Version disponible</translation>
 <translation id="3292147213643666827">Permet à <ph name="PRODUCT_NAME" /> de faire office de proxy entre <ph name="CLOUD_PRINT_NAME" /> et les imprimantes existantes connectées à la machine.
@@ -1533,6 +1563,9 @@
       Cette règle sera supprimée dans Chrome 88.
 
       Pour en savoir plus, consultez l'article à l'adresse https://www.chromestatus.com/feature/4664843055398912.</translation>
+<translation id="3302829897293005699">Si cette règle est activée ou qu'elle n'est pas configurée, les appareils enregistrés communiquent des informations sur la session kiosque active telles que l'ID et la version de l'application.
+
+      Si cette règle est désactivée, les appareils enregistrés ne communiquent pas ces informations.</translation>
 <translation id="3303911765031636277">Règle de configuration du connecteur Chrome Enterprise OnFileAttached</translation>
 <translation id="3304662785258434098">Permet de définir si les utilisateurs peuvent ajouter ou non des exceptions qui autorisent l'affichage de contenu mixte sur des sites spécifiques.
 
@@ -1563,6 +1596,13 @@
 <translation id="3345682490796432751">Si cette règle est activée, les plug-ins obsolètes sont utilisés comme des plug-ins normaux. Si cette règle est désactivée, aucun plug-in obsolète n'est utilisé.
 
       Si cette règle n'est pas configurée, les plug-ins obsolètes ne peuvent être exécutés que sur autorisation des utilisateurs.</translation>
+<translation id="3348799281602260763">Si cette règle est activée, les connexions homologues WebRTC peuvent revenir à
+      des versions antérieures obsolètes des protocoles TLS/DTLS (DTLS 1.0, TLS 1.0 et TLS 1.1).
+      Si cette règle est désactivée ou qu'elle n'est pas configurée, ces versions
+      de TLS/DTLS sont désactivées.
+
+      Cette règle est temporaire et sera supprimée dans une future version de
+      <ph name="PRODUCT_NAME" />.</translation>
 <translation id="3356657927302977341">Configure <ph name="PRODUCT_NAME" /> pour qu'il utilise les notifications natives sur Linux.
 
 Si cette règle est définie sur "True" ou si elle n'est pas définie, <ph name="PRODUCT_NAME" /> est autorisé à utiliser les notifications natives.
@@ -1841,6 +1881,9 @@
 <translation id="3709266154059827597">Configurer la liste noire d'installation des extensions</translation>
 <translation id="3711895659073496551">Arrêter</translation>
 <translation id="3715569262675717862">Authentification basée sur les certificats client</translation>
+<translation id="3727675072430693164">Si cette règle est activée, les appareils enregistrés communiquent les statistiques matérielles des composants SoC.
+
+      Si cette règle est désactivée ou qu'elle n'est pas configurée, les appareils enregistrés ne fournissent pas ces statistiques.</translation>
 <translation id="3736879847913515635">Autoriser l'ajout de personnes dans le gestionnaire d'utilisateurs</translation>
 <translation id="3737890474637805114">Bloquer le téléchargement de fichiers volumineux</translation>
 <translation id="3748900290998155147">Indique si les wakelocks sont autorisés. Les wakelocks peuvent être demandés par des extensions par le biais de l'API d'extension de gestion de l'alimentation et par les applications ARC.
@@ -1852,6 +1895,9 @@
 <translation id="375266612405883748">Limite la plage de ports UDP utilisés par l'hôte d'accès à distance sur ce poste.
 
           Si cette règle n'est pas configurée ou si elle est définie sur une chaîne vide, l'hôte d'accès à distance est autorisé à utiliser n'importe quel port disponible, sauf si la règle <ph name="REMOTE_ACCESS_HOST_FIREWALL_TRAVERSAL_POLICY_NAME" /> est désactivée. Dans ce cas, l'hôte d'accès à distance utilise les ports UDP 12400 à 12409.</translation>
+<translation id="3755237588083934849">Permet de spécifier la fréquence d'envoi (en millisecondes) des informations sur l'état de l'appareil. La fréquence minimale autorisée est de 60 secondes.
+
+      Si cette règle n'est pas configurée, la valeur par défaut (trois heures) est appliquée.</translation>
 <translation id="3756011779061588474">Bloquer le mode développeur</translation>
 <translation id="3758089716224084329">Permet de préciser le serveur proxy utilisé par <ph name="PRODUCT_NAME" /> et d'empêcher les utilisateurs de modifier les paramètres de proxy.
 
@@ -2882,6 +2928,9 @@
 
       Sur <ph name="PRODUCT_NAME" /> version M76 ou inférieure, si la règle n'est pas définie, l'application ne peut, par défaut, ni collecter ni importer ces journaux. À partir de la version M77, <ph name="PRODUCT_NAME" /> est, par défaut, en mesure de collecter et d'importer ces journaux à partir de la plupart des profils affectés par les règles d'entreprise au niveau de l'utilisateur dans le cloud. De la version M77 à la version M80, <ph name="PRODUCT_NAME" /> peut également, par défaut, collecter et importer ces journaux à partir des profils affectés par la fonction de gestion sur site de <ph name="PRODUCT_NAME" />.</translation>
 <translation id="5331746669335642668">Les règles relatives au cloud de <ph name="PRODUCT_NAME" /> sont prioritaires sur les règles relatives à la plate-forme.</translation>
+<translation id="5340105431123046323">Si cette règle est activée ou qu'elle n'est pas configurée, les appareils enregistrés communiquent la liste des interfaces réseau, avec leur type et leur adresse matérielle.
+
+      Si cette règle est désactivée, les appareils enregistrés ne communiquent pas l'interface réseau.</translation>
 <translation id="5346587320074666194">Bloquer l'accès aux capteurs sur ces sites</translation>
 <translation id="5362531528507578966">Permet d'ignorer le mode d'impression d'images de fond par défaut.</translation>
 <translation id="5365476955714838841">Paramètres de ligne de commande pour le navigateur secondaire.</translation>
@@ -3271,6 +3320,9 @@
       Chaque élément de cette liste est un format d'identification de style extension (voir https://developer.chrome.com/extensions/match_patterns). Les utilisateurs peuvent facilement installer des éléments depuis n'importe quelle URL correspondant à un élément de cette liste. L'emplacement du fichier *.crx et la page de téléchargement (page de provenance) doivent tous deux être autorisés par ces formats.
 
       La règle <ph name="EXTENSION_INSTALL_BLOCKLIST_POLICY_NAME" /> prévaut sur celle-ci. Autrement dit, une extension figurant dans la liste de blocage ne sera pas installée, même si elle provient d'un site répertorié dans cette liste.</translation>
+<translation id="5860010874344790473">Si cette règle est activée, les journaux système sont envoyés au serveur de gestion pour permettre aux administrateurs de les contrôler.
+
+      Si cette règle est désactivée ou qu'elle n'est pas configurée, aucun journal système n'est communiqué.</translation>
 <translation id="5861856285460256766">Configuration du code d'accès parental</translation>
 <translation id="5868414965372171132">Configuration réseau au niveau de l'utilisateur</translation>
 <translation id="587242272905978723">Autoriser <ph name="PLUGIN_VM_NAME" /> à collecter les données d'utilisation de <ph name="PLUGIN_VM_NAME" />.
@@ -3769,6 +3821,17 @@
       Lorsque cette règle est définie sur "True", l'appareil peut lancer Powerwash.
       Si cette règle n'est pas configurée, elle est définie par défaut sur "True" : l'appareil peut lancer Powerwash.
       </translation>
+<translation id="6614020900120353107">Permet de définir si le client DNS intégré est utilisé ou non dans <ph name="PRODUCT_NAME" />.
+
+      Cette règle n'a aucune incidence sur les serveurs DNS utilisés. Elle concerne uniquement la pile logicielle utilisée pour communiquer avec eux. Par exemple, si le système d'exploitation est configuré pour utiliser un serveur DNS d'entreprise, ce même serveur sera utilisé par le client DNS intégré. Il est toutefois possible que le client DNS intégré gère les serveurs de différentes manières en utilisant des protocoles liés aux DNS plus modernes tels que DNS sur TLS.
+
+      Cette règle n'a également aucune incidence sur le protocole DNS-over-HTTPS. Pour modifier cela, consultez la règle <ph name="DNS_OVER_HTTPS_MODE_POLICY_NAME" />.
+
+      Si cette règle est définie sur "True", le client DNS intégré est utilisé, si disponible.
+
+      Si cette règle est définie sur "False", le client DNS intégré n'est jamais utilisé.
+
+      Si cette règle n'est pas configurée, le client DNS intégré est activé par défaut sur macOS, Android (lorsque ni le DNS privé, ni le VPN ne sont activés) et Chrome OS, et l'utilisateur peut choisir si le client DNS intégré doit être utilisé ou non, soit en modifiant chrome://flags, soit à l'aide d'un indicateur de ligne de commande.</translation>
 <translation id="6621839881150363218">Si cette règle est activée, tous les sites sont isolés (chaque site exécute son propre processus). Si cette règle est désactivée, aucune isolation de sites explicite n'est effectuée, et les tests en conditions réelles dans le cadre des règles IsolateOriginsAndroid et SitePerProcessAndroid sont désactivés. Les utilisateurs peuvent cependant toujours activer la règle manuellement.
 
       Si cette règle n'est pas configurée, les utilisateurs ne peuvent pas modifier ce paramètre.
@@ -3890,6 +3953,9 @@
       Si cette règle n'est pas définie sur un appareil géré, l'appareil n'est pas autorisé à exécuter de machines virtuelles. Les appareils non gérés sont autorisés à exécuter des machines virtuelles.</translation>
 <translation id="6786747875388722282">Extensions</translation>
 <translation id="6786967369487349613">Définir le répertoire des profils itinérants</translation>
+<translation id="6789422336869764846">Si cette règle est activée ou qu'elle n'est pas configurée, les appareils enregistrés indiquent l'état de l'interrupteur du mode développeur lors du démarrage de la machine.
+
+      Si cette règle est désactivée, les appareils enregistrés n'indiquent pas cet état.</translation>
 <translation id="6795485990775913659">Autoriser l'impression sans code uniquement</translation>
 <translation id="6810445994095397827">Bloquer JavaScript sur ces sites</translation>
 <translation id="6813263547126514821">Démarrage et arrêt</translation>
@@ -4429,6 +4495,9 @@
 <translation id="7458437477941640506">Ne rétablissez pas la version cible si elle est antérieure à la version de l'OS. Les mises à jour seront également désactivées.</translation>
 <translation id="7459601923199346224">Configure les règles au niveau de l'utilisateur et de l'appareil dans le cadre de la gestion des certificats.</translation>
 <translation id="7464991223784276288">Limiter les cookies des URL correspondantes à la session en cours</translation>
+<translation id="7468182772656807573">Permet de spécifier la fréquence d'envoi (en millisecondes) des paquets réseau de contrôle. Cette fréquence peut être comprise entre 30 secondes et 24 heures. Toute valeur en dehors de cette plage sera remplacée par la valeur minimale ou maximale la plus proche autorisée.
+
+      Si cette règle n'est pas configurée, la valeur par défaut (trois minutes) est appliquée.</translation>
 <translation id="7469554574977894907">Activer les suggestions de recherche</translation>
 <translation id="747014869399137701">Si cette règle est définie sur "1", les sites Web peuvent afficher des notifications sur le bureau. Si cette règle est définie sur "2", les sites ne sont pas autorisés à afficher ces notifications.
 
@@ -4694,6 +4763,7 @@
           Si elle n'est pas configurée, les raccourcis des fonctionnalités d'accessibilité sont activés par défaut sur l'écran de connexion.</translation>
 <translation id="7777535871204167559">Traiter les appareils de stockage externe en lecture seule</translation>
 <translation id="7788511847830146438">Par profil</translation>
+<translation id="780629758750905699">Autoriser l'ajout de comptes Family Link à l'appareil</translation>
 <translation id="7807139251387225825">Liste des types à exclure de la synchronisation</translation>
 <translation id="7815699949432723208">Cette règle est obsolète (veuillez utiliser la règle <ph name="NATIVE_MESSAGING_ALLOWLIST_POLICY_NAME" /> à la place).
 
@@ -4846,6 +4916,9 @@
       Si vous désactivez ce paramètre, la fonctionnalité de saisie automatique n'est pas accessible aux utilisateurs.
 
       Si vous activez ce paramètre ou ne configurez pas de valeur, la fonctionnalité de saisie automatique peut être contrôlée par les utilisateurs. Ces derniers peuvent ainsi configurer des profils de saisie automatique, et activer ou désactiver la fonctionnalité de saisie automatique à leur guise.</translation>
+<translation id="8036964468882248070">Si cette règle est activée, les appareils enregistrés communiquent les statistiques et identifiants matériels des appareils de stockage.
+
+      Si cette règle est désactivée ou qu'elle n'est pas configurée, les appareils enregistrés ne fournissent pas ces statistiques.</translation>
 <translation id="8044493735196713914">Indiquer le mode de démarrage de l'appareil</translation>
 <translation id="8049769137921877885">Cette règle détermine si les données de la règle et l'heure de récupération de la règle doivent être enregistrées.
 
@@ -4924,6 +4997,9 @@
           Si vous configurez cette règle, les utilisateurs ne peuvent pas la modifier ni l'ignorer.
 
           Si cette règle n'est pas définie, la mise en surbrillance du curseur est désactivée au départ, mais les utilisateurs peuvent l'activer à tout moment.</translation>
+<translation id="8164687848393015214">Si cette règle est activée, les paquets de réseau de contrôle (<ph name="HEARTBEATS_TERM" />) sont transmis au serveur de gestion pour vérifier l'état de connexion et permettre au serveur de détecter si l'appareil est hors connexion.
+
+      Si cette règle est désactivée ou qu'elle n'est pas configurée, aucun paquet n'est transmis.</translation>
 <translation id="816783746144552109">Configurer la version Chrome OS minimale autorisée de l'appareil.</translation>
 <translation id="8171924760436219650">Définir le bouton droit de la souris comme bouton principal sur l'écran de connexion</translation>
 <translation id="8176035528522326671">Autoriser l'utilisateur d'entreprise à participer aux sessions à plusieurs profils en tant qu'utilisateur principal seulement (comportement par défaut pour les utilisateurs gérés par une entreprise)</translation>
@@ -5215,6 +5291,7 @@
 
       Si cette règle est définie sur "False" ou si elle n'est pas configurée, l'utilisateur peut se servir du navigateur sans se connecter à <ph name="PRODUCT_NAME" />.</translation>
 <translation id="858309738002328421">Bloquer l'importation de fichiers volumineux</translation>
+<translation id="8583509234908413302">Autoriser le retour à des versions antérieures des protocoles TLS/DTLS dans WebRTC</translation>
 <translation id="8584279193368801689">Limite le mode d'impression par code. Si cette règle n'est pas définie, aucune limite ne s'applique. Si le mode est indisponible, cette règle est ignorée. Notez que la fonctionnalité d'impression par code n'est activée que pour les imprimantes utilisant l'un des protocoles IPPS, HTTPS, USB ou IPP sur USB.</translation>
 <translation id="8585558195682146109">Envoyer les téléchargements des utilisateurs pour analyse</translation>
 <translation id="8587229956764455752">Autoriser la création de comptes utilisateur</translation>
@@ -5422,6 +5499,9 @@
 
       Les formats d'URL sont semblables à ceux de la règle <ph name="URL_BLOCKLIST_POLICY_NAME" /> décrite sur la page https://www.chromium.org/administrators/url-blacklist-filter-format.
       </translation>
+<translation id="8931555638815157255">Si cette règle est activée ou qu'elle n'est pas configurée, les appareils enregistrés communiquent régulièrement la version de leur système d'exploitation et celle du micrologiciel.
+
+      Si cette règle est désactivée, les appareils enregistrés ne communiquent pas d'informations sur les versions.</translation>
 <translation id="8937282917198525844"> À partir de la version M81, les éléments de contrôle de formulaire (par exemple, &lt;select&gt;, &lt;button&gt;, &lt;input type=date&gt;) ont été actualisés pour améliorer leur accessibilité et l'uniformité de la plate-forme. Cette règle restaure les anciens éléments de contrôle de formulaire (jusqu'à la version M84).
 
       Si cette règle est définie sur "True", les anciens éléments de contrôle de formulaire seront utilisés pour tous les sites.
@@ -5591,6 +5671,9 @@
       Si cette règle n'est pas configurée, la règle <ph name="DEFAULT_PLUGINS_SETTING_POLICY_NAME" /> s'applique pour tous les sites, à condition qu'elle soit définie. Si ce n'est pas le cas, le paramètre spécifié par l'utilisateur s'applique.
 
       Pour en savoir plus sur les formats d'URL valides, veuillez consulter cette page : https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns. Sachez toutefois qu'à partir de la version M85, les formats contenant les caractères génériques "*" et "[*.]" dans l'hôte ne sont plus acceptés pour cette règle.</translation>
+<translation id="9073405975862312795">Si cette règle est activée ou qu'elle n'est pas configurée, les appareils enregistrés communiquent les périodes durant lesquels ils sont utilisés.
+
+      Si cette règle est désactivée, les appareils enregistrés n'enregistrent et ne communiquent pas ces périodes.</translation>
 <translation id="9077227880520270584">Minuteur de connexion automatique au compte local de l'appareil</translation>
 <translation id="9084985621503260744">Indiquer si l'activité vidéo a une incidence sur la gestion de l'alimentation</translation>
 <translation id="9088433379343318874">Activer le fournisseur de contenu de l'utilisateur supervisé</translation>
diff --git a/components/policy/resources/policy_templates_it.xtb b/components/policy/resources/policy_templates_it.xtb
index de7467d6..19a6107 100644
--- a/components/policy/resources/policy_templates_it.xtb
+++ b/components/policy/resources/policy_templates_it.xtb
@@ -152,6 +152,9 @@
       Se questo criterio viene impostato su vero, la funzionalità verrà attivata e gli utenti potranno modificarla.
       Per impostazione predefinita questo criterio è impostato su falso, il che significa che non vengono suggerite emoji e gli utenti non possono ignorarlo.</translation>
 <translation id="1243570869342663665">Controlla il filtro dei contenuti per adulti di SafeSites.</translation>
+<translation id="1247850578871017740">Se il criterio viene impostato su un valore valido, <ph name="PRODUCT_NAME" /> non utilizza versioni SSL/TLS precedenti alla versione specificata. I valori non riconosciuti vengono ignorati.
+
+      Se il criterio non viene configurato, <ph name="PRODUCT_NAME" /> mostra un errore per TLS 1.0 e TLS 1.1, ma l'utente può ignorarlo.</translation>
 <translation id="1252536192437793850">Consenti ai siti di chiedere all'utente di concedere l'accesso a una porta seriale</translation>
 <translation id="1257550411839719984">Imposta directory di download predefinita</translation>
 <translation id="1265053460044691532">Limita il tempo per cui un utente autenticato tramite SAML può eseguire l'accesso offline</translation>
@@ -2319,6 +2322,7 @@
       Se questo criterio non viene impostato, Navigazione sicura sarà attiva in modalità di protezione standard, ma gli utenti potranno modificare questa impostazione.
 
       Visita il sito https://developers.google.com/safe-browsing per ulteriori informazioni sulla funzionalità Navigazione sicura.</translation>
+<translation id="4402887080007986374">La versione valida dei Termini di servizio di Edu Coexistence</translation>
 <translation id="4408428864159735559">Elenco di condivisioni di file di rete preconfigurate.</translation>
 <translation id="4410236409016356088">Attiva la limitazione della larghezza di banda della rete</translation>
 <translation id="441217499641439905">Disattiva Google Drive su reti cellulari nell'app File di <ph name="PRODUCT_OS_NAME" /></translation>
@@ -2501,6 +2505,13 @@
           Per avere pattern di esempio, visita il sito https://www.chromium.org/developers/how-tos/chrome-frame-getting-started.</translation>
 <translation id="467449052039111439">Apri un elenco di URL</translation>
 <translation id="4674871290487541952">Consente algoritmi non protetti nei controlli dell'integrità durante gli aggiornamenti e le installazioni delle estensioni</translation>
+<translation id="4677605038200415894">Se il criterio viene configurato, puoi impostare un elenco di pattern URL che specificano i siti a cui viene concessa automaticamente l'autorizzazione di accesso a un dispositivo USB con gli ID fornitore e prodotto indicati. Affinché il criterio sia valido, ogni elemento dell'elenco deve contenere sia dispositivi sia URL. Ogni elemento nei dispositivi può contenere un campo ID fornitore e un campo ID prodotto. Gli eventuali ID omessi vengono considerati caratteri jolly con un'eccezione: non è possibile specificare un ID prodotto senza specificare anche un ID fornitore. In caso contrario, il criterio non è valido.
+
+      Il modello di autorizzazione USB utilizza l'URL richiedente e l'URL di incorporamento (del sito frame di primo livello) per consentire all'URL richiedente di accedere al dispositivo USB. L'URL richiedente potrebbe essere diverso dall'URL di incorporamento quando il sito richiedente viene caricato in un iframe. Di conseguenza il campo "urls" può contenere fino a 2 stringhe delimitate da virgola per specificare questi URL. Se specifichi un solo URL, l'accesso ai dispositivi USB corrispondenti viene concesso quando l'URL del sito richiedente corrisponde all'URL indicato, a prescindere dallo stato di incorporamento. Gli URL indicati nel campo "urls" devono essere validi, altrimenti il criterio viene ignorato.
+
+      Se il criterio non viene configurato, viene applicato il criterio <ph name="DEFAULT_WEB_USB_GUARD_SETTING_POLICY_NAME" />, se impostato. In caso contrario, viene applicata l'impostazione personale dell'utente.
+
+      I pattern URL di questo criterio non devono essere in conflitto con quelli configurati tramite <ph name="WEB_USB_BLOCKED_FOR_URLS_POLICY_NAME" />. In caso di conflitto, questo criterio ha la precedenza sui criteri <ph name="WEB_USB_BLOCKED_FOR_URLS_POLICY_NAME" /> e <ph name="WEB_USB_ASK_FOR_URLS_POLICY_NAME" />.</translation>
 <translation id="4680936297850947973">Ritirata in M68. Usa DefaultPopupsSetting.
 
       Per una spiegazione completa, consulta la pagina https://www.chromestatus.com/features/5675755719622656.
@@ -3194,6 +3205,8 @@
       Nota: se ci sono più server, separane i nomi utilizzando virgole. I caratteri jolly (<ph name="WILDCARD_VALUE" />) sono consentiti.</translation>
 <translation id="5645779841392247734">Consenti i cookie in questi siti</translation>
 <translation id="5646234199535103501">Criterio di configurazione per il connettore OnBulkDataEntry di Chrome Enterprise</translation>
+<translation id="5652250453612826983">Consente di controllare i criteri relativi alla supervisione dei genitori che vengono applicati soltanto agli account di minori.
+      Questi criteri non sono configurati nella Console di amministrazione, ma direttamente dal server API Kids.</translation>
 <translation id="5656177735561364047">Attiva la funzione Appunti condivisi</translation>
 <translation id="5657576769650058122">Se il criterio viene attivato, la tastiera virtuale (un dispositivo di immissione Chrome OS) rimane attiva sullo schermo. Se il criterio viene disattivato, questa tastiera rimane disabilitata.
 
@@ -3830,6 +3843,21 @@
 <translation id="6628043374475466084">Pattern URL per non eseguire il controllo della presenza di violazioni delle regole relative alla protezione dei dati sensibili nei contenuti caricati</translation>
 <translation id="6628120204569232711">Segnala lo stato di archiviazione</translation>
 <translation id="663685822663765995">Limita la modalità di stampa a colori</translation>
+<translation id="6640989746632867803">Se il criterio viene configurato, gli utenti non possono aggirare le decisioni di sicurezza.
+
+       Se il criterio viene impostato su:
+
+      * Blocca download pericolosi, tutti i download vengono consentiti, ad eccezione di quelli contenenti avvisi di sicurezza.
+
+      * Blocca download potenzialmente pericolosi, tutti i download vengono consentiti, ad eccezione di quelli contenenti avvisi di sicurezza che segnalano la potenziale pericolosità di tali download.
+
+      * Blocca tutti i download, tutti i download vengono bloccati.
+
+      * Blocca download dannosi, tutti i download vengono consentiti, ad eccezione di quelli che secondo la valutazione di sicurezza molto probabilmente sono malware. A differenza dei download pericolosi, questa opzione non prende in considerazione il tipo di file, bensì l'host.
+
+      * Nessuna limitazione speciale, i download sono sottoposti alle normali limitazioni di sicurezza in base ai risultati delle analisi di sicurezza.
+
+      Nota: tali limitazioni vengono applicate ai download attivati dai contenuti delle pagine web, nonché all'opzione del menu "Link di download…" e non al download della pagina attualmente visualizzata né all'opzione di stampa relativa al salvataggio in formato PDF. Leggi ulteriori informazioni sulla funzionalità Navigazione sicura (https://developers.google.com/safe-browsing).</translation>
 <translation id="6641981670621198190">Disattiva supporto per le API grafiche 3D</translation>
 <translation id="6646056064606561298">Consente di attivare la norma di gestione dell'energia relativa all'avvio tramite CA.
 
@@ -5512,6 +5540,13 @@
 <translation id="8942616385591203339">Questa norma consente di controllare se il consenso alla sincronizzazione può essere mostrato all'utente durante il primo accesso. Dovrebbe essere impostata su false se tale consenso non è mai necessario per l'utente.
       Se impostata su false, il consenso alla sincronizzazione non verrà visualizzato.
       Se impostata su true o non viene impostata, il consenso alla sincronizzazione può essere visualizzato.</translation>
+<translation id="8943744188513019866">Questo criterio indica la versione corrente valida dei Termini di servizio di Edu Coexistence,
+      che viene confrontata con l'ultima versione accettata dal genitore e utilizzata per suggerire al genitore stesso il rinnovo dell'autorizzazione quando necessario.
+
+      Se questo criterio viene configurato, la versione dei Termini di servizio può essere convalidata.
+      Se questo criterio non viene configurato, non è possibile verificare la validità dei Termini di servizio di Edu Coexistence.
+
+      Questo criterio viene utilizzato unicamente per gli utenti di Family Link.</translation>
 <translation id="8943934315109955032">Non verificare eventuali violazioni delle regole relative alla protezione dei dati sensibili</translation>
 <translation id="8947415621777543415">Segnala posizione del dispositivo</translation>
 <translation id="8948062138228904066">Lista consentita di server di autenticazione</translation>
diff --git a/components/policy/resources/policy_templates_nl.xtb b/components/policy/resources/policy_templates_nl.xtb
index 6b09d4c..1b2619e 100644
--- a/components/policy/resources/policy_templates_nl.xtb
+++ b/components/policy/resources/policy_templates_nl.xtb
@@ -627,6 +627,9 @@
           </translation>
 <translation id="2030905906517501646">Zoekwoord voor standaardzoekprovider</translation>
 <translation id="203096360153626918">Dit beleid is niet van invloed op de Android-apps. Deze hebben toegang tot de modus voor volledig scherm, zelfs als dit beleid is ingesteld op <ph name="FALSE" /> (Onwaar).</translation>
+<translation id="2037214548071298156">Als je het beleid inschakelt of niet instelt, rapporteren ingeschreven apparaten hardwarestatistieken, zoals het CPU/RAM-gebruik.
+
+      Als je het beleid uitschakelt, rapporteren ingeschreven apparaten de hardwarestatistieken niet.</translation>
 <translation id="2040479044912658454">Modus voor afdrukrastering</translation>
 <translation id="2043749682619281558">De cursormarkering op het inlogscherm inschakelen</translation>
 <translation id="2043770014371753404">Bedrijfsprinters uitgeschakeld</translation>
@@ -961,7 +964,11 @@
       Als deze optie is ingeschakeld en er ongewenste software door Chrome Cleanup wordt gedetecteerd, worden er mogelijk metadata over de scan naar Google gestuurd, volgens het beleid dat is ingesteld met SafeBrowsingExtendedReportingEnabled. Chrome Cleanup vraagt de gebruiker of deze de ongewenste software wil opschonen.  De resultaten van de opschoonbewerking worden gemeld aan Google en de gebruiker beschikt niet over de optie om dit te voorkomen.
 
       In <ph name="MS_WIN_NAME" /> is deze functionaliteit alleen beschikbaar voor instanties die zijn gekoppeld aan een <ph name="MS_AD_NAME" />-domein, worden uitgevoerd in Windows 10 Pro of zijn ingeschreven voor 'Cloudbeheer voor de Chrome-browser'.</translation>
+<translation id="2448315169529769573">Als je het beleid inschakelt, rapporteert <ph name="PRODUCT_OS_NAME" /> gebruiksstatistieken en diagnostische gegevens, waaronder crashrapporten, aan Google. Als je het beleid uitschakelt, worden er geen statistieken en diagnostische gegevens gerapporteerd.
+
+       Als je het beleid niet instelt, worden er geen statistieken en diagnostische gegevens gerapporteerd voor onbeheerde apparaten, maar wel voor beheerde apparaten.</translation>
 <translation id="2454228136871844693">Optimaliseren voor stabiliteit.</translation>
+<translation id="2456629156652006573">Alleen privé</translation>
 <translation id="2463034609187171371">DHE-coderingssuites inschakelen in TLS</translation>
 <translation id="2463365186486772703">Landinstelling voor applicatie</translation>
 <translation id="2463832514638083341">Met dit beleid wordt bepaald hoelang (in dagen) de metadata van afdruktaken worden opgeslagen op het apparaat.
@@ -1132,9 +1139,16 @@
       Dit beleid is verwijderd in M77.
       Dit beleid is van toepassing op het inlogscherm. Raadpleeg ook het beleid <ph name="SITE_PER_PROCESS_POLICY_NAME" /> dat van toepassing is op de gebruikerssessie. Het wordt aangeraden beide beleidsregels op dezelfde waarde in te stellen. Als de waarden niet overeenkomen, kan er bij het starten van een gebruikerssessie terwijl de door het gebruikersbeleid gespecificeerde waarde wordt toegepast, een vertraging optreden.
       </translation>
+<translation id="2702023190395322609">Media-aanbevelingen inschakelen</translation>
 <translation id="2706708761587205154">Afdrukken alleen toestaan met pincode</translation>
 <translation id="2707873794476722903">Safe Browsing is actief in de standaardmodus.</translation>
 <translation id="2710534340210290498">Als dit beleid wordt ingesteld op 'false', kunnen gebruikers het scherm niet vergrendelen (alleen uitloggen van de gebruikerssessie is mogelijk). Als deze instelling is ingesteld op 'true' of niet is ingesteld, kunnen gebruikers die verificatie met een wachtwoord hebben uitgevoerd het scherm vergrendelen.</translation>
+<translation id="2716623398185506073">Als je het beleid inschakelt, rapporteren ingeschreven apparaten hardwarestatistieken en ID's met betrekking tot de stroomstatus.
+
+      Als je dit beleid uitschakelt of niet instelt, rapporteren ingeschreven apparaten geen statistieken met betrekking tot de stroomstatus.</translation>
+<translation id="2725855586003209701">Als je het beleid inschakelt of niet instelt, rapporteren ingeschreven apparaten de lijst met apparaatgebruikers die onlangs zijn ingelogd.
+
+      Als je het beleid uitschakelt, rapporteren ingeschreven apparaten de lijst met gebruikers niet.</translation>
 <translation id="2731627323327011390">Gebruik van certificaten van <ph name="PRODUCT_OS_NAME" /> voor ARC-apps uitschakelen</translation>
 <translation id="2742843273354638707">De app en voettekstlink voor de Chrome Web Store verbergen op de pagina 'Nieuw tabblad' en in de App Launcher van <ph name="PRODUCT_OS_NAME" />.
 
@@ -1254,6 +1268,17 @@
 
       Als dit beleid niet is ingesteld, wordt er niet gefilterd en wordt er rekening gehouden met alle afdrukservers.</translation>
 <translation id="2877225735001246144">CNAME-lookup uitschakelen bij het verwerken van Kerberos-authenticatie</translation>
+<translation id="2886215882246310669">Bepaalt of <ph name="PRODUCT_OS_NAME" /> toestaat dat er nieuwe Family Link-gebruikersaccounts worden toegevoegd aan het apparaat.
+      Dit beleid is alleen nuttig in combinatie met <ph name="DEVICE_USER_ALLOWLIST_POLICY_NAME" />. Met dit beleid worden ook andere Family Link-accounts toegestaan dan de accounts die zijn gedefinieerd in de toelatingslijst.
+      Dit beleid heeft geen effect op andere beleidsregels voor inloggen Het beleid heeft met name geen effect wanneer:
+      - Het toevoegen van nieuwe gebruikers aan het apparaat is uitgeschakeld met het beleid <ph name="DEVICE_ALLOW_NEW_USERS_POLICY_NAME" />.
+      - Het toevoegen van alle gebruikers is toegestaan met het beleid <ph name="DEVICE_USER_ALLOWLIST_POLICY_NAME" />.
+
+      Als dit beleid is ingesteld op False (of niet is ingesteld), worden er geen aanvullende regels toegepast op Family Link-accounts.
+      Als dit beleid is ingesteld op True, zijn er naast de accounts die zijn gedefinieerd in <ph name="DEVICE_USER_ALLOWLIST_POLICY_NAME" /> ook nieuwe Family Link-gebruikersaccounts toegestaan.</translation>
+<translation id="2886969306951284125">Als Android-apps zijn ingeschakeld en je het beleid instelt op True, rapporteren ingeschreven apparaten Android-statusinformatie.
+
+      Als je het beleid uitschakelt of niet instelt, rapporteren ingeschreven apparaten de Android-statusinformatie niet.</translation>
 <translation id="2890645751406497668">Automatisch rechten verlenen aan deze sites om verbinding te maken met USB-apparaten met de opgegeven leveranciers- en product-ID's.</translation>
 <translation id="2892414556511568464">Hiermee beperk je afdrukken in de duplexmodus. Als er geen beleid is ingesteld of de instelling leeg is, gelden er geen beperkingen.</translation>
 <translation id="2893546967669465276">Systeemlogboeken naar de beheerserver verzenden</translation>
@@ -1276,6 +1301,10 @@
 <translation id="2905984450136807296">Levensduur van verificatiegegevens in cachegeheugen</translation>
 <translation id="2906874737073861391">Lijst met app-pakketextensies</translation>
 <translation id="2908277604670530363">Maximaal aantal gelijktijdige verbindingen met de proxyserver</translation>
+<translation id="2919544577647246857">Definieert de lijst met gebruikers die toestemming hebben om op het apparaat in te loggen. De invoer heeft de vorm <ph name="USER_ALLOWLIST_ENTRY_FORMAT" />, zoals <ph name="USER_WHITELIST_ENTRY_EXAMPLE" />. Als je willekeurige gebruikers toegang wilt geven tot een domein, gebruik je invoer in de vorm <ph name="USER_ALLOWLIST_ENTRY_WILDCARD" />.
+
+      Als dit beleid niet is geconfigureerd, zijn er geen beperkingen voor welke gebruikers mogen inloggen. Als je nieuwe gebruikers wilt maken, moet het beleid <ph name="DEVICE_ALLOW_NEW_USERS_POLICY_NAME" /> correct zijn ingesteld.
+      Als <ph name="DEVICE_FAMILY_LINK_ACCOUNTS_ALLOWED_POLICY_NAME" /> niet is ingesteld, zijn extra Family Link-gebruikers toegestaan voor de accounts die in dit beleid zijn gedefinieerd.</translation>
 <translation id="2921222258441684334">Als je het beleid instelt op 1, kunnen sites de fysieke locatie van gebruikers standaard bijhouden. Als je het beleid instelt op 2, wordt het bijhouden van de fysieke locatie van gebruikers standaard geblokkeerd. Je kunt het beleid zo instellen dat om goedkeuring wordt gevraagd als een site de fysieke locatie van gebruikers wil bijhouden.
 
       Als je het beleid niet instelt, is het beleid <ph name="ASK_GEOLOCATION_POLICY_NAME" /> van toepassing maar kunnen gebruikers deze instelling wijzigen.</translation>
@@ -1491,6 +1520,7 @@
       Als je het beleid niet instelt, is de standaardwaarde 0 graden en kunnen gebruikers dit wijzigen. In dat geval wordt de standaardwaarde niet opnieuw toegepast bij opnieuw opstarten.</translation>
 <translation id="3264793472749429012">Coderingen voor standaardzoekprovider</translation>
 <translation id="3273221114520206906">Standaardinstelling voor JavaScript</translation>
+<translation id="328347261792478720">De browser geeft standaard media-aanbevelingen weer die zijn gepersonaliseerd voor de gebruiker. Als je dit beleid uitschakelt, worden deze aanbevelingen niet weergegeven aan de gebruiker. Als je dit beleid inschakelt of niet instelt, worden de media-aanbevelingen weergegeven aan de gebruiker.</translation>
 <translation id="3284094172359247914">Gebruik van de WebUSB API beheren</translation>
 <translation id="3288595667065905535">Releasekanaal</translation>
 <translation id="3292147213643666827">Met deze instelling kan <ph name="PRODUCT_NAME" /> als proxy worden ingesteld tussen <ph name="CLOUD_PRINT_NAME" /> en printers die zijn aangesloten op het apparaat.
@@ -1507,6 +1537,9 @@
       Dit beleid wordt verwijderd in Chrome 88.
 
       Zie https://www.chromestatus.com/feature/4664843055398912 .</translation>
+<translation id="3302829897293005699">Als je het beleid inschakelt of niet instelt, rapporteren ingeschreven apparaten informatie over de actieve kiosksessies, zoals de app-ID en -versie.
+
+      Als je het beleid uitschakelt, rapporteren ingeschreven apparaten geen informatie over kiosksessies.</translation>
 <translation id="3303911765031636277">Configuratiebeleid voor de Chrome Enterprise-connector OnFileAttached</translation>
 <translation id="3304662785258434098">Hiermee kun je instellen of gebruikers uitzonderingen kunnen toevoegen om gecombineerde content toe te staan voor specifieke sites.
 
@@ -1537,6 +1570,10 @@
 <translation id="3345682490796432751">Als je het beleid inschakelt, worden verouderde plug-ins gebruikt als normale plug-ins. Als je het beleid uitschakelt, worden verouderde plug-ins niet gebruikt.
 
       Als je het beleid niet instelt, wordt de gebruikers toestemming gevraagd om verouderde plug-ins uit te voeren.</translation>
+<translation id="3348799281602260763">Als het beleid is ingeschakeld, kunnen WebRTC-peerverbindingen worden gedowngraded naar verouderde versies van de TLS/DTLS-protocollen (DTLS 1.0, TLS 1.0 en TLS 1.1).
+      Als dit beleid is uitgeschakeld of niet is ingesteld, worden deze TLS/DTLS-versies uitgeschakeld.
+
+      Dit beleid is tijdelijk en wordt verwijderd in een toekomstige versie van <ph name="PRODUCT_NAME" />.</translation>
 <translation id="3356657927302977341">Configureert of <ph name="PRODUCT_NAME" /> op Linux native meldingen gebruikt.
 
 Als dit beleid is ingesteld op True of niet is ingesteld, mag <ph name="PRODUCT_NAME" /> native meldingen gebruiken.
@@ -1817,6 +1854,9 @@
 <translation id="3709266154059827597">Zwarte lijst voor het installeren van extensies configureren</translation>
 <translation id="3711895659073496551">Onderbreken</translation>
 <translation id="3715569262675717862">Verificatie op basis van clientcertificaten</translation>
+<translation id="3727675072430693164">Als je het beleid inschakelt, rapporteren ingeschreven apparaten hardwarestatistieken voor SoC-componenten.
+
+      Als je het beleid uitschakelt of niet instelt, rapporteren ingeschreven apparaten de statistieken niet.</translation>
 <translation id="3736879847913515635">'Persoon toevoegen' inschakelen in gebruikersbeheer</translation>
 <translation id="3737890474637805114">Grote bestandsdownloads blokkeren</translation>
 <translation id="3748900290998155147">Geeft aan of wake locks zijn toegestaan. Wake locks kunnen door extensies worden aangevraagd via de API voor de stroombeheerextensie en door ARC-apps.
@@ -1828,6 +1868,9 @@
 <translation id="375266612405883748">Hiermee wordt het UDP-poortbereik beperkt dat wordt gebruikt door de host voor externe toegang op dit apparaat.
 
           Als dit beleid niet is ingesteld, of als het is ingesteld op een lege reeks, heeft de host voor externe toegang toestemming om elke beschikbare poort te gebruiken, tenzij het beleid <ph name="REMOTE_ACCESS_HOST_FIREWALL_TRAVERSAL_POLICY_NAME" /> is uitgeschakeld. In dat geval gebruikt de host voor externe toegang UDP-poorten binnen het bereik 12400-12409.</translation>
+<translation id="3755237588083934849">Met dit beleid bepaal je hoe vaak (in milliseconden) apparaatstatusuploads moeten worden gestuurd. Het toegestane minimum is 60 seconden.
+
+      Als dit beleid niet is ingesteld, wordt het standaardinterval van 3 uur toegepast.</translation>
 <translation id="3756011779061588474">Ontwikkelaarsmodus blokkeren</translation>
 <translation id="3758089716224084329">Hiermee kun je de proxyserver specificeren die door <ph name="PRODUCT_NAME" /> wordt gebruikt en wordt voorkomen dat gebruikers proxyinstellingen kunnen aanpassen.
 
@@ -2868,6 +2911,9 @@
 
       Als het beleid niet is ingesteld in versies tot en met M76, kan <ph name="PRODUCT_NAME" /> deze logboeken standaard niet verzamelen en uploaden. Vanaf M77 kan <ph name="PRODUCT_NAME" /> deze logboeken standaard verzamelen en uploaden vanuit de meeste profielen waarop cloudgebaseerde bedrijfsbeleidsregels op gebruikersniveau van toepassing zijn. Vanaf M77 tot en met M80 kan <ph name="PRODUCT_NAME" /> deze logboeken ook standaard verzamelen en uploaden vanuit profielen waarop <ph name="PRODUCT_NAME" />-beheer op locatie van toepassing is.</translation>
 <translation id="5331746669335642668"><ph name="PRODUCT_NAME" />-cloudbeleid krijgt voorrang op het platformbeleid.</translation>
+<translation id="5340105431123046323">Als je het beleid inschakelt of niet instelt, rapporteren ingeschreven apparaten de lijst met netwerkinterfaces, met zowel het type als het hardwareadres.
+
+      Als je het beleid uitschakelt, rapporteren ingeschreven apparaten de netwerkinterface niet.</translation>
 <translation id="5346587320074666194">Toegang tot sensoren op deze sites blokkeren</translation>
 <translation id="5362531528507578966">Hiermee wordt de standaardmodus voor afdrukken met achtergrondbeelden overschreven.</translation>
 <translation id="5365476955714838841">Opdrachtregelparameters voor de alternatieve browser.</translation>
@@ -3258,6 +3304,9 @@
       Elk item in deze lijst is een patroon van een extensie (zie https://developer.chrome.com/extensions/match_patterns). Gebruikers kunnen gemakkelijk items installeren vanaf elke URL die overeenkomt met een item in deze lijst. De locatie van het *.crx-bestand en de pagina waar de download wordt gestart (de verwijzer genoemd), moeten beide zijn toegestaan op basis van deze patronen.
 
       <ph name="EXTENSION_INSTALL_BLOCKLIST_POLICY_NAME" /> krijgt voorrang boven dit beleid. Dat betekent dat een extensie op de blokkeringslijst niet wordt geïnstalleerd, zelfs niet als dit gebeurt vanaf een site op deze lijst.</translation>
+<translation id="5860010874344790473">Als je het beleid inschakelt, worden er systeemlogboeken naar de beheerserver gestuurd, zodat beheerders de systeemlogboeken kunnen controleren.
+
+      Als je het beleid uitschakelt of niet instelt, worden er geen systeemlogboeken gerapporteerd.</translation>
 <translation id="5861856285460256766">Configuratie van toegangscode voor ouders</translation>
 <translation id="5868414965372171132">Netwerkconfiguratie op gebruikersniveau</translation>
 <translation id="587242272905978723">Sta <ph name="PLUGIN_VM_NAME" /> toe om gebruiksgegevens van <ph name="PLUGIN_VM_NAME" /> te verzamelen.
@@ -3755,6 +3804,17 @@
       Als het beleid is ingesteld op True, kan het apparaat Powerwash activeren.
       Als het beleid niet is ingesteld, is het standaard ingesteld op True, wat betekent dat het apparaat Powerwash kan activeren.
       </translation>
+<translation id="6614020900120353107">Hiermee bepaal je of de ingebouwde DNS-client wordt gebruikt in <ph name="PRODUCT_NAME" />.
+
+      Dit is niet van invloed op welke DNS-servers worden gebruikt, maar alleen op de softwarestack die wordt gebruikt om met de servers te communiceren. Als het besturingssysteem bijvoorbeeld is geconfigureerd om een zakelijke DNS-server te gebruiken, wordt dezelfde server gebruikt door de ingebouwde DNS-client. Het is mogelijk dat de ingebouwde DNS-client servers op andere manieren aanspreekt via modernere DNS-protocollen, zoals DNS-over-TLS.
+
+      Dit beleid is niet van invloed op DNS-over-HTTPS. Zie het beleid <ph name="DNS_OVER_HTTPS_MODE_POLICY_NAME" /> om dat gedrag te wijzigen.
+
+      Als dit beleid is ingesteld op True, wordt de ingebouwde DNS-client gebruikt (indien beschikbaar).
+
+      Als dit beleid is ingesteld op False, wordt de ingebouwde DNS-client nooit gebruikt.
+
+      Als dit beleid niet wordt ingesteld, wordt de ingebouwde DNS-client standaard ingeschakeld op macOS, Android (als Privé-DNS en VPN niet zijn ingeschakeld) en Chrome OS en kunnen de gebruikers bepalen of de ingebouwde DNS-client wordt gebruikt door chrome://flags te bewerken of door een opdrachtregelmarkering op te geven.</translation>
 <translation id="6621839881150363218">Als je dit beleid inschakelt, worden alle sites geïsoleerd (elke site wordt in een eigen proces uitgevoerd). Als je het beleid uitschakelt, vindt er geen expliciete site-isolatie plaats en worden praktijktests van IsolateOriginsAndroid en SitePerProcessAndroid uitgeschakeld. Gebruikers kunnen het beleid nog wel steeds handmatig inschakelen.
 
       Als je het beleid niet instelt, kunnen gebruikers deze instelling wijzigen.
@@ -3891,6 +3951,9 @@
       Als dit beleid niet is ingesteld op een beheerd apparaat, kan het apparaat geen virtuele machines uitvoeren. Niet-beheerde apparaten kunnen virtuele machines uitvoeren.</translation>
 <translation id="6786747875388722282">Extensies</translation>
 <translation id="6786967369487349613">De map voor roaming-profielen instellen</translation>
+<translation id="6789422336869764846">Als je het beleid inschakelt of niet instelt, rapporteren ingeschreven apparaten de status van de schakelaar voor de ontwikkelaarsmodus toen de computer werd opgestart.
+
+      Als je het beleid uitschakelt, rapporteren ingeschreven apparaten de status van de schakelaar voor de ontwikkelaarsmodus niet.</translation>
 <translation id="6795485990775913659">Alleen afdrukken toestaan zonder pincode</translation>
 <translation id="6810445994095397827">JavaScript blokkeren op deze sites</translation>
 <translation id="6813263547126514821">Energiebeheer en uitschakelen</translation>
@@ -4435,6 +4498,9 @@
 <translation id="7458437477941640506">Herstel de doelversie niet als de OS-versie nieuwer is dan de doelversie. Updates zijn ook uitgeschakeld.</translation>
 <translation id="7459601923199346224">Beheert het gebruikers- en apparaatbeleid voor certificaatbeheer.</translation>
 <translation id="7464991223784276288">Cookies van overeenkomende URL's beperken tot de huidige sessie</translation>
+<translation id="7468182772656807573">Als je dit beleid instelt, geef je aan hoe vaak (in milliseconden) netwerkpakketten voor controle moeten worden gestuurd. De intervallen variëren van 30 seconden tot 24 uur. Waarden buiten dit bereik worden aangepast aan dit bereik.
+
+      Als er geen interval is ingesteld, wordt het standaardinterval van 3 minuten toegepast.</translation>
 <translation id="7469554574977894907">Zoeksuggesties inschakelen</translation>
 <translation id="747014869399137701">Als je het beleid instelt op 1, kunnen websites bureaubladmeldingen weergeven. Als je het beleid instelt op 2, worden bureaubladmeldingen geblokkeerd.
 
@@ -4698,6 +4764,7 @@
           Als dit beleid niet is ingesteld, zijn snelkoppelingen voor toegankelijkheidsfuncties standaard ingeschakeld op het inlogscherm.</translation>
 <translation id="7777535871204167559">Externe opslagapparaten behandelen als alleen-lezen</translation>
 <translation id="7788511847830146438">Per profiel</translation>
+<translation id="780629758750905699">Toevoegen van Family Link-accounts aan het apparaat toestaan</translation>
 <translation id="7807139251387225825">Lijst met typen die moeten worden uitgesloten van synchronisatie</translation>
 <translation id="7815699949432723208">Dit beleid is beëindigd. Gebruik in plaats daarvan het beleid '<ph name="NATIVE_MESSAGING_ALLOWLIST_POLICY_NAME" />'.
 
@@ -4850,6 +4917,9 @@
       Als je deze instelling uitschakelt, kunnen gebruikers de functie 'Automatisch invullen' niet gebruiken.
 
       Als je de instelling inschakelt of geen waarde instelt, kunnen gebruikers de opties voor 'Automatisch invullen' zelf beheren. Zo kunnen ze profielen voor 'Automatisch invullen' configureren en de functie naar wens in- of uitschakelen.</translation>
+<translation id="8036964468882248070">Als je dit beleid inschakelt, rapporteren ingeschreven apparaten hardwarestatistieken en ID's voor opslagapparaten.
+
+      Als je het beleid uitschakelt of niet instelt, rapporteren ingeschreven apparaten geen opslagstatistieken.</translation>
 <translation id="8044493735196713914">Opstartmodus van apparaat melden</translation>
 <translation id="8049769137921877885">Met dit beleid wordt bepaald of beleidsgegevens en het tijdstip van de beleidsfetch worden gerapporteerd.
 
@@ -4927,6 +4997,9 @@
           Als je dit beleid instelt, kunnen gebruikers het niet wijzigen of overschrijven.
 
           Als dit beleid niet is ingesteld, is de functie voor cursormarkering in eerste instantie uitgeschakeld, maar kan de gebruiker deze op elk gewenst moment inschakelen.</translation>
+<translation id="8164687848393015214">Als je het beleid inschakelt, worden netwerkpakketten voor controle (<ph name="HEARTBEATS_TERM" />) naar de beheerserver gestuurd, zodat de server kan waarnemen of het apparaat offline is.
+
+      Als je het beleid uitschakelt of niet instelt, worden er geen pakketten gestuurd.</translation>
 <translation id="816783746144552109">Configureer de minimaal toegestane Chrome OS-versie voor het apparaat.</translation>
 <translation id="8171924760436219650">De rechtermuisknop instellen als de primaire muisknop op het inlogscherm</translation>
 <translation id="8176035528522326671">Toestaan dat Enterprise-gebruiker alleen primair gebruiker van meerdere profielen is (standaardgedrag voor beheerde Enterprise-gebruikers)</translation>
@@ -5217,6 +5290,7 @@
 
       Als dit beleid is ingesteld op 'False' of niet is geconfigureerd, kan de gebruiker de browser gebruiken zonder in te loggen bij <ph name="PRODUCT_NAME" />.</translation>
 <translation id="858309738002328421">Grote bestandsuploads blokkeren</translation>
+<translation id="8583509234908413302">Downgraden van verouderde TLS/DTLS toestaan in WebRTC</translation>
 <translation id="8584279193368801689">Beperkt de modus voor afdrukken met pincode. Als het beleid niet is ingesteld, gelden er geen beperkingen. Als de modus niet beschikbaar is, wordt dit beleid genegeerd. Houd er rekening mee dat de functie voor afdrukken met pincode alleen is ingeschakeld voor printers die het protocol IPPS, HTTPS, USB of IPP-over-USB gebruiken.</translation>
 <translation id="8585558195682146109">Gebruikersdownloads sturen om te laten scannen</translation>
 <translation id="8587229956764455752">Het maken van nieuwe gebruikersaccounts toestaan</translation>
@@ -5424,6 +5498,9 @@
 
       De URL-patronen hebben dezelfde indeling als het beleid '<ph name="URL_BLOCKLIST_POLICY_NAME" />', dat wordt beschreven op https://www.chromium.org/administrators/url-blacklist-filter-format.
       </translation>
+<translation id="8931555638815157255">Als je dit beleid inschakelt of niet instelt, rapporteren ingeschreven apparaten periodiek hun OS- en firmwareversie.
+
+      Als je het beleid uitschakelt, rapporteren ingeschreven apparaten de versiegegevens niet.</translation>
 <translation id="8937282917198525844"> Vanaf M81 hebben de standaard formulierbesturingselementen (bijv. &lt;select&gt;, &lt;button&gt;, &lt;input type=date&gt;) een nieuw uiterlijk met verbeterde toegankelijkheid en betere platformuniformiteit. Met dit beleid worden de 'verouderde' formulierbesturingselementen hersteld tot M84.
 
       Als dit beleid is ingesteld op True, worden de 'verouderde' formulierbesturingselementen gebruikt voor alle sites.
@@ -5602,6 +5679,9 @@
       Als je het beleid niet instelt, is <ph name="DEFAULT_PLUGINS_SETTING_POLICY_NAME" />, indien ingesteld, van toepassing op alle sites. Zo niet, dan gelden de persoonlijke instellingen van de gebruiker.
 
       Ga naar https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns voor gedetailleerde informatie over geldige URL-patronen. Vanaf M85 worden patronen met de jokertekens '*' en '[*.]' in de host niet meer ondersteund voor dit beleid.</translation>
+<translation id="9073405975862312795">Als je het beleid inschakelt of niet instelt, rapporteren ingeschreven apparaten de perioden dat een gebruiker actief is op het apparaat.
+
+      Als je het beleid uitschakelt, registreren of rapporteren ingeschreven apparaten geen activiteitstijden.</translation>
 <translation id="9077227880520270584">Timer voor automatisch inloggen op lokaal account op apparaat</translation>
 <translation id="9084985621503260744">Specificeer of videoactiviteit invloed heeft op stroombeheer</translation>
 <translation id="9088433379343318874">Contentprovider voor de gebruiker met beperkte rechten inschakelen</translation>
diff --git a/components/policy/resources/policy_templates_pt-BR.xtb b/components/policy/resources/policy_templates_pt-BR.xtb
index 0da0f5d..268c36e0 100644
--- a/components/policy/resources/policy_templates_pt-BR.xtb
+++ b/components/policy/resources/policy_templates_pt-BR.xtb
@@ -148,6 +148,9 @@
       Se ela for definida como verdadeira, o recurso será ativado e os usuários poderão mudá-lo.
       Por padrão, esta política é definida como falsa. Nenhum emoji será sugerido, e o usuário não poderá modificar isso.</translation>
 <translation id="1243570869342663665">Controlar a filtragem de conteúdo adulto SafeSites.</translation>
+<translation id="1247850578871017740">Se a política for definida com um valor válido, o <ph name="PRODUCT_NAME" /> não usará versões SSL/TLS anteriores à versão especificada. Valores não reconhecidos serão ignorados.
+
+      Se esta política não for definida, o <ph name="PRODUCT_NAME" /> exibirá uma mensagem de erro para TLS 1.0 e TLS 1.1, mas o usuário poderá ignorá-la.</translation>
 <translation id="1252536192437793850">Permitir que os sites peçam ao usuário para conceder acesso a uma porta serial</translation>
 <translation id="1257550411839719984">Definir diretório de download padrão</translation>
 <translation id="1265053460044691532">Limite o tempo pelo qual um usuário autenticado via SAML pode fazer login off-line</translation>
@@ -630,6 +633,9 @@
           </translation>
 <translation id="2030905906517501646">Palavra-chave do provedor de pesquisa padrão</translation>
 <translation id="203096360153626918">Esta política não tem nenhum efeito sobre os apps Android. Eles poderão entrar no modo tela cheia mesmo se a política estiver definida como <ph name="FALSE" />.</translation>
+<translation id="2037214548071298156">Se a política for definida como "Ativada" ou não for definida, as estatísticas de hardware, como uso da CPU/RAM, serão informadas pelos dispositivos registrados.
+
+      Se a política for definida como "Desativada", as estatísticas de hardware não serão informadas pelos dispositivos registrados.</translation>
 <translation id="2040479044912658454">Modo de varredura de impressão</translation>
 <translation id="2043749682619281558">Ativa o destaque de cursor na tela de login</translation>
 <translation id="2043770014371753404">Impressoras empresariais desativadas</translation>
@@ -964,7 +970,11 @@
       Se estiver ativada e o recurso Varredura do Chrome detectar um software indesejado, os metadados sobre a verificação poderão ser enviados ao Google, de acordo com a política definida por SafeBrowsingExtendedReportingEnabled. Será perguntado ao usuário se ele quer limpar o software indesejado na Varredura do Chrome.  Os resultados da limpeza serão enviados ao Google, e o usuário não terá a opção de impedir esse envio.
 
       No <ph name="MS_WIN_NAME" />, essa funcionalidade está disponível apenas em instâncias associadas a um domínio do <ph name="MS_AD_NAME" />, executado no Windows 10 Pro, ou está registrada no Gerenciamento de nuvem do navegador Chrome.</translation>
+<translation id="2448315169529769573">Se a política for definida como "Ativada", o <ph name="PRODUCT_OS_NAME" /> informará métricas de uso e dados de diagnóstico, incluindo relatórios de erros, para o Google. Se a política for definida como "Desativada", as informações de métrica e dados de diagnóstico serão desativados.
+
+       Se a política não for definida, as informações de métrica e dados de diagnóstico ficarão desativados nos dispositivos não gerenciados e ativados nos dispositivos gerenciados.</translation>
 <translation id="2454228136871844693">Otimiza a estabilidade.</translation>
+<translation id="2456629156652006573">Somente privado</translation>
 <translation id="2463034609187171371">Ativar pacotes de criptografia DHE em TLS</translation>
 <translation id="2463365186486772703">Localidade do aplicativo</translation>
 <translation id="2463832514638083341">Esta política controla a duração, em dias, do armazenamento de metadados de trabalhos de impressão no dispositivo.
@@ -1135,9 +1145,16 @@
       Esta política foi removida na versão M77.
       Ela se aplica à tela de login. Consulte também a política <ph name="SITE_PER_PROCESS_POLICY_NAME" />, que se aplica à sessão do usuário. É recomendado definir as duas com o mesmo valor. Se os valores não forem iguais, poderá haver um atraso ao entrar em uma sessão enquanto o valor especificado pela política do usuário estiver sendo aplicado.
       </translation>
+<translation id="2702023190395322609">Ativar recomendações de mídia</translation>
 <translation id="2706708761587205154">Permitir impressão apenas com PIN</translation>
 <translation id="2707873794476722903">O "Navegação segura" está ativo no modo padrão.</translation>
 <translation id="2710534340210290498">Se esta política for definida como falsa, os usuários não conseguirão bloquear a tela, apenas sair da sessão do usuário. Se esta política for definida como verdadeira ou não for definida, os usuários que tiverem feito a autenticação com uma senha poderão bloquear a tela.</translation>
+<translation id="2716623398185506073">Se a política for definida como "Ativada", as estatísticas de hardware e os identificadores relacionados à energia dos dispositivos registrados serão informados.
+
+      Se a política for definida como "Desativada" ou não for definida, as estatísticas de energia dos dispositivos registrados não serão informadas.</translation>
+<translation id="2725855586003209701">Se a política for definida como "Ativada" ou não for definida, os dispositivos registrados informarão a lista de usuários que fizeram login recentemente.
+
+      Se a política for definida como "Desativada", os dispositivos registrados não informarão a lista de usuários.</translation>
 <translation id="2731627323327011390">Desativar o uso de certificados do <ph name="PRODUCT_OS_NAME" /> para apps Arc</translation>
 <translation id="2742843273354638707">Oculta o link do aplicativo e do rodapé da Chrome Web Store na página "Nova guia" e no iniciador de aplicativos do <ph name="PRODUCT_OS_NAME" />.
 
@@ -1257,6 +1274,17 @@
 
       Se esta política não for definida, a filtragem será omitida, e todos os servidores de impressão serão considerados.</translation>
 <translation id="2877225735001246144">Desativar consulta CNAME ao negociar a autenticação do Kerberos</translation>
+<translation id="2886215882246310669">Controla se o <ph name="PRODUCT_OS_NAME" /> permite que novas contas de usuário do Family Link sejam adicionadas ao dispositivo.
+      Esta política só será usada junto com <ph name="DEVICE_USER_ALLOWLIST_POLICY_NAME" />. Ela permite mais contas do Family Link, além daquelas definidas na lista de permissões.
+      Esta política não afeta o comportamento de outras políticas de login. Ela não terá nenhum efeito quando:
+      - a adição de novos usuários ao dispositivo estiver desativada com a política <ph name="DEVICE_ALLOW_NEW_USERS_POLICY_NAME" />;
+      - a adição de todos os usuários for permitida com a política <ph name="DEVICE_USER_ALLOWLIST_POLICY_NAME" />.
+
+      Se a política for definida como falsa ou não for configurada, nenhuma regra adicional será aplicada às contas do Family Link.
+      Se a política for definida como verdadeira, novas contas de usuário do Family Link serão permitidas além daquelas definidas em <ph name="DEVICE_USER_ALLOWLIST_POLICY_NAME" />.</translation>
+<translation id="2886969306951284125">Se apps Android estiverem ativados e a política for definida como verdadeira, as informações de status do Android serão informadas pelos dispositivos registrados.
+
+      Se a política for definida como "Desativada" ou não for definida, as informações de status do Android não serão informadas pelos dispositivos registrados.</translation>
 <translation id="2890645751406497668">Conceder automaticamente permissão a esses sites para se conectarem a dispositivos USB com determinados IDs de fornecedores e produtos.</translation>
 <translation id="2892414556511568464">Restringe o modo duplex de impressão. Se a política não for definida ou estiver em branco, não haverá restrição.</translation>
 <translation id="2893546967669465276">Enviar registros do sistema ao servidor de gerenciamento</translation>
@@ -1279,6 +1307,10 @@
 <translation id="2905984450136807296">Ciclo de vida do cache de dados de autenticação</translation>
 <translation id="2906874737073861391">Lista de extensões AppPack</translation>
 <translation id="2908277604670530363">Número máximo de conexões simultâneas ao servidor proxy</translation>
+<translation id="2919544577647246857">Define a lista de usuários que têm permissão para fazer login no dispositivo. As entradas são feitas no formato <ph name="USER_ALLOWLIST_ENTRY_FORMAT" />, como <ph name="USER_WHITELIST_ENTRY_EXAMPLE" />. Para permitir usuários arbitrários em um domínio, use entradas no formato <ph name="USER_ALLOWLIST_ENTRY_WILDCARD" />.
+
+      Se esta política não for configurada, não haverá restrições quanto aos usuários autorizados a fazer login. Ainda assim, a criação de novos usuários exigirá que a política <ph name="DEVICE_ALLOW_NEW_USERS_POLICY_NAME" /> seja configurada de forma adequada.
+      Se <ph name="DEVICE_FAMILY_LINK_ACCOUNTS_ALLOWED_POLICY_NAME" /> estiver ativada, os usuários do Family Link também poderão usar as contas definidas nesta política.</translation>
 <translation id="2921222258441684334">Se a política for definida como 1, os sites poderão rastrear a localização física dos usuários como o estado padrão. Se a política for definida como 2, será negado o rastreamento como padrão. É possível definir a política para perguntar sempre que um site quiser rastrear a localização física dos usuários.
 
       Se a política não for definida, a <ph name="ASK_GEOLOCATION_POLICY_NAME" /> será aplicada, mas os usuários poderão mudar essa configuração.</translation>
@@ -1494,6 +1526,7 @@
       Se ela não for definida, o valor padrão será 0 graus e o usuário poderá mudá-lo. Neste caso, o valor padrão não será reaplicado após a reinicialização.</translation>
 <translation id="3264793472749429012">Codificações do provedor de pesquisa padrão</translation>
 <translation id="3273221114520206906">Configuração padrão do JavaScript</translation>
+<translation id="328347261792478720">Por padrão, o navegador mostrará recomendações de mídia personalizadas para o usuário. Se esta política for definida como "Desativada", essas recomendações ficarão ocultas para o usuário. Se esta política for definida como "Ativada" ou não for definida, as recomendações de mídia serão mostradas para o usuário.</translation>
 <translation id="3284094172359247914">Controla o uso da API WebUSB</translation>
 <translation id="3288595667065905535">Liberar canal</translation>
 <translation id="3292147213643666827">Permite que o <ph name="PRODUCT_NAME" /> atue como um proxy entre o <ph name="CLOUD_PRINT_NAME" /> e impressoras legadas conectadas à máquina.
@@ -1510,6 +1543,9 @@
       Essa política será removida no Chrome 88.
 
       Consulte https://www.chromestatus.com/feature/4664843055398912.</translation>
+<translation id="3302829897293005699">Se a política for definida como "Ativada" ou não for definida, as informações da sessão de quiosque ativa, como versão e código do aplicativo, serão comunicadas pelos dispositivos registrados.
+
+      Se a política for definida como "Desativada", os dispositivos registrados não comunicarão as informações da sessão de quiosque.</translation>
 <translation id="3303911765031636277">Política de configuração para o conector OnFileAttached do Chrome Enterprise</translation>
 <translation id="3304662785258434098">Permite definir se os usuários podem adicionar exceções para permitir conteúdo misto em sites específicos.
 
@@ -1540,6 +1576,13 @@
 <translation id="3345682490796432751">Se a política for definida como "Ativada" os plug-ins desatualizados serão usados como plug-ins normais. Se a política for definida como "Desativada", os plug-ins desatualizados não serão usados.
 
       Se a política não for definida, os usuários poderão dar permissão para que os plug-ins desatualizados sejam executados.</translation>
+<translation id="3348799281602260763">Se ativadas, as conexões de ponto WebRTC podem fazer downgrade para versões
+      obsoletas dos protocolos TLS/DTLS (DTLS 1.0, TLS 1.0 e TLS 1.1).
+      Quando esta política estiver desativada ou não for definida, essas versões TLS/DTLS serão
+      desativadas.
+
+      Esta política é temporária e será removida em uma versão futura
+      do <ph name="PRODUCT_NAME" />.</translation>
 <translation id="3356657927302977341">Configura se o <ph name="PRODUCT_NAME" /> usará notificações nativas no Linux.
 
 Se esta política for definida como verdadeira ou não for definida, o <ph name="PRODUCT_NAME" /> terá permissão para usar notificações nativas.
@@ -1816,6 +1859,9 @@
 <translation id="3709266154059827597">Configurar a lista de proibições de instalação da extensão</translation>
 <translation id="3711895659073496551">Suspender</translation>
 <translation id="3715569262675717862">Autenticação baseada em certificados do cliente</translation>
+<translation id="3727675072430693164">Se a política for definida como "Ativada", as estatísticas de hardware dos componentes SoC serão informadas pelos dispositivos registrados.
+
+      Se a política for definida como "Desativada" ou não for definida, as estatísticas não serão informadas pelos dispositivos registrados.</translation>
 <translation id="3736879847913515635">Ativar adição de uma pessoa no gerenciador de usuários</translation>
 <translation id="3737890474637805114">Bloquear download de arquivos grandes</translation>
 <translation id="3748900290998155147">Especifica se wake locks são permitidos. Os wake locks podem ser solicitados por extensões por meio da API da extensão de gerenciamento de energia e por apps ARC.
@@ -1827,6 +1873,9 @@
 <translation id="375266612405883748">Restringe o intervalo da porta UDP usada pelo host de aceso remoto desta máquina.
 
           Se esta política não for definida ou se for definida como uma string vazia, o host de acesso remoto poderá usar qualquer porta disponível, a não ser que a política <ph name="REMOTE_ACCESS_HOST_FIREWALL_TRAVERSAL_POLICY_NAME" /> esteja desativada. Nesse caso, o host de acesso remoto usará portas UDP no intervalo 12400-12409.</translation>
+<translation id="3755237588083934849">Se a política for definida, a frequência do envio de uploads de status do dispositivo será determinada, em milissegundos. O mínimo permitido é 60 segundos.
+
+      Se não for definida, o intervalo padrão será de 3 horas.</translation>
 <translation id="3756011779061588474">Bloquear modo de desenvolvedor</translation>
 <translation id="3758089716224084329">Permite que você especifique o servidor proxy usado pelo <ph name="PRODUCT_NAME" /> e impede que os usuários alterem as configurações de proxy.
 
@@ -2268,6 +2317,7 @@
       Se esta política não for definida, o "Navegação segura" operará no modo "Proteção padrão", mas os usuários poderão mudar a configuração.
 
       Consulte https://developers.google.com/safe-browsing (em inglês) para ver mais informações sobre o "Navegação segura".</translation>
+<translation id="4402887080007986374">A versão válida dos Termos de Serviço do Edu Coexistence</translation>
 <translation id="4408428864159735559">Lista de compartilhamentos de arquivos de rede pré-configurados.</translation>
 <translation id="4410236409016356088">Ativar o acelerador de largura de banda da rede</translation>
 <translation id="441217499641439905">Desativar o Google Drive em conexões celulares no app Arquivos do <ph name="PRODUCT_OS_NAME" /></translation>
@@ -2449,6 +2499,13 @@
           Para ver exemplos de padrões, consulte http://www.chromium.org/developers/how-tos/chrome-frame-getting-started (link em inglês).</translation>
 <translation id="467449052039111439">Abrir uma lista de URLs</translation>
 <translation id="4674871290487541952">Permite algoritmos inseguros em verificações de integridade nas atualizações e instalações de extensão</translation>
+<translation id="4677605038200415894">Se a política for definida, será possível criar uma lista de padrões de URL que especifica quais sites recebem permissão automaticamente para acessar um dispositivo USB com os IDs de produto e de fornecedor especificados. Cada item da lista precisa conter dispositivos e URLs para que a política seja válida. Cada item dos dispositivos pode conter um campo de ID de fornecedor e ID de produto. Todos os IDs omitidos serão tratados como caracteres curinga, com uma exceção: não é possível especificar um ID de produto sem especificar um de fornecedor. Se fizer isso, a política não será válida.
+
+      O modelo de permissões de USB usa o URL solicitante e o de incorporação (do site de frame de nível superior) para permitir que o URL solicitante acesse o dispositivo USB. O URL solicitante pode ser diferente do URL de incorporação quando o site solicitante é carregado em um iframe. Portanto, o campo "URLs" pode conter até duas strings delimitadas por vírgula para especificar esses URLs. Se você especificar apenas uma, o acesso ao dispositivo USB correspondente será concedido quando o URL do site solicitante for igual a esse URL, independente do status de incorporação. Os URLs desse campo precisam ser válidos, caso contrário, a política será ignorada.
+
+      Se a política não tiver definição, <ph name="DEFAULT_WEB_USB_GUARD_SETTING_POLICY_NAME" /> será aplicada, se estiver definida. Caso contrário, a configuração pessoal do usuário será aplicada.
+
+      Os padrões de URL desta política não podem entrar em conflito com os configurados por meio da <ph name="WEB_USB_BLOCKED_FOR_URLS_POLICY_NAME" />. Se entrarem, esta política terá precedência sobre <ph name="WEB_USB_BLOCKED_FOR_URLS_POLICY_NAME" /> e <ph name="WEB_USB_ASK_FOR_URLS_POLICY_NAME" />.</translation>
 <translation id="4680936297850947973">Uso suspenso na versão M68. Em vez disso, use DefaultPopupsSetting.
 
       Para ver a explicação detalhada, acesse https://www.chromestatus.com/features/5675755719622656.
@@ -2852,6 +2909,9 @@
 
       Se a política não for definida em versões até a M76, o <ph name="PRODUCT_NAME" /> terá como padrão não coletar esses registros nem fazer upload deles. A partir da versão M77, o <ph name="PRODUCT_NAME" /> terá como padrão coletar os registros e fazer upload deles da maioria dos perfis afetados por políticas de empresas no nível de usuário baseadas em nuvem. A partir da versão M77 até a M80, o <ph name="PRODUCT_NAME" /> também pode coletar esses registros e fazer upload deles por padrão a partir de perfis afetados pelo gerenciamento local do <ph name="PRODUCT_NAME" />.</translation>
 <translation id="5331746669335642668">A política de nuvem do <ph name="PRODUCT_NAME" /> substitui a política da plataforma.</translation>
+<translation id="5340105431123046323">Se a política for definida como "Ativada" ou não for definida, a lista de interfaces de rede com seus tipos e endereços de hardware será informada pelos dispositivos registrados.
+
+      Se a política for definida como "Desativada", a interface de rede não será informada pelos dispositivos registrados.</translation>
 <translation id="5346587320074666194">Bloquear acesso a sensores nesses sites</translation>
 <translation id="5362531528507578966">Modifica o modo de impressão de gráficos de segundo plano padrão.</translation>
 <translation id="5365476955714838841">Parâmetros de linha de comando para o navegador alternativo.</translation>
@@ -3123,6 +3183,8 @@
       Observação: separe vários nomes de servidor usando vírgulas. Caracteres curinga (<ph name="WILDCARD_VALUE" />) são permitidos.</translation>
 <translation id="5645779841392247734">Permitir cookies nestes sites</translation>
 <translation id="5646234199535103501">Política de configuração para o conector OnBulkDataEntry do Chrome Enterprise</translation>
+<translation id="5652250453612826983">Controla as políticas de supervisão dos pais, que são aplicadas apenas às contas de crianças.
+      Essas políticas não são definidas no Admin Console, mas configuradas diretamente pelo Kids API Server.</translation>
 <translation id="5656177735561364047">Ativa o recurso de área de transferência compartilhada</translation>
 <translation id="5657576769650058122">Se a política for definida como ativada, o teclado virtual na tela (um método de entrada do Chrome OS) ficará ativado. Se a política for definida como desativada, esse teclado não será ativado.
 
@@ -3233,6 +3295,9 @@
       Cada item nesta lista é um padrão de correspondência de estilo de extensão (consulte https://developer.chrome.com/extensions/match_patterns). Os usuários conseguem instalar com facilidade os itens de qualquer URL correspondente a um item da lista. Tanto o local do arquivo *.crx quanto a página de onde o download é feito (ou seja, o referenciador) precisam ser permitidos por esses padrões.
 
       <ph name="EXTENSION_INSTALL_BLOCKLIST_POLICY_NAME" /> tem prioridade sobre esta política. Ou seja, uma extensão da lista de bloqueio não será instalada, mesmo se a instalação for feita a partir de um site presente nesta lista.</translation>
+<translation id="5860010874344790473">Se a política for definida como "Ativada", logs do sistema serão enviados ao servidor de gerenciamento para permitir que os administradores os monitorem.
+
+      Se a política for definida como "Desativada" ou não for definida, nenhum log do sistema será enviado.</translation>
 <translation id="5861856285460256766">Configuração do código de acesso dos pais</translation>
 <translation id="5868414965372171132">Configuração de rede em nível do usuário</translation>
 <translation id="587242272905978723">Permita que <ph name="PLUGIN_VM_NAME" /> colete dados de uso de <ph name="PLUGIN_VM_NAME" />.
@@ -3730,6 +3795,17 @@
       Quando a política é definida como verdadeira, ela permite que o dispositivo acione um Powerwash.
       Se não for configurada, ela será definida como verdadeira por padrão, permitindo que o dispositivo acione um Powerwash.
       </translation>
+<translation id="6614020900120353107">Controla se o cliente DNS integrado é usado no <ph name="PRODUCT_NAME" />.
+
+      Isso não afeta quais servidores DNS são usados, somente a pilha de software que é usada para se comunicar com eles. Por exemplo, se um sistema operacional for configurado para usar um servidor DNS empresarial, o mesmo servidor será usado pelo cliente DNS integrado. No entanto, é possível que o cliente DNS integrado interaja com servidores de maneiras diferentes usando protocolos de DNS mais modernos, como DNS sobre TLS.
+
+      Essa política não afeta DNS sobre HTTPS. Consulte a política <ph name="DNS_OVER_HTTPS_MODE_POLICY_NAME" /> para mudar esse comportamento.
+
+      Se a política for definida como verdadeira, o cliente DNS integrado será usado, se disponível.
+
+      Se ela for definida como falsa, o cliente DNS integrado nunca será usado.
+
+      Se a política não for definida, o cliente DNS integrado será ativado por padrão no macOS, no Android (quando o DNS particular e a VPN não estiverem ativados) e no ChromeOS. Os usuários poderão decidir se o cliente DNS integrado será usado editando chrome://flags ou especificando a sinalização de uma linha de comando.</translation>
 <translation id="6621839881150363218">Se a política for definida como "Ativada", todos os sites serão isolados e cada um executará um processo próprio. Se a política for definida como "Desativada", não haverá isolamento explícito de sites e as versões de teste de IsolateOriginsAndroid e SitePerProcessAndroid serão desativadas. Os usuários ainda poderão ativar a política manualmente.
 
       Se a política não for definida, os usuários poderão mudar essa configuração.
@@ -3741,6 +3817,21 @@
 <translation id="6628043374475466084">Padrões do URL que não precisam de verificação quanto a regras de proteção de dados confidenciais para conteúdo enviado por upload</translation>
 <translation id="6628120204569232711">Informa o status de armazenamento</translation>
 <translation id="663685822663765995">Restringir o modo de cor de impressão</translation>
+<translation id="6640989746632867803">Se a política for definida, o usuário não poderá ignorar as decisões de segurança de downloads.
+
+       Se a política for definida como:
+
+      * "Bloquear downloads perigosos", todos os downloads serão permitidos, exceto os marcados com alertas de segurança.
+
+      * "Bloquear downloads potencialmente perigosos", todos os downloads serão permitidos, exceto os marcados com alertas de segurança para downloads potencialmente perigosos.
+
+      * "Bloquear todos os downloads", todos os downloads serão bloqueados.
+
+      * "Bloquear downloads maliciosos", todos os downloads serão permitidos, exceto os determinados como malware. Diferentemente dos downloads perigosos, esta política não considera o tipo de arquivo, mas sim o host.
+
+      * "Nenhuma restrição especial", os downloads passarão pelas restrições normais de segurança de acordo com os resultados de análise de segurança.
+
+      Observação: essas restrições são aplicadas a downloads acionados em conteúdos de páginas da Web e na opção do menu "Fazer download do link". Elas não se aplicam à opção de fazer o download da página atualmente exibida nem de salvar como PDF nas opções de impressão. Leia mais sobre o "Navegação segura" (https://developers.google.com/safe-browsing).</translation>
 <translation id="6641981670621198190">Desativar o suporte a APIs para gráficos 3D</translation>
 <translation id="6646056064606561298">Ativar a política de gerenciamento de inicialização na alimentação CA.
 
@@ -3851,6 +3942,9 @@
       Quando a política não for definida em um dispositivo gerenciado, não será possível executar máquinas virtuais. Dispositivos não gerenciados podem executar máquinas virtuais.</translation>
 <translation id="6786747875388722282">Extensões</translation>
 <translation id="6786967369487349613">Configurar o diretório do perfil de roaming</translation>
+<translation id="6789422336869764846">Se a política for definida como "Ativada" ou não for definida, o estado da chave dev dos dispositivos registrados durante a inicialização será informado.
+
+      Se a política for definida como "Desativada", o estado da chave dev dos dispositivos registrados não será informado.</translation>
 <translation id="6795485990775913659">Permitir impressão apenas sem PIN</translation>
 <translation id="6810445994095397827">Bloquear o JavaScript nestes sites</translation>
 <translation id="6813263547126514821">Ligar e desligar</translation>
@@ -4392,6 +4486,9 @@
 <translation id="7458437477941640506">Não faça a reversão para a versão de destino se a versão do SO for mais recente que a de destino. As atualizações também estão desativadas.</translation>
 <translation id="7459601923199346224">Controla as políticas do usuário e dispositivo para o gerenciamento de certificados.</translation>
 <translation id="7464991223784276288">Limita cookies de URLs correspondentes à sessão atual</translation>
+<translation id="7468182772656807573">Se a política for definida, a frequência do envio de pacotes de monitoramento de rede será determinada, em milissegundos. Os intervalos variam de 30 segundos a 24 horas. Valores fora desse intervalo serão fixados nessa faixa.
+
+      Se a política não for definida, o intervalo padrão será de 3 minutos.</translation>
 <translation id="7469554574977894907">Ativar sugestões de pesquisa</translation>
 <translation id="747014869399137701">Se a política for definida como 1, os sites poderão exibir notificações na área de trabalho. Se a política for definida como 2, as notificações na área de trabalho serão negadas.
 
@@ -4655,6 +4752,7 @@
           Se esta política não for definida, os atalhos de recursos de acessibilidade serão ativados por padrão na tela de login.</translation>
 <translation id="7777535871204167559">Tratar dispositivos de armazenamento externo como somente leitura</translation>
 <translation id="7788511847830146438">Por perfil</translation>
+<translation id="780629758750905699">Permitir outras contas do Family Link no dispositivo</translation>
 <translation id="7807139251387225825">Lista de tipos a serem excluídos da sincronização</translation>
 <translation id="7815699949432723208">Esta política está obsoleta. Use <ph name="NATIVE_MESSAGING_ALLOWLIST_POLICY_NAME" />.
 
@@ -4802,6 +4900,9 @@
       Se desativar esta configuração, os usuários não conseguirão usar o Preenchimento automático.
 
       Se ativar esta configuração ou não definir um valor, o Preenchimento automático continuará sob o controle do usuário. Isso permitirá que ele configure perfis de Preenchimento automático e ative ou desative esse recurso quando quiser.</translation>
+<translation id="8036964468882248070">Se a política for definida como "Ativada", estatísticas de hardware e identificadores de dispositivos de armazenamento serão informados pelos dispositivos registrados.
+
+      Se a política for definida como "Desativada" ou não for definida, as estatísticas de armazenamento dos dispositivos registrados não serão informadas.</translation>
 <translation id="8044493735196713914">Informar modo de inicialização do dispositivo</translation>
 <translation id="8049769137921877885">Esta política controla a permissão de fornecimento dos dados da política e o horário de busca dela.
 
@@ -4881,6 +4982,9 @@
           Se você definir esta política, o usuário não poderá alterá-la ou modificá-la.
 
           Se esta política não for definida, o destaque do cursor ficará desativado inicialmente, mas poderá ser ativado pelo usuário a qualquer momento.</translation>
+<translation id="8164687848393015214">Se a política estiver definida como "Ativada", ela enviará pacotes de monitoramento de rede (<ph name="HEARTBEATS_TERM" />) para o servidor de gerenciamento para monitorar o status on-line, a fim de permitir que o servidor detecte se o dispositivo está off-line.
+
+      Se a política for definida como "Desativada" ou não for definida, nenhum pacote será enviado.</translation>
 <translation id="816783746144552109">Configurar a versão mínima permitida do Chrome OS para o dispositivo.</translation>
 <translation id="8171924760436219650">Usar o botão direito do mouse como o principal na tela de login</translation>
 <translation id="8176035528522326671">Permitir que o usuário corporativo seja o usuário principal de diversos perfis (comportamento padrão para usuários gerenciados por empresa)</translation>
@@ -5175,6 +5279,7 @@
 
       Se esta política for definida como false ou não for configurada, o usuário poderá usar o navegador sem fazer login no <ph name="PRODUCT_NAME" />.</translation>
 <translation id="858309738002328421">Bloquear upload de arquivos grandes</translation>
+<translation id="8583509234908413302">Permitir downgrade de TLS/DTLS legado no WebRTC</translation>
 <translation id="8584279193368801689">Restringe o modo de impressão com PIN. Se a política não for definida, não haverá restrição. Se o modo não estiver disponível, a política será ignorada. O recurso de impressão com PIN está disponível somente para impressoras que usam um dos protocolos IPPS, HTTPS, USB ou IPP-over-USB.</translation>
 <translation id="8585558195682146109">Enviar downloads do usuário para verificação</translation>
 <translation id="8587229956764455752">Permite a criação de novas contas de usuários</translation>
@@ -5382,6 +5487,9 @@
 
       Os padrões de URL têm o mesmo formato que a política <ph name="URL_BLOCKLIST_POLICY_NAME" />, documentada em https://www.chromium.org/administrators/url-blacklist-filter-format (link em inglês).
       </translation>
+<translation id="8931555638815157255">Se a política for definida como "Ativada" ou não for definida, os dispositivos registrados informarão a versão do SO e do firmware periodicamente.
+
+      Se a política for definida como "Desativada", os dispositivos registrados não relatarão as informações de versão.</translation>
 <translation id="8937282917198525844"> A partir da versão M81, os elementos padrão de controle de formulários (por exemplo, &lt;select&gt;, &lt;button&gt;, &lt;input type=date&gt;) foram atualizados para proporcionar melhor acessibilidade e uniformidade na plataforma. Esta política restaura os antigos elementos de controle de formulários "legados" até a M84.
 
       Se esta política for definida como verdadeira, os elementos de controle de formulários "legados" serão usados para todos os sites.
@@ -5419,6 +5527,13 @@
 <translation id="8942616385591203339">Esta política controla se o consentimento de sincronização pode ser exibido para o usuário durante o primeiro login. É necessário defini-la como falsa se o consentimento de sincronização nunca for necessário para o usuário.
       Se definida como falsa, o consentimento de sincronização não será exibido.
       Se definida como verdadeira ou não definida, o consentimento de sincronização poderá ser exibido.</translation>
+<translation id="8943744188513019866">Esta política indica a versão válida atual dos Termos de Serviço do Edu Coexistence.
+      Ela é comparada à versão aceita pelo pai/mãe e usada para solicitar a renovação da permissão do pai/mãe sempre que necessário.
+
+      Quando esta política é definida, a versão dos Termos de Serviço pode ser validada.
+      Quando esta política não é definida, não é possível verificar a validade dos Termos de Serviço do Edu Coexistence.
+
+      Esta política é usada apenas para usuários do Family Link.</translation>
 <translation id="8943934315109955032">Não verifica violações da regra de proteção de dados confidenciais</translation>
 <translation id="8947415621777543415">Informar a localização do dispositivo</translation>
 <translation id="8948062138228904066">Lista de permissões do servidor de autenticação</translation>
@@ -5551,6 +5666,9 @@
       Se a política não tiver definição, <ph name="DEFAULT_PLUGINS_SETTING_POLICY_NAME" /> será aplicada a todos os sites, se estiver definida. Caso contrário, a configuração pessoal do usuário será aplicada.
 
       Para informações detalhadas sobre padrões de URL válidos, consulte https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns (link em inglês). A partir da versão M85, padrões com caracteres curinga "*" e "[*.]" no host não serão mais compatíveis com esta política.</translation>
+<translation id="9073405975862312795">Se a política for definida como "Ativada" ou não for definida, os períodos de atividade do usuário nos dispositivos registrados serão informados.
+
+      Se a política for definida como "Desativada", os períodos de atividade nos dispositivos registrados não serão gravados ou informados.</translation>
 <translation id="9077227880520270584">Timer do login automático da conta local do dispositivo</translation>
 <translation id="9084985621503260744">Especifica se a atividade de vídeo afeta o gerenciamento de energia</translation>
 <translation id="9088433379343318874">Ativar o provedor de conteúdo de usuário supervisionado</translation>
diff --git a/components/policy/resources/policy_templates_ru.xtb b/components/policy/resources/policy_templates_ru.xtb
index 5c4d1052..3defca8 100644
--- a/components/policy/resources/policy_templates_ru.xtb
+++ b/components/policy/resources/policy_templates_ru.xtb
@@ -635,6 +635,9 @@
           </translation>
 <translation id="2030905906517501646">Ключевое слово для поисковой системы по умолчанию</translation>
 <translation id="203096360153626918">Правило не влияет на приложения Android. Они смогут переходить в полноэкранный режим, даже если для правила задано значение <ph name="FALSE" />.</translation>
+<translation id="2037214548071298156">Если правило включено или не настроено, зарегистрированные устройства отправляют статистические данные о работе аппаратного оборудования, например об использовании процессора или оперативной памяти.
+
+      Если правило отключено, эти данные не отправляются.</translation>
 <translation id="2040479044912658454">Режим растеризации при печати</translation>
 <translation id="2043749682619281558">Включить подсветку указателя мыши на экране входа</translation>
 <translation id="2043770014371753404">Недоступные корпоративные принтеры</translation>
@@ -969,7 +972,11 @@
       Если правило включено, при обнаружении нежелательного ПО метаданные проверки могут быть переданы в Google в соответствии с правилом SafeBrowsingExtendedReportingEnabled. Пользователь увидит запрос на удаление нежелательного ПО,  и отчет с результатами будет отправлен в Google в любом случае.
 
       В <ph name="MS_WIN_NAME" /> это правило можно настроить только на устройствах, которые входят в домен <ph name="MS_AD_NAME" />, на которых установлена ОС Windows 10 Pro или которые зарегистрированы в программе облачного управления браузером Chrome.</translation>
+<translation id="2448315169529769573">Если правило включено, из <ph name="PRODUCT_OS_NAME" /> в Google отправляется статистика использования и диагностическая информация, в том числе отчеты о сбоях. Если правило отключено, эти данные не отправляются.
+
+       Если правило не настроено, данные отправляются только с устройств, которыми управляют администраторы.</translation>
 <translation id="2454228136871844693">Оптимизировать для стабильной работы</translation>
+<translation id="2456629156652006573">Только с ограниченным доступом</translation>
 <translation id="2463034609187171371">Включить наборы шифров DHE в TLS</translation>
 <translation id="2463365186486772703">Региональные настройки приложения</translation>
 <translation id="2463832514638083341">Это правило определяет, сколько дней на устройстве хранятся метаданные заданий печати.
@@ -1140,9 +1147,16 @@
       Это правило было удалено в версии M77.
       Оно применяется к экрану входа. Ознакомьтесь также с правилом <ph name="SITE_PER_PROCESS_POLICY_NAME" />, с помощью которого задаются настройки для сеанса пользователя. Для этих правил рекомендуется выбрать одинаковые значения. В случае противоречия в начале сеанса может возникнуть задержка при применении значения, указанного в правиле для пользователей.
       </translation>
+<translation id="2702023190395322609">Включить советы о том, что посмотреть</translation>
 <translation id="2706708761587205154">Разрешить печать только с вводом PIN-кода</translation>
 <translation id="2707873794476722903">Безопасный просмотр включен в режиме стандартной защиты</translation>
 <translation id="2710534340210290498">Если указано значение False, пользователи не смогут блокировать экран (доступен только выход из сеанса). Если задано значение True или правило не настроено, блокировать экран смогут только пользователи, которые прошли аутентификацию с помощью пароля.</translation>
+<translation id="2716623398185506073">Если правило включено, зарегистрированные устройства отправляют статистические данные о работе аппаратного оборудования и идентификаторы, связанные с питанием устройства.
+
+      Если правило отключено или не настроено, эти данные не отправляются.</translation>
+<translation id="2725855586003209701">Если правило включено или не настроено, зарегистрированные устройства отправляют данные о том, какие пользователи недавно выполняли на них вход.
+
+      Если правило выключено, эти устройства не отправляют данные о пользователях.</translation>
 <translation id="2731627323327011390">Запретить приложениям ARC использовать сертификаты <ph name="PRODUCT_OS_NAME" /></translation>
 <translation id="2742843273354638707">Удаляет приложение из Интернет-магазина Chrome и ссылку на него со страницы быстрого доступа и с панели запуска приложений <ph name="PRODUCT_OS_NAME" />.
 
@@ -1262,6 +1276,17 @@
 
       Если правило не настроено, то фильтры не используются и учитываются все серверные принтеры.</translation>
 <translation id="2877225735001246144">Отключить поиск записи CNAME при запросе на аутентификацию Kerberos</translation>
+<translation id="2886215882246310669">Это правило определяет, можно ли в <ph name="PRODUCT_OS_NAME" /> добавлять на устройство аккаунты новых пользователей Family Link.
+      Оно используется только вместе с правилом <ph name="DEVICE_USER_ALLOWLIST_POLICY_NAME" />. Правило определяет, можно ли добавлять дополнительных пользователей Family Link в список разрешенных аккаунтов.
+      Он не влияет на другие правила входа в аккаунт. Например, это правило не действует в следующих случаях:
+      – Если правило <ph name="DEVICE_ALLOW_NEW_USERS_POLICY_NAME" /> запрещает добавлять новых пользователей на устройство.
+      – Если правило <ph name="DEVICE_USER_ALLOWLIST_POLICY_NAME" /> разрешает добавлять всех пользователей.
+
+      Если для правила установлено значение False или правило не настроено, к аккаунтам Family Link не применяются дополнительные правила.
+      Если установлено значение True, можно добавлять новые аккаунты Family Link в список <ph name="DEVICE_USER_ALLOWLIST_POLICY_NAME" />.</translation>
+<translation id="2886969306951284125">Если на устройстве разрешены приложения для Android и для правила задано значение True, то зарегистрированные устройства отправляют данные о статусе Android.
+
+      Если правило выключено или не настроено, эти данные не отправляются.</translation>
 <translation id="2890645751406497668">Автоматически разрешать этим сайтам подключение к USB-устройствам с предоставленными идентификаторами поставщика и продукта.</translation>
 <translation id="2892414556511568464">Ограничивает режим двусторонней печати. Если правило не задано, ограничение не действует.</translation>
 <translation id="2893546967669465276">Позволяет отправлять системные журналы на сервер для проверки администраторами</translation>
@@ -1284,6 +1309,10 @@
 <translation id="2905984450136807296">Срок использования кешированных данных аутентификации</translation>
 <translation id="2906874737073861391">Список расширений в пакете приложений</translation>
 <translation id="2908277604670530363">Максимальное количество одновременных подключений к прокси-серверу</translation>
+<translation id="2919544577647246857">Это правило определяет список пользователей, которым разрешено входить в систему на устройстве. Записи должны иметь форму <ph name="USER_ALLOWLIST_ENTRY_FORMAT" />. Пример: <ph name="USER_WHITELIST_ENTRY_EXAMPLE" />. Чтобы разрешить вход всем пользователям из определенного домена, сделайте запись в форме <ph name="USER_ALLOWLIST_ENTRY_WILDCARD" />.
+
+      Если правило не настроено, войти в систему может любой пользователь, у которого есть аккаунт. При этом для добавления новых пользователей необходимо должным образом настроить правило <ph name="DEVICE_ALLOW_NEW_USERS_POLICY_NAME" />.
+      Если правило <ph name="DEVICE_FAMILY_LINK_ACCOUNTS_ALLOWED_POLICY_NAME" /> включено, пользователи Family Link могут дополнительно входить в аккаунты, указанные в нем.</translation>
 <translation id="2921222258441684334">Если выбрано значение 1, сайтам будет по умолчанию разрешено отслеживать местоположение пользователей, а если выбрано значение 2, – запрещено. Вы можете настроить правило так, чтобы спрашивать, пытается ли сайт отследить местоположение пользователя
 
       Если правило не настроено, действует правило <ph name="ASK_GEOLOCATION_POLICY_NAME" />, но пользователи могут его изменить.</translation>
@@ -1497,6 +1526,7 @@
       Если оно не настроено, значение по умолчанию равно нулю градусов и пользователи могут самостоятельно его менять. В этом случае значение по умолчанию не применяется снова после перезапуска.</translation>
 <translation id="3264793472749429012">Кодировки поисковой системы по умолчанию</translation>
 <translation id="3273221114520206906">Настройки JavaScript по умолчанию</translation>
+<translation id="328347261792478720">По умолчанию в браузере показываются персональные рекомендации для пользователя. Если правило отключено, персональные рекомендации скрыты от пользователя. Если правило включено или не настроено, пользователь видит советы о том, что посмотреть.</translation>
 <translation id="3284094172359247914">Контроль использования WebUSB API</translation>
 <translation id="3288595667065905535">Канал обновления</translation>
 <translation id="3292147213643666827"><ph name="PRODUCT_NAME" /> может действовать в качестве прокси-сервера между виртуальным принтером <ph name="CLOUD_PRINT_NAME" /> и обычными принтерами, подключенными к компьютеру.
@@ -1513,6 +1543,9 @@
       Это правило будет удалено из Chrome 88.
 
       Подробнее: https://www.chromestatus.com/feature/4664843055398912.</translation>
+<translation id="3302829897293005699">Если правило включено или не настроено, зарегистрированные устройства отправляют информацию об активных сеансах киоска, например идентификатор и версию приложения.
+
+      Если правило отключено, эта информация не отправляется.</translation>
 <translation id="3303911765031636277">Настройки коннектора OnFileAttached для Chrome Enterprise</translation>
 <translation id="3304662785258434098">Позволяет определить, могут ли пользователи добавлять исключения, разрешающие смешанный контент на определенных сайтах.
 
@@ -1547,6 +1580,13 @@
 <translation id="3345682490796432751">Если это правило включено, устаревшие плагины используются как обычные. В противном случае они использоваться не могут.
 
       Если правило не настроено, пользователи смогут разрешать или запрещать работу устаревших плагинов.</translation>
+<translation id="3348799281602260763">Если правило включено, для одноранговых соединений WebRTC можно использовать
+      устаревшие версии протоколов TLS/DTLS (DTLS 1.0, TLS 1.0 и TLS 1.1).
+      Если правило отключено, эти версии протоколов TLS/DTLS
+      не используются.
+
+      Это временное правило, которое будет удалено в следующей версии
+      <ph name="PRODUCT_NAME" />.</translation>
 <translation id="3356657927302977341">Позволяет разрешить или запретить <ph name="PRODUCT_NAME" /> использовать нативные уведомления в Linux.
 
 Если правило не настроено или задано значение True, <ph name="PRODUCT_NAME" /> сможет использовать нативные уведомления.
@@ -1828,6 +1868,9 @@
 <translation id="3709266154059827597">Настройка черного списка расширений</translation>
 <translation id="3711895659073496551">Спящий режим</translation>
 <translation id="3715569262675717862">Аутентификация на основе сертификатов клиента</translation>
+<translation id="3727675072430693164">Если правило включено, зарегистрированные устройства отправляют статистические данные о работе аппаратного оборудования, связанные с компонентами процессора.
+
+      Если правило отключено ил не настроено, эти данные не отправляются.</translation>
 <translation id="3736879847913515635">Разрешить добавлять людей через диспетчер пользователей</translation>
 <translation id="3737890474637805114">Блокировать скачивание больших файлов</translation>
 <translation id="3748900290998155147">Определяет, можно ли устанавливать запрет блокировки. Расширения и приложения ARC могут запрашивать запрет блокировки через API расширения управления питанием.
@@ -1839,6 +1882,9 @@
 <translation id="375266612405883748">Ограничивает диапазон UDP-портов, используемых хостами удаленного доступа на этом компьютере.
 
           Если правило не настроено или в качестве значения указана пустая строка, для удаленного доступа можно будет использовать любой доступный порт. Если параметр <ph name="REMOTE_ACCESS_HOST_FIREWALL_TRAVERSAL_POLICY_NAME" /> отключен, будет разрешено использование UDP-портов в диапазоне от 12 400 до 12 409.</translation>
+<translation id="3755237588083934849">Правило позволяет указать, с какой частотой нужно отправлять данные об устройстве (в миллисекундах). Минимальное значение – 60 секунд.
+
+      Если правило не настроено, интервал по умолчанию составляет 3 часа.</translation>
 <translation id="3756011779061588474">Блокировать режим разработчика</translation>
 <translation id="3758089716224084329">Позволяет задать прокси-сервер для сервиса "<ph name="PRODUCT_NAME" />" и запретить пользователям менять его настройки.
 
@@ -2877,6 +2923,9 @@
 
       Если правило не настроено и используется версия не выше M76, <ph name="PRODUCT_NAME" /> по умолчанию не может собирать и загружать эти журналы. Если используется версия не ниже M77, <ph name="PRODUCT_NAME" /> по умолчанию может собирать и загружать эти журналы из большинства профилей, к которым применяются корпоративные облачные правила на уровне пользователя. Если используется версия от M77 до M80 включительно, <ph name="PRODUCT_NAME" /> также по умолчанию может собирать и загружать эти журналы из профилей, которые находятся под локальным управлением <ph name="PRODUCT_NAME" />.</translation>
 <translation id="5331746669335642668">Разрешить переопределять правило платформы при помощи облачного правила <ph name="PRODUCT_NAME" /></translation>
+<translation id="5340105431123046323">Если правило включено или не настроено, зарегистрированные устройства отправляют список сетевых интерфейсов с указанием их типов и адресов оборудования.
+
+      Если правило отключено, эти данные не отправляются.</translation>
 <translation id="5346587320074666194">Запрет указанным сайтам доступа к датчикам</translation>
 <translation id="5362531528507578966">Переопределяет режим печати фоновых цветов и изображений по умолчанию.</translation>
 <translation id="5365476955714838841">Параметры командной строки для альтернативного браузера</translation>
@@ -3262,6 +3311,9 @@
       Каждый пункт списка представляет собой шаблон соответствия для расширений (подробные сведения можно найти на странице https://developer.chrome.com/extensions/match_patterns). Файлы, полученные при помощи URL, которые соответствуют указанным шаблонам, устанавливаются по упрощенной схеме. В списке должен быть разрешен шаблон как для расположения файла CRX, так и для адреса страницы, с которой выполняется скачивание (то есть URL перехода).
 
       Правило <ph name="EXTENSION_INSTALL_BLOCKLIST_POLICY_NAME" /> имеет приоритет над этим правилом. Это означает, что расширение из списка запрещенных нельзя установить даже с того сайта, адрес которого есть в шаблонах.</translation>
+<translation id="5860010874344790473">Если правило включено, на сервер отправляются системные журналы, которые могут просматривать администраторы.
+
+      Если правило отключено или не настроено, системные журналы не отправляются.</translation>
 <translation id="5861856285460256766">Конфигурация родительского кода доступа</translation>
 <translation id="5868414965372171132">Конфигурация сети на уровне пользователя</translation>
 <translation id="587242272905978723">Разрешить плагину <ph name="PLUGIN_VM_NAME" /> собирать данные об использовании <ph name="PLUGIN_VM_NAME" />.
@@ -3761,6 +3813,17 @@
       Если выбрано значение True, на устройстве можно запускать функцию Powerwash.
       Если это правило не настроено, по умолчанию используется значение True.
       </translation>
+<translation id="6614020900120353107">Определяет, используется ли в <ph name="PRODUCT_NAME" /> встроенный клиент DNS.
+
+      Это не влияет на выбор DNS-серверов. Затрагивается только программный стек, взаимодействующий с ними. Например, если операционная система использует корпоративный DNS-сервер, то встроенный клиент DNS будет использовать этот же сервер. Встроенный клиент DNS можно настроить таким образом, чтобы он обращался к серверам с использованием более современных протоколов (например, DNS поверх TLS).
+
+      Это правило не влияет на режим "DNS поверх HTTPS". Для изменения настроек применяется правило <ph name="DNS_OVER_HTTPS_MODE_POLICY_NAME" />.
+
+      Если задано значение True, встроенный клиент DNS используется (при наличии).
+
+      Если задано значение False, встроенный клиент DNS не используется.
+
+      Если правило не настроено, встроенный клиент DNS по умолчанию включен для устройств с macOS, Android (если не включен персональный DNS-сервер или VPN) и Chrome OS. При этом пользователи могут изменить эту настройку с помощью страницы chrome://flags или параметра командной строки.</translation>
 <translation id="6621839881150363218">Если это правило включено, изолируются все сайты (для каждого из них запускается отдельный процесс). Если правило отключено, сайты не изолируются и экспериментальные функции IsolateOriginsAndroid и SitePerProcessAndroid не работают. Пользователи могут включить правило вручную.
 
       Если правило не задано, пользователи могут изменять эту настройку.
@@ -3882,6 +3945,9 @@
       Если на устройстве под управлением администратора правило не настроено, на нем нельзя запускать виртуальные машины. На устройствах, которыми не управляют администраторы, запускать виртуальные машины можно.</translation>
 <translation id="6786747875388722282">Расширения</translation>
 <translation id="6786967369487349613">Указать каталог для перемещаемого профиля</translation>
+<translation id="6789422336869764846">Если правило включено или не настроено, зарегистрированные устройства отправляют данные о состоянии переключателя dev при запуске устройства.
+
+      Если правило отключено, эти данные не отправляются.</translation>
 <translation id="6795485990775913659">Разрешить печать только без ввода PIN-кода</translation>
 <translation id="6810445994095397827">Блокировать JavaScript на этих сайтах</translation>
 <translation id="6813263547126514821">Питание и выключение</translation>
@@ -4422,6 +4488,9 @@
 <translation id="7458437477941640506">Не выполнять откат к целевой версии, если на устройстве уже установлена более поздняя версия OC (обновления также будут отключены)</translation>
 <translation id="7459601923199346224">Устанавливает правила для управления сертификатами на уровне пользователя и устройства.</translation>
 <translation id="7464991223784276288">Файлы cookie, сохраненные сайтами с URL из списка, удаляются после окончания сеанса</translation>
+<translation id="7468182772656807573">Правило позволяет задать частоту отправки сетевых пакетов в миллисекундах с интервалом от 30 секунд до 24 часов. Если указано число, которое не входит в этот диапазон, будет использоваться ближайшее подходящее значение.
+
+      Если правило не настроено, интервал по умолчанию составляет 3 минуты.</translation>
 <translation id="7469554574977894907">Включить поисковые подсказки</translation>
 <translation id="747014869399137701">Если выбрано значение 1, на сайтах разрешен показ уведомлений на рабочем столе, а если задано значение 2, – запрещен.
 
@@ -4683,6 +4752,7 @@
           Если не настроить это правило, по умолчанию быстрые клавиши специальных возможностей будут работать на экране входа.</translation>
 <translation id="7777535871204167559">Использовать внешние запоминающие устройства в режиме только для чтения</translation>
 <translation id="7788511847830146438">Для каждого профиля</translation>
+<translation id="780629758750905699">Разрешить добавление аккаунтов Family Link на устройство</translation>
 <translation id="7807139251387225825">Типы данных, для которых нужно запретить синхронизацию</translation>
 <translation id="7815699949432723208">Это правило больше не поддерживается. Используйте вместо него правило <ph name="NATIVE_MESSAGING_ALLOWLIST_POLICY_NAME" />.
 
@@ -4830,6 +4900,9 @@
       Если этот параметр отключен, функция автозаполнения недоступна пользователям.
 
       Если он включен или его значение не указано, пользователям будет доступна функция автозаполнения, и они смогут включать и отключать ее, а также настраивать профили автозаполнения.</translation>
+<translation id="8036964468882248070">Если правило включено, зарегистрированные устройства отправляют статистические данные и идентификаторы, связанные с накопителями.
+
+      Если правило отключено или не настроено, эти данные не отправляются.</translation>
 <translation id="8044493735196713914">Сообщать о режиме загрузки устройства</translation>
 <translation id="8049769137921877885">Это правило определяет, сообщать ли данные о правилах и времени их получения.
 
@@ -4907,6 +4980,9 @@
           Если вы настроите это правило, пользователи не смогут его изменить или переопределить.
 
           Если не настроить это правило, изначально подсветка указателя мыши будет отключена, но пользователь сможет включить ее в любой момент.</translation>
+<translation id="8164687848393015214">Если правило включено, на сервер отправляются сетевые пакеты (<ph name="HEARTBEATS_TERM" />) для проверки статуса устройства, которые позволяют определить, когда устройство отключено от сети.
+
+      Если правило отключено или не настроено, пакеты не отправляются.</translation>
 <translation id="816783746144552109">Настройка версии Chrome OS, минимально допустимой для устройства</translation>
 <translation id="8171924760436219650">Выбор правой кнопки мыши в качестве основной на экране входа</translation>
 <translation id="8176035528522326671">Разрешить корпоративному пользователю в многопрофильном режиме быть только основным профилем (настройка по умолчанию для корпоративных управляемых профилей)</translation>
@@ -5201,6 +5277,7 @@
 
       Если правило не настроено или для него выбрано значение False, браузер можно использовать без входа в <ph name="PRODUCT_NAME" />.</translation>
 <translation id="858309738002328421">Блокировать загрузку больших файлов</translation>
+<translation id="8583509234908413302">Разрешить устаревшие протоколы TLS/DTLS в WebRTC</translation>
 <translation id="8584279193368801689">Ограничивает режим печати с вводом PIN-кода. Если правило не задано, ограничение не действует. Если этот режим недоступен, правило будет игнорироваться. Режим печати с вводом PIN-кода доступен только для принтеров, использующих протоколы IPPS, HTTPS, USB или IPP через USB.</translation>
 <translation id="8585558195682146109">Отправлять скачанные файлы на проверку</translation>
 <translation id="8587229956764455752">Разрешить создание новых аккаунтов пользователей</translation>
@@ -5411,6 +5488,9 @@
 
       Формат шаблонов URL аналогичен используемому в правиле <ph name="URL_BLOCKLIST_POLICY_NAME" />. Подробную информацию об этом формате вы найдете на странице https://www.chromium.org/administrators/url-blacklist-filter-format.
       </translation>
+<translation id="8931555638815157255">Если правило включено или не настроено, зарегистрированные устройства периодически отправляют данные о версии ОС и прошивки, которые установлены на них.
+
+      Если правило выключено, эти устройства не отправляют данные о версии.</translation>
 <translation id="8937282917198525844"> В версии M81 у стандартных элементов управления формой (например, &lt;select&gt;, &lt;button&gt;, &lt;input type=date&gt;) новое оформление. Теперь они выполнены в едином стиле и лучше читаются. Это правило позволяет использовать прежние, устаревшие элементы управления формой до версии M84.
 
       Если задано значение True, устаревшие элементы управления формой будут использоваться для всех сайтов.
@@ -5577,6 +5657,9 @@
       Если это правило не настроено, то действует правило <ph name="DEFAULT_PLUGINS_SETTING_POLICY_NAME" /> при условии, что оно задано. В противном случае действуют персональные настройки пользователя.
 
       Сведения о допустимых шаблонах URL доступны на странице https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns. Обратите внимание, что шаблоны с подстановочными знаками * и [*.] в имени хоста не поддерживаются для этого правила в Chrome 85 и более поздних версиях браузера.</translation>
+<translation id="9073405975862312795">Если правило включено или не настроено, зарегистрированные устройства отправляют данные о длительности работы пользователей с устройством.
+
+      Если правило выключено, эти устройства не собирают и не отправляют такие данные.</translation>
 <translation id="9077227880520270584">Таймер автоматического входа в локальный аккаунт</translation>
 <translation id="9084985621503260744">Определяет, влияет ли воспроизведение видео на режим энергопотребления</translation>
 <translation id="9088433379343318874">Открыть доступ к поставщику контента для контролируемых профилей</translation>
diff --git a/components/policy/resources/policy_templates_th.xtb b/components/policy/resources/policy_templates_th.xtb
index 8dc193d2..496f058c 100644
--- a/components/policy/resources/policy_templates_th.xtb
+++ b/components/policy/resources/policy_templates_th.xtb
@@ -152,6 +152,9 @@
       หากตั้งค่านโยบายนี้เป็น "จริง" ระบบจะเปิดใช้ฟีเจอร์นี้และผู้ใช้จะเปลี่ยนแปลงการตั้งค่านี้ได้
       เมื่อตั้งค่าเริ่มต้นของนโยบายนี้เป็น "เท็จ" จะไม่มีการแนะนำอีโมจิและผู้ใช้จะลบล้างการตั้งค่าไม่ได้</translation>
 <translation id="1243570869342663665">ควบคุมการกรองเนื้อหาสำหรับผู้ใหญ่ของ SafeSites</translation>
+<translation id="1247850578871017740">การตั้งค่านโยบายด้วยค่าที่ถูกต้องจะทำให้ <ph name="PRODUCT_NAME" /> ไม่ใช้ SSL/TLS เวอร์ชันต่ำกว่าเวอร์ชันที่ระบุ ระบบจะเพิกเฉยต่อค่าที่ไม่รู้จัก
+
+      หากไม่ได้ตั้งค่านโยบายนี้ไว้ <ph name="PRODUCT_NAME" /> ก็จะแสดงข้อผิดพลาดสำหรับ TLS 1.0 และ TLS 1.1 แต่ผู้ใช้จะข้ามไปได้</translation>
 <translation id="1252536192437793850">อนุญาตให้เว็บไซต์ขอให้ผู้ใช้ให้สิทธิ์เข้าถึงพอร์ตอนุกรม</translation>
 <translation id="1257550411839719984">ตั้งค่าไดเรกทอรีเริ่มต้นสำหรับดาวน์โหลด</translation>
 <translation id="1265053460044691532">จำกัดเวลาที่ผู้ใช้ซึ่งตรวจสอบสิทธิ์ผ่าน SAML สามารถเข้าสู่ระบบในแบบออฟไลน์</translation>
@@ -623,6 +626,9 @@
           </translation>
 <translation id="2030905906517501646">คีย์เวิร์ดของผู้ให้บริการการค้นหาเริ่มต้น</translation>
 <translation id="203096360153626918">นโยบายนี้ไม่มีผลสำหรับแอป Android โดยแอปยังสามารถเข้าสู่โหมดเต็มหน้าจอได้แม้ตั้งค่านโยบายนี้เป็น <ph name="FALSE" /> ก็ตาม</translation>
+<translation id="2037214548071298156">การตั้งค่านโยบายเป็น "เปิดใช้" หรือไม่ได้ตั้งค่าจะทำให้อุปกรณ์ที่ลงทะเบียนไว้รายงานสถิติด้านฮาร์ดแวร์ เช่น การใช้งาน CPU/RAM
+
+      การตั้งค่านโยบายเป็น "ปิดใช้" จะทำให้อุปกรณ์ที่ลงทะเบียนไว้ไม่รายงานสถิติด้านฮาร์ดแวร์</translation>
 <translation id="2040479044912658454">โหมดการแรสเตอร์งานพิมพ์</translation>
 <translation id="2043749682619281558">เปิดใช้ฟีเจอร์การไฮไลต์เคอร์เซอร์ในหน้าจอการเข้าสู่ระบบ</translation>
 <translation id="2043770014371753404">เครื่องพิมพ์ขององค์กรที่มีการปิดใช้</translation>
@@ -957,7 +963,11 @@
 หากเปิดใช้ เมื่อการทำความสะอาด Chrome ตรวจพบซอฟต์แวร์ไม่พึงประสงค์ ระบบอาจรายงานข้อมูลเมตาเกี่ยวกับการสแกนไปยัง Google เพื่อให้สอดคล้องกับนโยบายซึ่งกำหนดโดย SafeBrowsingExtendedReportingEnabled การทำความสะอาด Chrome จะถามผู้ใช้ว่าต้องการนำซอฟต์แวร์ไม่พึงประสงค์ออกไหม  ระบบจะรายงานผลการทำความสะอาดไปยัง Google และผู้ใช้จะไม่มีตัวเลือกในการระงับการรายงานนี้
 
       ใน <ph name="MS_WIN_NAME" /> ฟังก์ชันการทำงานนี้ใช้ได้เฉพาะในอินสแตนซ์ที่เข้าร่วมโดเมน <ph name="MS_AD_NAME" />, ทำงานใน Windows 10 Pro หรือลงทะเบียนในการจัดการระบบคลาวด์ของเบราว์เซอร์ Chrome</translation>
+<translation id="2448315169529769573">การตั้งค่านโยบายเป็น "เปิดใช้" จะทำให้ <ph name="PRODUCT_OS_NAME" /> รายงานเมตริกการใช้งานและข้อมูลการวินิจฉัย รวมถึงรายงานข้อขัดข้อง กลับมาที่ Google การตั้งค่านโยบายเป็น "ปิดใช้" จะปิดการรายงานเมตริกและข้อมูลการวินิจฉัย
+
+       การไม่ตั้งค่านโยบายจะปิดการรายงานเมตริกและข้อมูลการวินิจฉัยเสมอในอุปกรณ์ที่ไม่มีการจัดการและในอุปกรณ์ที่มีการจัดการ</translation>
 <translation id="2454228136871844693">เพิ่มประสิทธิภาพเพื่อความเสถียร</translation>
+<translation id="2456629156652006573">ส่วนตัวเท่านั้น</translation>
 <translation id="2463034609187171371">เปิดใช้ชุดการเข้ารหัส DHE ใน TLS</translation>
 <translation id="2463365186486772703">ภาษาของแอปพลิเคชัน</translation>
 <translation id="2463832514638083341">นโยบายนี้ควบคุมระยะเวลาในการจัดเก็บข้อมูลเมตาของงานพิมพ์ในอุปกรณ์โดยมีหน่วยเป็นวัน
@@ -1127,9 +1137,16 @@
       เรานำนโยบายนี้ออกไปแล้วในเวอร์ชัน M77
       นโยบายนี้จะใช้กับหน้าจอการลงชื่อเข้าใช้ โปรดดูนโยบาย <ph name="SITE_PER_PROCESS_POLICY_NAME" /> ด้วยซึ่งใช้กับเซสชันของผู้ใช้ ขอแนะนำให้ตั้งค่าของนโยบายทั้งสองเป็นค่าเดียวกัน หากค่าไม่ตรงกัน อาจเกิดความล่าช้าเวลาเข้าสู่เซสชันของผู้ใช้ และระบบจะใช้ค่าที่นโยบายผู้ใช้ระบุไว้
       </translation>
+<translation id="2702023190395322609">เปิดใช้คำแนะนำสื่อ</translation>
 <translation id="2706708761587205154">อนุญาตให้พิมพ์เฉพาะเมื่อมี PIN เท่านั้น</translation>
 <translation id="2707873794476722903">Google Safe Browsing ทำงานในโหมดมาตรฐาน</translation>
 <translation id="2710534340210290498">หากตั้งค่านโยบายนี้เป็น "เท็จ" ผู้ใช้จะล็อกหน้าจอไม่ได้ (จะทำได้เฉพาะออกจากระบบเซสชันผู้ใช้) หากตั้งค่าเป็น "จริง" หรือไม่ได้ตั้งค่า ผู้ใช้ที่ตรวจสอบสิทธิ์ด้วยรหัสผ่านจะล็อกหน้าจอได้</translation>
+<translation id="2716623398185506073">การตั้งค่านโยบายเป็น "เปิดใช้" จะทำให้อุปกรณ์ที่ลงทะเบียนไว้รายงานสถิติด้านฮาร์ดแวร์และตัวระบุที่เกี่ยวข้องกับพลังงาน
+
+      การตั้งค่านโยบายเป็น "ปิดใช้" หรือไม่ได้ตั้งค่าจะทำให้อุปกรณ์ที่ลงทะเบียนไว้ไม่รายงานสถิติด้านพลังงาน</translation>
+<translation id="2725855586003209701">การตั้งค่านโยบายเป็น "เปิดใช้" หรือไม่ได้ตั้งค่าจะทำให้อุปกรณ์ที่ลงทะเบียนไว้รายงานรายชื่อผู้ใช้อุปกรณ์ที่ลงชื่อเข้าใช้เมื่อเร็วๆ นี้
+
+      การตั้งค่านโยบายเป็น "ปิดใช้" จะทำให้อุปกรณ์ที่ลงทะเบียนไว้ไม่รายงานรายชื่อผู้ใช้</translation>
 <translation id="2731627323327011390">ปิดการใช้งานใบรับรอง <ph name="PRODUCT_OS_NAME" /> สำหรับแอป ARC</translation>
 <translation id="2742843273354638707">ซ่อนแอป Chrome เว็บสโตร์ และลิงก์ส่วนท้ายจากหน้าแท็บใหม่ และเครื่องเรียกใช้งานแอป <ph name="PRODUCT_OS_NAME" />
 
@@ -1248,6 +1265,17 @@
 
       หากไม่ได้ตั้งค่านโยบายนี้ ระบบจะไม่มีการกรองและใช้เซิร์ฟเวอร์การพิมพ์ทั้งหมดในการค้นหา</translation>
 <translation id="2877225735001246144">ปิดใช้งานการค้นหา CNAME เมื่อมีการเจรจาตรวจสอบสิทธิ์ Kerberos</translation>
+<translation id="2886215882246310669">ควบคุมว่า <ph name="PRODUCT_OS_NAME" /> จะอนุญาตให้เพิ่มบัญชีผู้ใช้ Family Link บัญชีใหม่ลงในอุปกรณ์หรือไม่
+      นโยบายนี้จะมีประโยชน์เมื่อใช้ร่วมกับ <ph name="DEVICE_USER_ALLOWLIST_POLICY_NAME" /> ซึ่งจะอนุญาตให้มีการเพิ่มบัญชี Family Link นอกเหนือจากบัญชีที่ระบุไว้ในรายการที่อนุญาต
+      นโยบายนี้ไม่มีผลต่อลักษณะการทำงานของนโยบายลงชื่อเข้าใช้อื่นๆ กล่าวโดยเจาะจงคือจะไม่มีผลในกรณีต่อไปนี้
+      - มีการปิดใช้การเพิ่มผู้ใช้ใหม่ในอุปกรณ์ด้วยนโยบาย <ph name="DEVICE_ALLOW_NEW_USERS_POLICY_NAME" />
+      - มีการอนุญาตให้เพิ่มผู้ใช้ทั้งหมดด้วยนโยบาย <ph name="DEVICE_USER_ALLOWLIST_POLICY_NAME" />
+
+      หากตั้งค่านโยบายนี้เป็น "เท็จ" (หรือไม่กำหนดค่า) กฎเพิ่มเติมอื่นๆ จะไม่มีผลกับบัญชี Family Link
+      หากตั้งค่านโยบายนี้เป็น "จริง" ระบบจะอนุญาตให้เพิ่มบัญชีผู้ใช้ Family Link บัญชีใหม่นอกเหนือจากที่ระบุไว้ใน <ph name="DEVICE_USER_ALLOWLIST_POLICY_NAME" /></translation>
+<translation id="2886969306951284125">หากแอป Android เปิดอยู่ การตั้งค่านโยบายเป็น "จริง" ก็จะทำให้อุปกรณ์ที่ลงทะเบียนไว้รายงานข้อมูลสถานะ Android
+
+      การตั้งค่านโยบายเป็น "ปิดใช้" หรือไม่ได้ตั้งค่าจะทำให้อุปกรณ์ที่ลงทะเบียนไว้ไม่รายงานข้อมูลสถานะ Android</translation>
 <translation id="2890645751406497668">ให้สิทธิ์เว็บไซต์เหล่านี้โดยอัตโนมัติในการเชื่อมต่อกับอุปกรณ์ USB ที่มีรหัสผู้ให้บริการและรหัสผลิตภัณฑ์ที่ระบุ</translation>
 <translation id="2892414556511568464">จำกัดโหมดการพิมพ์ 2 ด้าน ระบบจะถือว่าไม่มีข้อจำกัดหากไม่ได้ตั้งค่านโยบายหรือค่าว่างเปล่า</translation>
 <translation id="2893546967669465276">ส่งบันทึกของระบบไปยังเซิร์ฟเวอร์การจัดการ</translation>
@@ -1270,6 +1298,10 @@
 <translation id="2905984450136807296">อายุการใช้งานของแคชข้อมูลการตรวจสอบสิทธิ์</translation>
 <translation id="2906874737073861391">รายการส่วนขยายของ AppPack</translation>
 <translation id="2908277604670530363">จำนวนสูงสุดของการเชื่อมต่อพร็อกซีเซิร์ฟเวอร์พร้อมกัน</translation>
+<translation id="2919544577647246857">กำหนดรายชื่อผู้ใช้ที่ได้รับอนุญาตให้เข้าสู่ระบบอุปกรณ์ โดยใช้รูปแบบ <ph name="USER_ALLOWLIST_ENTRY_FORMAT" /> เช่น <ph name="USER_WHITELIST_ENTRY_EXAMPLE" /> หากต้องการอนุญาตผู้ใช้ใดก็ได้ในโดเมน ให้ใช้รูปแบบ <ph name="USER_ALLOWLIST_ENTRY_WILDCARD" />
+
+      หากไม่กำหนดค่านโยบายนี้ ก็จะไม่มีการจำกัดผู้ใช้ที่ได้รับอนุญาตให้ลงชื่อเข้าใช้ โปรดทราบว่าการสร้างผู้ใช้ใหม่ยังคงต้องมีการกำหนดค่าของนโยบาย <ph name="DEVICE_ALLOW_NEW_USERS_POLICY_NAME" /> อย่างเหมาะสม
+      หากมีการเปิดใช้ <ph name="DEVICE_FAMILY_LINK_ACCOUNTS_ALLOWED_POLICY_NAME" /> ระบบจะอนุญาตให้เพิ่มผู้ใช้ Family Link นอกเหนือจากบัญชีที่ระบุไว้ในนโยบายนี้</translation>
 <translation id="2921222258441684334">การตั้งค่านโยบายเป็น 1 จะให้เว็บไซต์ติดตามสถานที่ตั้งจริงของผู้ใช้เป็นสถานะเริ่มต้นได้ การตั้งค่านโยบายเป็น 2 จะปฏิเสธการติดตามนี้โดยค่าเริ่มต้น คุณตั้งค่านี้ได้เพื่อถามทุกครั้งที่เว็บไซต์ต้องการติดตามสถานที่ตั้งจริงของผู้ใช้
 
       การไม่ตั้งค่านโยบายนี้หมายความว่านโยบาย <ph name="ASK_GEOLOCATION_POLICY_NAME" /> จะมีผล แต่ผู้ใช้เปลี่ยนการตั้งค่านี้ได้</translation>
@@ -1485,6 +1517,7 @@
       หากไม่ได้ตั้งค่าไว้ ค่าเริ่มต้นจะเป็น 0 องศา และผู้ใช้เปลี่ยนค่าได้ตามต้องการ ในกรณีนี้ ระบบจะไม่ใช้ค่าเริ่มต้นซ้ำเมื่อรีสตาร์ท</translation>
 <translation id="3264793472749429012">การเข้ารหัสของผู้ให้บริการการค้นหาเริ่มต้น</translation>
 <translation id="3273221114520206906">การตั้งค่า JavaScript เริ่มต้น</translation>
+<translation id="328347261792478720">โดยค่าเริ่มต้น เบราว์เซอร์จะแสดงคำแนะนำสื่อที่มีการปรับเปลี่ยนในแบบของผู้ใช้ การตั้งค่านโยบายนี้เป็น "ปิดใช้" จะทำให้ระบบซ่อนคำแนะนำเหล่านี้ไม่ให้ผู้ใช้เห็น การตั้งค่านโยบายนี้เป็น "เปิดใช้" หรือไม่ได้ตั้งค่าจะทำให้ระบบแสดงคำแนะนำสื่อต่อผู้ใช้</translation>
 <translation id="3284094172359247914">ควบคุมการใช้ WebUSB API</translation>
 <translation id="3288595667065905535">ช่องเผยแพร่</translation>
 <translation id="3292147213643666827">ช่วยให้ <ph name="PRODUCT_NAME" /> ทำหน้าที่เป็นพร็อกซีระหว่าง <ph name="CLOUD_PRINT_NAME" /> และเครื่องพิมพ์แบบดั้งเดิมที่เชื่อมต่อกับเครื่อง
@@ -1501,6 +1534,9 @@
       เราจะนำนโยบายนี้ออกใน Chrome 88
 
       โปรดดู https://www.chromestatus.com/feature/4664843055398912</translation>
+<translation id="3302829897293005699">การตั้งค่านโยบายเป็น "เปิดใช้" หรือไม่ได้ตั้งค่าจะทำให้อุปกรณ์ที่ลงทะเบียนไว้รายงานข้อมูลเซสชันคีออสก์ที่ใช้งานอยู่ เช่น รหัสและเวอร์ชันของแอปพลิเคชัน
+
+      การตั้งค่านโยบายเป็น "ปิดใช้" จะทำให้อุปกรณ์ที่ลงทะเบียนไว้ไม่รายงานข้อมูลเซสชันคีออสก์ที่ใช้งานอยู่</translation>
 <translation id="3303911765031636277">นโยบายการกำหนดค่าสำหรับ OnFileAttached Chrome Enterprise Connector</translation>
 <translation id="3304662785258434098">ช่วยให้คุณกำหนดได้ว่าจะให้ผู้ใช้เพิ่มข้อยกเว้นเพื่ออนุญาตเนื้อหาผสมในเว็บไซต์ที่เจาะจงได้หรือไม่
 
@@ -1531,6 +1567,10 @@
 <translation id="3345682490796432751">การตั้งค่านโยบายเป็น "เปิดใช้" หมายความว่าระบบจะใช้ปลั๊กอินเก่าเป็นปลั๊กอินปกติ การตั้งค่านโยบายเป็น "ปิดใช้" หมายความว่าจะไม่มีการใช้ปลั๊กอินเก่า
 
       การไม่ตั้งค่านโยบายหมายความว่าระบบจะขออนุญาตผู้ใช้เพื่อเรียกใช้ปลั๊กอินเก่า</translation>
+<translation id="3348799281602260763">หากเปิดใช้ การเชื่อมต่อแบบเพียร์ WebRTC จะดาวน์เกรดเป็นโปรโตคอล TLS/DTLS เวอร์ชันที่ล้าสมัย (DTLS 1.0, TLS 1.0 และ TLS 1.1) ได้
+      เมื่อปิดใช้นโยบายนี้หรือไม่ได้ตั้งค่า ระบบจะปิดใช้เวอร์ชัน TLS/DTLS เหล่านี้
+
+      นโยบายนี้เป็นแบบชั่วคราวและระบบจะนำออกใน <ph name="PRODUCT_NAME" /> เวอร์ชันในอนาคต</translation>
 <translation id="3356657927302977341">กำหนดค่าว่าจะให้ <ph name="PRODUCT_NAME" /> ใน Linux ใช้การแจ้งเตือนดั้งเดิมหรือไม่
 
 หากตั้งค่าเป็น "จริง" หรือไม่ได้ตั้งค่าไว้ <ph name="PRODUCT_NAME" /> จะได้รับอนุญาตให้ใช้การแจ้งเตือนดั้งเดิม
@@ -1811,6 +1851,9 @@
 <translation id="3709266154059827597">กำหนดค่ารายการที่ไม่อนุญาตสำหรับการติดตั้งส่วนขยาย</translation>
 <translation id="3711895659073496551">ระงับการใช้งาน</translation>
 <translation id="3715569262675717862">การตรวจสอบสิทธิ์ที่ใช้ใบรับรองไคลเอ็นต์</translation>
+<translation id="3727675072430693164">การตั้งค่านโยบายเป็น "เปิดใช้" จะทำให้อุปกรณ์ที่ลงทะเบียนไว้รายงานสถิติด้านฮาร์ดแวร์สำหรับคอมโพเนนต์ SoC
+
+      การตั้งค่านโยบายเป็น "ปิดใช้" หรือไม่ได้ตั้งค่าจะทำให้อุปกรณ์ที่ลงทะเบียนไว้ไม่รายงานสถิติ</translation>
 <translation id="3736879847913515635">เปิดใช้การเพิ่มบุคคลในการจัดการผู้ใช้</translation>
 <translation id="3737890474637805114">บล็อกการดาวน์โหลดไฟล์ขนาดใหญ่</translation>
 <translation id="3748900290998155147">ระบุว่าอนุญาตการทำงานขณะล็อกหรือไม่ ส่วนขยายและแอป ARC อาจขอการทำงานขณะล็อก โดยส่วนขยายจะขอผ่าน Power Management Extension API
@@ -1821,6 +1864,9 @@
 <translation id="375266612405883748">จำกัดช่วงพอร์ต UDP ที่โฮสต์การเข้าถึงระยะไกลในเครื่องนี้ใช้
 
           หากไม่ได้ตั้งค่านโยบายหรือตั้งค่าเป็นสตริงว่าง โฮสต์การเข้าถึงระยะไกลจะได้รับอนุญาตให้ใช้พอร์ตใดก็ได้ที่ว่างอยู่ เว้นแต่ว่าจะมีการปิดใช้นโยบาย <ph name="REMOTE_ACCESS_HOST_FIREWALL_TRAVERSAL_POLICY_NAME" /> ซึ่งในกรณีนี้ โฮสต์การเข้าถึงระยะไกลจะใช้พอร์ต UDP ในช่วง 12400-12409</translation>
+<translation id="3755237588083934849">การตั้งค่านโยบายจะกำหนดความถี่ในการส่งการอัปโหลดสถานะอุปกรณ์เป็นมิลลิวินาที ค่าขั้นต่ำที่อนุญาตคือ 60 วินาที
+
+      หากไม่ได้ตั้งค่า ระบบจะใช้ช่วงเวลาเริ่มต้น 3 ชั่วโมง</translation>
 <translation id="3756011779061588474">บล็อกโหมดนักพัฒนาซอฟต์แวร์</translation>
 <translation id="3758089716224084329">ช่วยให้คุณสามารถระบุพร็อกซีเซิร์ฟเวอร์ที่ <ph name="PRODUCT_NAME" /> ใช้ได้และป้องกันไม่ให้ผู้ใช้เปลี่ยนการตั้งค่าพร็อกซีเซิร์ฟเวอร์
 
@@ -2262,6 +2308,7 @@
       หากไม่ได้ตั้งค่านโยบายนี้ Google Safe Browsing จะทำงานในโหมดการปกป้องแบบมาตรฐาน แต่ผู้ใช้จะเปลี่ยนการตั้งค่านี้ได้
 
       ดูข้อมูลเพิ่มเติมเกี่ยวกับ Google Safe Browsing ได้ที่ https://developers.google.com/safe-browsing</translation>
+<translation id="4402887080007986374">เวอร์ชันที่ถูกต้องของข้อกำหนดในการให้บริการของ Edu Coexistence</translation>
 <translation id="4408428864159735559">รายการพื้นที่แชร์ไฟล์ของเครือข่ายที่กำหนดค่าไว้ล่วงหน้า</translation>
 <translation id="4410236409016356088">เปิดใช้การควบคุมปริมาณแบนด์วิดท์ของเครือข่าย</translation>
 <translation id="441217499641439905">ปิดใช้ Google ไดรฟ์ผ่านการเชื่อมต่อเครือข่ายมือถือในแอป "ไฟล์" ของ <ph name="PRODUCT_OS_NAME" /></translation>
@@ -2444,6 +2491,13 @@
           สำหรับรูปแบบตัวอย่าง โปรดดูที่ https://www.chromium.org/developers/how-tos/chrome-frame-getting-started</translation>
 <translation id="467449052039111439">เปิดรายการ URL</translation>
 <translation id="4674871290487541952">อนุญาตอัลกอริทึมที่ไม่ปลอดภัยในการตรวจสอบความสมบูรณ์ของการอัปเดตและการติดตั้งส่วนขยาย</translation>
+<translation id="4677605038200415894">การตั้งค่านโยบายจะให้คุณสร้างรายการรูปแบบ URL ซึ่งระบุเว็บไซต์ที่ได้รับสิทธิ์โดยอัตโนมัติให้เข้าถึงอุปกรณ์ USB ที่มีรหัสผู้ให้บริการและรหัสผลิตภัณฑ์ที่กำหนด โดยแต่ละรายการย่อยในรายการจะต้องมีอุปกรณ์และ URL นโยบายจึงจะมีผล แต่ละรายการในอุปกรณ์อาจมีช่องรหัสผู้ให้บริการและรหัสผลิตภัณฑ์ รหัสที่คุณไม่ได้รวมไว้ในรายการจะถือว่าเป็นไวลด์การ์ดโดยมีข้อยกเว้นข้อเดียว นั่นคือคุณจะระบุรหัสผลิตภัณฑ์โดยไม่ระบุรหัสผู้ให้บริการด้วยไม่ได้ มิเช่นนั้นนโยบายจะไม่มีผล
+
+      โมเดลสิทธิ์ USB ใช้ URL ที่ส่งคำขอและ URL ที่มีการฝัง (ของเว็บไซต์กรอบระดับบนสุด) เพื่อให้สิทธิ์ URL ที่ส่งคำขอในการเข้าถึงอุปกรณ์ USB โดย URL ที่ส่งคำขออาจต่างจาก URL ที่มีการฝังเมื่อมีการโหลดเว็บไซต์ที่ส่งคำขอใน iframe ดังนั้นช่อง "urls" อาจมีสตริง URL ได้ถึง 2 สตริงโดยคั่นด้วยเครื่องหมายจุลภาคเพื่อระบุ URL เหล่านี้ หากคุณระบุ URL เพียงรายการเดียว ระบบจะให้สิทธิ์เข้าถึงอุปกรณ์ USB ที่เกี่ยวข้องเมื่อ URL ของเว็บไซต์ที่ส่งคำขอตรงกับ URL นี้ไม่ว่าสถานะการฝังจะเป็นอย่างไร URL ในช่อง "urls" ต้องเป็น URL ที่ถูกต้อง มิเช่นนั้น ระบบจะไม่สนใจนโยบายนี้
+
+      การไม่ตั้งค่านโยบายหมายความว่า <ph name="DEFAULT_WEB_USB_GUARD_SETTING_POLICY_NAME" /> จะมีผลหากตั้งค่าไว้ แต่หากไม่ได้ตั้งค่าไว้ การตั้งค่าส่วนตัวของผู้ใช้จะมีผล
+
+      รูปแบบ URL ในนโยบายนี้ไม่ควรขัดแย้งกับรูปแบบที่กำหนดค่าผ่าน <ph name="WEB_USB_BLOCKED_FOR_URLS_POLICY_NAME" /> หากขัดแย้งกัน นโยบายนี้จะมีความสำคัญสูงกว่า <ph name="WEB_USB_BLOCKED_FOR_URLS_POLICY_NAME" /> และ <ph name="WEB_USB_ASK_FOR_URLS_POLICY_NAME" /></translation>
 <translation id="4680936297850947973">เลิกใช้งานไปแล้วใน M68 โปรดใช้ DefaultPopupsSetting แทน
 
       ดูคำอธิบายฉบับเต็มได้ที่ https://www.chromestatus.com/features/5675755719622656
@@ -2851,6 +2905,9 @@
 
       หากไม่ได้ตั้งค่านโยบายนี้ในเวอร์ชันตั้งแต่ M76 ลงมา โดยค่าเริ่มต้นของ <ph name="PRODUCT_NAME" /> จะรวบรวมหรืออัปโหลดบันทึกเหล่านี้ไม่ได้ เริ่มตั้งแต่เวอร์ชัน M77 ขึ้นไป โดยค่าเริ่มต้นของ <ph name="PRODUCT_NAME" /> จะรวบรวมและอัปโหลดบันทึกเหล่านี้ได้จากโปรไฟล์ส่วนใหญ่ที่ได้รับผลกระทบจากนโยบายองค์กรในระดับผู้ใช้บนระบบคลาวด์ ตั้งแต่เวอร์ชัน M77 ขึ้นไป รวมถึงเวอร์ชัน M80 โดยค่าเริ่มต้น <ph name="PRODUCT_NAME" /> จะรวบรวมและอัปโหลดบันทึกเหล่านี้ได้จากโปรไฟล์ที่ได้รับผลกระทบจากการจัดการภายในองค์กรของ <ph name="PRODUCT_NAME" /></translation>
 <translation id="5331746669335642668">นโยบายระบบคลาวด์ของ <ph name="PRODUCT_NAME" /> จะลบล้างนโยบายแพลตฟอร์ม</translation>
+<translation id="5340105431123046323">การตั้งค่านโยบายเป็น "เปิดใช้" หรือไม่ได้ตั้งค่าจะทำให้อุปกรณ์ที่ลงทะเบียนไว้รายงานรายการอินเทอร์เฟซเครือข่ายพร้อมด้วยประเภทและที่อยู่ฮาร์ดแวร์
+
+      การตั้งค่านโยบายเป็น "ปิดใช้" หรือไม่ได้ตั้งค่าจะทำให้อุปกรณ์ที่ลงทะเบียนไว้ไม่รายงานอินเทอร์เฟซเครือข่าย</translation>
 <translation id="5346587320074666194">บล็อกสิทธิ์เข้าถึงเซ็นเซอร์ในเว็บไซต์เหล่านี้</translation>
 <translation id="5362531528507578966">ลบล้างโหมดการพิมพ์กราฟิกพื้นหลังที่เป็นค่าเริ่มต้น</translation>
 <translation id="5365476955714838841">พารามิเตอร์บรรทัดคำสั่งสำหรับเบราว์เซอร์สำรอง</translation>
@@ -3125,6 +3182,8 @@
       หมายเหตุ: คั่นชื่อเซิร์ฟเวอร์หลายรายการด้วยเครื่องหมายจุลภาค ใช้ไวลด์การ์ด (<ph name="WILDCARD_VALUE" />) ได้</translation>
 <translation id="5645779841392247734">อนุญาตให้ใช้คุกกี้บนไซต์เหล่านี้</translation>
 <translation id="5646234199535103501">นโยบายการกำหนดค่าสำหรับเครื่องมือเชื่อมต่อ Chrome Enterprise OnBulkDataEntry</translation>
+<translation id="5652250453612826983">ควบคุมนโยบายการควบคุมดูแลโดยผู้ปกครองซึ่งใช้กับบัญชีของเด็กเท่านั้น
+      นโยบายเหล่านี้ไม่ได้ตั้งค่าในคอนโซลผู้ดูแลระบบ แต่เซิร์ฟเวอร์ Kids API เป็นผู้กำหนดค่าโดยตรง</translation>
 <translation id="5656177735561364047">เปิดใช้ฟีเจอร์คลิปบอร์ดที่แชร์</translation>
 <translation id="5657576769650058122">การตั้งค่านโยบายเป็น "เปิดใช้" จะเปิดแป้นพิมพ์เสมือนบนหน้าจอ (อุปกรณ์อินพุต Chrome OS) ไว้ตลอด การตั้งค่านโยบายเป็น "ปิดใช้" จะปิดแป้นพิมพ์นี้ไว้ตลอด
 
@@ -3235,6 +3294,9 @@
       แต่ละรายการในลิสต์นี้เป็นรูปแบบการจับคู่สไตล์ส่วนขยาย (ดู https://developer.chrome.com/extensions/match_patterns) ผู้ใช้จะติดตั้งรายการต่างๆ ได้โดยง่ายจาก URL ที่ตรงกับรายการในลิสต์นี้ ทั้งตำแหน่งของไฟล์ *.crx และหน้าเว็บที่เริ่มการดาวน์โหลด (URL ที่มา) จะต้องได้รับอนุญาตจากรูปแบบเหล่านี้
 
       <ph name="EXTENSION_INSTALL_BLOCKLIST_POLICY_NAME" /> จะมีความสำคัญเหนือนโยบายนี้ ซึ่งหมายความว่าระบบจะไม่ติดตั้งส่วนขยายที่อยู่ในรายการที่บล็อก แม้ว่าจะปรากฏอยู่ในเว็บไซต์ในลิสต์นี้ก็ตาม</translation>
+<translation id="5860010874344790473">การตั้งค่านโยบายเป็น "เปิดใช้" จะส่งบันทึกของระบบไปที่เซิร์ฟเวอร์การจัดการเพื่อให้ผู้ดูแลระบบตรวจสอบได้
+
+      การตั้งค่านโยบายเป็น "ปิดใช้" หรือไม่ได้ตั้งค่าจะไม่รายงานบันทึกของระบบ</translation>
 <translation id="5861856285460256766">การกำหนดค่ารหัสการเข้าถึงของผู้ปกครอง</translation>
 <translation id="5868414965372171132">การกำหนดค่าเครือข่ายระดับผู้ใช้</translation>
 <translation id="587242272905978723">อนุญาตให้ <ph name="PLUGIN_VM_NAME" /> รวบรวมข้อมูลการใช้งาน <ph name="PLUGIN_VM_NAME" />
@@ -3732,6 +3794,17 @@
       การตั้งค่าเป็น "จริง" จะอนุญาตให้อุปกรณ์ทริกเกอร์ Powerwash
       หากไม่ได้ตั้งค่า นโยบายจะมีค่าเริ่มต้นเป็น "จริง" ซึ่งหมายความว่าจะอนุญาตให้อุปกรณ์ทำ Powerwash
       </translation>
+<translation id="6614020900120353107">ควบคุมว่าจะใช้ไคลเอ็นต์ DNS ในตัวใน <ph name="PRODUCT_NAME" /> หรือไม่
+
+      การเลือกนี้ไม่มีผลกับเซิร์ฟเวอร์ DNS ที่จะใช้ แต่มีผลกับกลุ่มซอฟต์แวร์ที่ใช้ในการสื่อสารกับเซิร์ฟเวอร์ดังกล่าวเท่านั้น เช่น หากมีการกำหนดค่าให้ระบบปฏิบัติการใช้เซิร์ฟเวอร์ DNS ขององค์กร ไคลเอ็นต์ DNS ในตัวก็จะใช้เซิร์ฟเวอร์เดียวกันนี้ด้วย อย่างไรก็ตาม ไคลเอ็นต์ DNS ในตัวอาจจะสื่อสารกับเซิร์ฟเวอร์ต่างๆ ต่างกันไปโดยใช้โปรโตคอลที่เกี่ยวข้องกับ DNS ซึ่งทันสมัยมากขึ้น เช่น DNS-over-TLS
+
+      นโยบายนี้ไม่มีผลต่อ DNS-over-HTTPS โปรดดูนโยบาย <ph name="DNS_OVER_HTTPS_MODE_POLICY_NAME" /> เพื่อเปลี่ยนแปลงลักษณะการทำงานดังกล่าว
+
+      หากตั้งค่านโยบายนี้เป็น "จริง" ระบบจะใช้ไคลเอ็นต์ DNS ในตัว (หากมี)
+
+      หากตั้งค่านโยบายนี้เป็น "เท็จ" จะไม่มีการใช้ไคลเอ็นต์ DNS ในตัว
+
+      หากไม่มีการตั้งค่านโยบายนี้ ไคลเอ็นต์ DNS ในตัวจะเปิดใช้โดยค่าเริ่มต้นใน macOS, Android (เมื่อปิดใช้ทั้ง DNS ส่วนตัวและ VPN) และ ChromeOS และผู้ใช้จะเปลี่ยนได้ว่าจะใช้ไคลเอ็นต์ DNS ในตัวหรือไม่ ด้วยการแก้ไข chrome://flags หรือระบุการตั้งค่าสถานะบรรทัดคำสั่ง</translation>
 <translation id="6621839881150363218">การตั้งค่านโยบายเป็น "เปิดใช้" จะแยกเว็บไซต์ทั้งหมด (แต่ละเว็บไซต์จะทำงานด้วยกระบวนการของตัวเอง) การตั้งค่านโยบายเป็น "ปิดใช้" จะทำให้ไม่มีการแยกเว็บไซต์อย่างชัดแจ้งและจะปิดการทดลองใช้งานจริงของ IsolateOriginsAndroid และ SitePerProcessAndroid ผู้ใช้จะยังเปิดใช้นโยบายด้วยตนเองได้
 
       การไม่ตั้งค่านโยบายจะทำให้ผู้ใช้เปลี่ยนการตั้งค่านี้ได้
@@ -3743,6 +3816,21 @@
 <translation id="6628043374475466084">รูปแบบ URL ที่จะไม่มีการตรวจสอบการละเมิดกฎการปกป้องข้อมูลที่ละเอียดอ่อนในเนื้อหาที่อัปโหลด</translation>
 <translation id="6628120204569232711">รายงานสถานะของพื้นที่เก็บข้อมูล</translation>
 <translation id="663685822663765995">จำกัดโหมดสีการพิมพ์</translation>
+<translation id="6640989746632867803">การตั้งค่านโยบายนี้หมายความว่าผู้ใช้จะเลี่ยงการตัดสินเกี่ยวกับความปลอดภัยของการดาวน์โหลดไม่ได้
+
+       การตั้งค่านโยบายเป็น
+
+      * บล็อกการดาวน์โหลดที่เป็นอันตราย หมายความว่าระบบจะอนุญาตการดาวน์โหลดทั้งหมด ยกเว้นรายการที่มีคำเตือนด้านความปลอดภัย
+
+      * บล็อกการดาวน์โหลดที่อาจเป็นอันตราย หมายความว่าระบบจะอนุญาตการดาวน์โหลดทั้งหมด ยกเว้นรายการที่มีคำเตือนด้านความปลอดภัยว่าเป็นการดาวน์โหลดที่อาจเป็นอันตราย
+
+      * บล็อกการดาวน์โหลดทั้งหมด หมายความว่าระบบจะบล็อกการดาวน์โหลดทุกรายการ
+
+      * บล็อกการดาวน์โหลดที่ประสงค์ร้าย หมายความว่าระบบจะอนุญาตการดาวน์โหลดทั้งหมด ยกเว้นรายการที่ประเมินแล้วและมั่นใจมากว่าเป็นมัลแวร์ ซึ่งต่างกับการดาวน์โหลดที่เป็นอันตรายตรงที่ไม่ได้พิจารณาประเภทของไฟล์ แต่พิจารณาที่โฮสต์
+
+      * ไม่มีข้อจำกัดพิเศษ หมายความว่าการดาวน์โหลดจะต้องผ่านข้อจำกัดด้านความปลอดภัยทั่วไปโดยอิงจากผลการวิเคราะห์ด้านความปลอดภัย
+
+      หมายเหตุ: ข้อจำกัดเหล่านี้มีผลกับการดาวน์โหลดที่ทริกเกอร์จากเนื้อหาของหน้าเว็บ รวมถึงตัวเลือกเมนู "ดาวน์โหลดลิงก์..." ด้วย โดยข้อจำกัดเหล่านี้ไม่มีผลกับการดาวน์โหลดของหน้าที่แสดงอยู่ หรือกับการบันทึกเป็น PDF จากตัวเลือกการพิมพ์ อ่านเพิ่มเติมเกี่ยวกับ Google Safe Browsing (https://developers.google.com/safe-browsing)</translation>
 <translation id="6641981670621198190">ปิดใช้งานการสนับสนุน API ของกราฟิก 3 มิติ</translation>
 <translation id="6646056064606561298">เปิดใช้นโยบายการจัดการพลังงานสำหรับการบูตด้วย AC
 
@@ -3853,6 +3941,9 @@
       หากไม่ได้ตั้งค่านโยบายนี้ในอุปกรณ์ที่มีการจัดการ อุปกรณ์ดังกล่าวจะเรียกใช้เครื่องเสมือนไม่ได้ อุปกรณ์ที่ไม่มีการจัดการจะเรียกใช้เครื่องเสมือนได้</translation>
 <translation id="6786747875388722282">ส่วนขยาย</translation>
 <translation id="6786967369487349613">ตั้งค่าไดเรกทอรีโปรไฟล์โรมมิ่ง</translation>
+<translation id="6789422336869764846">การตั้งค่านโยบายเป็น "เปิดใช้" หรือไม่ได้ตั้งค่าจะทำให้อุปกรณ์ที่ลงทะเบียนไว้รายงานสถานะโหมดนักพัฒนาซอฟต์แวร์ของอุปกรณ์เมื่อเปิดเครื่อง
+
+      การตั้งค่านโยบายเป็น "ปิดใช้" จะทำให้อุปกรณ์ที่ลงทะเบียนไว้ไม่รายงานสถานะโหมดนักพัฒนาซอฟต์แวร์</translation>
 <translation id="6795485990775913659">อนุญาตให้พิมพ์เท่านั้นเมื่อไม่มี PIN</translation>
 <translation id="6810445994095397827">ปิดกั้น JavaScript บนไซต์เหล่านี้</translation>
 <translation id="6813263547126514821">การเปิดและปิดระบบ</translation>
@@ -4394,6 +4485,9 @@
 <translation id="7458437477941640506">อย่าย้อนกลับไปเวอร์ชันเป้าหมายหากใช้ระบบปฏิบัติการเวอร์ชันที่ใหม่กว่า การอัปเดตต่างๆ จะถูกปิดการใช้งานเช่นกัน</translation>
 <translation id="7459601923199346224">ควบคุมนโยบายด้านผู้ใช้และอุปกรณ์สำหรับการจัดการใบรับรอง</translation>
 <translation id="7464991223784276288">จำกัดคุกกี้จาก URL ที่ตรงกันให้อยู่ในเซสชันปัจจุบัน</translation>
+<translation id="7468182772656807573">การตั้งค่านโยบายจะกำหนดความถี่ในการส่งการตรวจสอบแพ็กเก็ตเครือข่ายเป็นมิลลิวินาที ช่วงเวลาอาจอยู่ที่ตั้งแต่ 30 วินาทีถึง 24 ชั่วโมง ค่าที่ไม่อยู่ในช่วงดังกล่าวจะถูกจำกัดตามช่วงนี้
+
+      หากไม่ได้ตั้งค่า ระบบจะใช้ช่วงเวลาเริ่มต้น 3 นาที</translation>
 <translation id="7469554574977894907">เปิดใช้งานคำแนะนำในการค้นหา</translation>
 <translation id="747014869399137701">การตั้งค่านโยบายเป็น 1 จะให้เว็บไซต์แสดงการแจ้งเตือนในเดสก์ท็อปได้ การตั้งค่านโยบายเป็น 2 จะปฏิเสธการแจ้งเตือนในเดสก์ท็อป
 
@@ -4656,6 +4750,7 @@
           หากไม่ได้ตั้งค่านโยบายนี้ แป้นพิมพ์ลัดของฟีเจอร์การช่วยเหลือพิเศษในหน้าจอการเข้าสู่ระบบจะเปิดใช้อยู่โดยค่าเริ่มต้น</translation>
 <translation id="7777535871204167559">ทำให้อุปกรณ์เก็บข้อมูลภายนอกเป็นแบบอ่านอย่างเดียว</translation>
 <translation id="7788511847830146438">ต่อโปรไฟล์</translation>
+<translation id="780629758750905699">อนุญาตให้มีการเพิ่มบัญชี Family Link ลงในอุปกรณ์</translation>
 <translation id="7807139251387225825">รายการของประเภทที่จะไม่รวมในการซิงค์ข้อมูล</translation>
 <translation id="7815699949432723208">นโยบายนี้เลิกใช้งานไปแล้ว โปรดใช้นโยบาย "<ph name="NATIVE_MESSAGING_ALLOWLIST_POLICY_NAME" />" แทน
 
@@ -4803,6 +4898,9 @@
       หากคุณปิดใช้การตั้งค่านี้ ผู้ใช้จะเข้าถึงฟีเจอร์ป้อนอัตโนมัติไม่ได้
 
       หากคุณเปิดใช้การตั้งค่านี้หรือไม่ได้กำหนดค่าไว้ ผู้ใช้จะยังคงเป็นผู้ควบคุมฟีเจอร์ป้อนอัตโนมัติ ซึ่งจะทำให้ผู้ใช้กำหนดค่าโปรไฟล์ป้อนอัตโนมัติและเปิดหรือปิดป้อนอัตโนมัติได้ตามที่เห็นสมควร</translation>
+<translation id="8036964468882248070">การตั้งค่านโยบายเป็น "เปิดใช้" จะทำให้อุปกรณ์ที่ลงทะเบียนไว้รายงานสถิติด้านฮาร์ดแวร์และตัวระบุของอุปกรณ์เก็บข้อมูล
+
+      การตั้งค่านโยบายเป็น "ปิดใช้" หรือไม่ได้ตั้งค่าจะทำให้อุปกรณ์ที่ลงทะเบียนไว้ไม่รายงานสถิติพื้นที่เก็บข้อมูล</translation>
 <translation id="8044493735196713914">รายงานโหมดการบูตอุปกรณ์</translation>
 <translation id="8049769137921877885">นโยบายนี้ควบคุมว่าจะรายงานข้อมูลนโยบายและเวลาในการดึงข้อมูลนโยบายหรือไม่
 
@@ -4880,6 +4978,9 @@
           หากคุณตั้งค่านโยบายนี้ ผู้ใช้จะเปลี่ยนหรือลบล้างไม่ได้
 
           หากไม่มีการตั้งค่านโยบายนี้ ระบบจะปิดฟีเจอร์ไฮไลต์เคอร์เซอร์ในขั้นต้น แต่ผู้ใช้เปิดใช้ได้ทุกเมื่อ</translation>
+<translation id="8164687848393015214">การตั้งค่านโยบายเป็น "เปิดใช้" จะส่งการตรวจสอบแพ็กเก็ตเครือข่าย (<ph name="HEARTBEATS_TERM" />) ไปยังเซิร์ฟเวอร์การจัดการเพื่อตรวจสอบสถานะออนไลน์ เพื่อให้เซิร์ฟเวอร์ตรวจสอบว่าอุปกรณ์ออฟไลน์อยู่หรือไม่
+
+      การตั้งค่านโยบายเป็น "ปิดใช้" หรือไม่ได้ตั้งค่าจะไม่ส่งแพ็กเก็ต</translation>
 <translation id="816783746144552109">กำหนดค่าเวอร์ชัน Chrome OS ขั้นต่ำที่อุปกรณ์จะใช้ได้</translation>
 <translation id="8171924760436219650">สลับปุ่มหลักของเมาส์ไปเป็นปุ่มด้านขวาในหน้าจอการเข้าสู่ระบบ</translation>
 <translation id="8176035528522326671">อนุญาตให้ผู้ใช้ขององค์กรเป็นผู้ใช้หลักแบบหลายโปรไฟล์เท่านั้น (ค่าเริ่มต้นสำหรับผู้ใช้ที่มีองค์กรเป็นผู้จัดการ)</translation>
@@ -5178,6 +5279,7 @@
 
       หากตั้งค่านโยบายนี้เป็น "เท็จ" หรือไม่ได้กำหนดค่า ผู้ใช้จะใช้เบราว์เซอร์ได้โดยไม่ต้องลงชื่อเข้าใช้ <ph name="PRODUCT_NAME" /></translation>
 <translation id="858309738002328421">บล็อกการอัปโหลดไฟล์ขนาดใหญ่</translation>
+<translation id="8583509234908413302">อนุญาตให้ TLS/DTLS เดิมดาวน์เกรดใน WebRTC</translation>
 <translation id="8584279193368801689">จำกัดโหมดการพิมพ์ด้วย PIN ระบบจะถือว่าไม่มีข้อจำกัดหากไม่ได้ตั้งค่านโยบาย หากโหมดนี้ไม่พร้อมใช้งาน ระบบจะไม่สนใจนโยบายนี้ โปรดทราบว่าฟีเจอร์การพิมพ์ด้วย PIN จะใช้ได้กับเครื่องพิมพ์ที่ใช้โปรโตคอล IPPS, HTTPS, USB หรือ IPP-over-USB เท่านั้น</translation>
 <translation id="8585558195682146109">ส่งไฟล์ที่ผู้ใช้ดาวน์โหลดไปสแกน</translation>
 <translation id="8587229956764455752">อนุญาตให้สร้างบัญชีผู้ใช้ใหม่</translation>
@@ -5385,6 +5487,9 @@
 
       รูปแบบ URL มีรูปแบบเดียวกับนโยบาย "<ph name="URL_BLOCKLIST_POLICY_NAME" />" ตามที่บันทึกไว้ที่ https://www.chromium.org/administrators/url-blacklist-filter-format
       </translation>
+<translation id="8931555638815157255">การตั้งค่านโยบายเป็น "เปิดใช้" หรือไม่ได้ตั้งค่าจะทำให้อุปกรณ์ที่ลงทะเบียนไว้รายงานระบบปฏิบัติการและเวอร์ชันเฟิร์มแวร์เป็นระยะ
+
+      การตั้งค่านโยบายเป็น "ปิดใช้" จะทำให้อุปกรณ์ที่ลงทะเบียนไว้ไม่รายงานข้อมูลเวอร์ชัน</translation>
 <translation id="8937282917198525844"> ตั้งแต่เวอร์ชัน M81 เอลิเมนต์ตัวควบคุมแบบฟอร์มมาตรฐาน (เช่น &lt;select&gt;, &lt;button&gt;, &lt;input type=date&gt;) ได้รับการปรับรูปลักษณ์ใหม่ พร้อมด้วยการช่วยเหลือพิเศษที่ได้รับการปรับปรุง และแพลตฟอร์มที่เป็นไปในทิศทางเดียวกันมากขึ้น นโยบายนี้คืนค่าเอลิเมนต์ตัวควบคุมแบบฟอร์ม "เดิม" แบบเก่าไปจนถึงเวอร์ชัน M84
 
       หากตั้งค่านโยบายนี้เป็น "จริง" ระบบจะใช้เอลิเมนต์ตัวควบคุมแบบฟอร์ม "เดิม" กับเว็บไซต์ทั้งหมด
@@ -5422,6 +5527,13 @@
 <translation id="8942616385591203339">นโยบายนี้ควบคุมว่าการขอคำยินยอมให้ซิงค์จะแสดงต่อผู้ใช้รายหนึ่งๆ ในระหว่างที่ลงชื่อเข้าใช้เป็นครั้งแรกได้หรือไม่ ตั้งค่านโยบายนี้เป็นเท็จหากไม่จำเป็นต้องขอคำยินยอมให้ซิงค์จากผู้ใช้
       หากตั้งค่าเป็นเท็จ ระบบจะไม่แสดงการขอคำยินยอมให้ซิงค์
       หากตั้งค่าเป็นจริงหรือไม่ได้ตั้งค่า ระบบจะแสดงการขอคำยินยอมให้ซิงค์</translation>
+<translation id="8943744188513019866">นโยบายนี้ระบุเวอร์ชันที่ถูกต้องในปัจจุบันของข้อกำหนดในการให้บริการของ Edu Coexistence
+      ซึ่งจะนำไปเปรียบเทียบกับเวอร์ชันที่ผู้ปกครองยอมรับล่าสุดและใช้เพื่อแจ้งให้ผู้ปกครองต่ออายุสิทธิ์เมื่อจำเป็น
+
+      เมื่อตั้งค่านโยบายนี้ ระบบจะตรวจสอบเวอร์ชันของข้อกำหนดในการให้บริการได้
+      เมื่อไม่ได้ตั้งค่านโยบายนี้ไว้ ระบบจะตรวจสอบความถูกต้องของข้อกำหนดในการให้บริการของ Edu Coexistence ไม่ได้
+
+      นโยบายนี้ใช้สำหรับผู้ใช้ Family Link เท่านั้น</translation>
 <translation id="8943934315109955032">ไม่ตรวจสอบการละเมิดกฎการปกป้องข้อมูลที่ละเอียดอ่อน</translation>
 <translation id="8947415621777543415">รายงานตำแหน่งอุปกรณ์</translation>
 <translation id="8948062138228904066">รายการที่อนุญาตสำหรับเซิร์ฟเวอร์การตรวจสอบสิทธิ์</translation>
@@ -5554,6 +5666,9 @@
       การไม่ตั้งค่านโยบายหมายความว่า <ph name="DEFAULT_PLUGINS_SETTING_POLICY_NAME" /> จะมีผลกับทุกเว็บไซต์ (หากตั้งค่าไว้) แต่หากไม่ได้ตั้งค่าไว้ การตั้งค่าส่วนตัวของผู้ใช้จะมีผล
 
       ดูข้อมูลโดยละเอียดเกี่ยวกับรูปแบบ URL ที่ถูกต้องได้ที่ https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns อย่างไรก็ตาม นโยบายนี้ไม่รองรับรูปแบบที่มีไวลด์การ์ด "*" และ "[*.]" ในโฮสต์อีกแล้วตั้งแต่รุ่น M85</translation>
+<translation id="9073405975862312795">การตั้งค่านโยบายเป็น "เปิดใช้" หรือไม่ได้ตั้งค่าจะทำให้อุปกรณ์ที่ลงทะเบียนไว้รายงานระยะเวลาเมื่อผู้ใช้กำลังใช้งานอุปกรณ์
+
+      การตั้งค่านโยบายเป็น "ปิดใช้" จะทำให้อุปกรณ์ที่ลงทะเบียนไว้ไม่บันทึกหรือรายงานจำนวนครั้งของกิจกรรม</translation>
 <translation id="9077227880520270584">ตัวจับเวลาการเข้าสู่ระบบอัตโนมัติไปยังบัญชีภายในอุปกรณ์</translation>
 <translation id="9084985621503260744">ระบุว่ากิจกรรมวิดีโอมีผลต่อการจัดการพลังงานหรือไม่</translation>
 <translation id="9088433379343318874">เปิดใช้ผู้ให้บริการเนื้อหาสำหรับผู้ใช้ภายใต้การดูแล</translation>
diff --git a/components/policy/resources/policy_templates_zh-TW.xtb b/components/policy/resources/policy_templates_zh-TW.xtb
index 01b662a..1bdee16d 100644
--- a/components/policy/resources/policy_templates_zh-TW.xtb
+++ b/components/policy/resources/policy_templates_zh-TW.xtb
@@ -615,6 +615,9 @@
           請注意,這項政策會分別套用至各個轉譯器程序,且轉譯器程序啟動時會使用這項政策最新的設定值。瀏覽器必須徹底重新啟動,以確保所有載入的分頁可收到一致的政策設定。即使不同程序採用不同的政策設定值,也不影響正常運作。</translation>
 <translation id="2030905906517501646">預設搜尋引擎關鍵字</translation>
 <translation id="203096360153626918">這項政策對 Android 應用程式沒有影響。即使將這項政策設為 <ph name="FALSE" />,Android 應用程式仍可進入全螢幕模式。</translation>
+<translation id="2037214548071298156">如果將這項政策設為啟用或不設定,已註冊的裝置會回報 CPU/RAM 使用量等硬體統計資料。
+
+      如果將這項政策設為停用,已註冊的裝置不會回報硬體統計資料。</translation>
 <translation id="2040479044912658454">列印光柵化模式</translation>
 <translation id="2043749682619281558">在登入畫面上啟用游標醒目顯示功能</translation>
 <translation id="2043770014371753404">停用的企業印表機</translation>
@@ -950,7 +953,11 @@
 
 
       在 <ph name="MS_WIN_NAME" /> 上,這項功能僅適用於已加入 <ph name="MS_AD_NAME" /> 網域的執行個體、在 Windows 10 專業版上執行的執行個體,或是已註冊 Chrome 瀏覽器雲端管理服務的執行個體。</translation>
+<translation id="2448315169529769573">如果將這項政策設為啟用,<ph name="PRODUCT_OS_NAME" />會將使用指標和診斷資料 (包括當機報告) 回報給 Google。如果將這項政策設為停用,系統會停用指標和診斷資料的報告功能。
+
+       如果未設定這項政策,系統會在未受管理的裝置上,將指標和診斷資料的報告功能保持停用,並且在受管理的裝置上保持啟用。</translation>
 <translation id="2454228136871844693">穩定性最佳化。</translation>
+<translation id="2456629156652006573">不公開</translation>
 <translation id="2463034609187171371">在傳輸層安全標準 (TLS) 中啟用 DHE 加密套件</translation>
 <translation id="2463365186486772703">應用程式語言代碼</translation>
 <translation id="2463832514638083341">這項政策可控管將列印工作中繼資料儲存在裝置上的時間範圍 (以天為單位)。
@@ -1118,11 +1125,18 @@
       這項政策已在 M77 版中移除。
       這項政策適用於登入畫面。另請查看適用於使用者工作階段的 <ph name="SITE_PER_PROCESS_POLICY_NAME" /> 政策。建議你為這兩項政策設定相同的值,如果兩者的值不相符,進入使用者工作階段時,系統可能會因為套用使用者政策指定的值而發生延遲。
       </translation>
+<translation id="2702023190395322609">啟用媒體推薦內容</translation>
 <translation id="2706708761587205154">只在 PIN 碼啟用時允許列印</translation>
 <translation id="2707873794476722903">已啟用標準模式中的安全瀏覽功能。</translation>
 <translation id="2710534340210290498">如果將這項政策設為 False,使用者將無法鎖定螢幕,只能登出使用者工作階段。
 
       如果將這項設定設為 True 或不設定,則則使用密碼通過驗證的使用者可以鎖定螢幕。</translation>
+<translation id="2716623398185506073">如果將這項政策設為啟用,已註冊的裝置會回報與電源相關的硬體統計資料和 ID。
+
+      如果將這項政策設為停用或不設定,已註冊的裝置不會回報電源統計資料。</translation>
+<translation id="2725855586003209701">如果將這項政策設為啟用或不設定,已註冊的裝置會回報近期登入的裝置使用者清單。
+
+      如果將這項政策設為停用,已註冊的裝置不會回報使用者清單。</translation>
 <translation id="2731627323327011390">禁止 ARC 應用程式使用「<ph name="PRODUCT_OS_NAME" />」憑證</translation>
 <translation id="2742843273354638707">在新分頁和 <ph name="PRODUCT_OS_NAME" />應用程式啟動畫面中隱藏 Chrome 線上應用程式商店和底端連結。
 
@@ -1238,6 +1252,17 @@
 
       如果不設定這項政策,系統不會進行篩選,並納入所有列印伺服器。</translation>
 <translation id="2877225735001246144">在交涉 Kerberos 驗證時,停用 CNAME 查詢</translation>
+<translation id="2886215882246310669">這項政策可控管 <ph name="PRODUCT_OS_NAME" />是否允許將新的 Family Link 使用者帳戶加入裝置。
+      這項政策只有在搭配 <ph name="DEVICE_USER_ALLOWLIST_POLICY_NAME" /> 時才會有作用。除了許可清單中定義的帳戶以外,這項政策也會允許 Family Link 帳戶加入裝置。
+      這項政策不會影響其他登入政策的行為。特別是在以下情況中,這項政策不會有任何作用:
+      - 已透過 <ph name="DEVICE_ALLOW_NEW_USERS_POLICY_NAME" /> 政策停用將新使用者加入裝置的功能。
+      - 已透過 <ph name="DEVICE_USER_ALLOWLIST_POLICY_NAME" /> 政策允許新增所有使用者。
+
+      如果將這項政策設為 False (或不設定),系統不會將額外的規則套用到 Family Link 帳戶。
+      如果將這項政策設為 True,除了 <ph name="DEVICE_USER_ALLOWLIST_POLICY_NAME" /> 中定義的帳戶以外,系統也會允許將新的 Family Link 使用者帳戶加入裝置。</translation>
+<translation id="2886969306951284125">如果執行 Android 應用程式的功能已啟用,將這項政策設為 True 會讓已註冊的裝置回報 Android 狀態資訊。
+
+      如果將這項政策設為停用或不設定,已註冊的裝置不會回報 Android 狀態資訊</translation>
 <translation id="2890645751406497668">自動授予權限給這些網站,以連結至指定廠商和產品 ID 的 USB 裝置。</translation>
 <translation id="2892414556511568464">限制使用雙面列印模式。如未設定這項政策或將設定留空,系統會視為未設限制。</translation>
 <translation id="2893546967669465276">將系統記錄傳送到管理伺服器</translation>
@@ -1260,6 +1285,10 @@
 <translation id="2905984450136807296">驗證資料快取生命週期</translation>
 <translation id="2906874737073861391">AppPack 擴充功能清單</translation>
 <translation id="2908277604670530363">Proxy 伺服器的並行連線數量上限</translation>
+<translation id="2919544577647246857">定義可登入裝置的使用者清單。輸入項目格式為 <ph name="USER_ALLOWLIST_ENTRY_FORMAT" /> (例如 <ph name="USER_WHITELIST_ENTRY_EXAMPLE" />)。如要允許特定網域的任意使用者登入裝置,請使用 <ph name="USER_ALLOWLIST_ENTRY_WILDCARD" /> 格式輸入項目。
+
+      如果不設定這項政策,所有使用者均可登入裝置。請注意,如要建立新使用者,則仍然需要適當地設定 <ph name="DEVICE_ALLOW_NEW_USERS_POLICY_NAME" /> 政策。
+      如果已啟用 <ph name="DEVICE_FAMILY_LINK_ACCOUNTS_ALLOWED_POLICY_NAME" />,除了這項政策中定義的帳戶以外,系統也會允許 Family Link 使用者登入裝置。</translation>
 <translation id="2921222258441684334">如果將這項政策設為 1,網站在預設狀態下會追蹤使用者所在的實際位置。如果將這項政策設為 2,網站在預設狀態下無法進行追蹤。你可以透過這項政策,規定網站必須先詢問使用者,才能追蹤其所在的實際位置。
 
       如果未設定這項政策,系統會套用 <ph name="ASK_GEOLOCATION_POLICY_NAME" /> 政策,但使用者可以變更這項設定。</translation>
@@ -1473,6 +1502,7 @@
       如果未設定,預設值為 0 度,且使用者可自行變更。在這種情況下,系統不會在裝置重新啟動時重新套用預設值。</translation>
 <translation id="3264793472749429012">預設搜尋引擎編碼</translation>
 <translation id="3273221114520206906">預設 JavaScript 設定</translation>
+<translation id="328347261792478720">在預設狀態下,瀏覽器會根據使用者顯示個人化的媒體推薦內容。如果將這項政策設為停用,瀏覽器會向使用者隱藏這類推薦內容。如果將這項政策設為啟用或不設定,瀏覽器會向使用者顯示媒體推薦內容。</translation>
 <translation id="3284094172359247914">控制 WebUSB API 使用權限</translation>
 <translation id="3288595667065905535">發布頻道</translation>
 <translation id="3292147213643666827">啟用 Proxy 功能,將 <ph name="PRODUCT_NAME" /> 當做 <ph name="CLOUD_PRINT_NAME" /> 與連接到本機的舊型印表機之間的 Proxy。
@@ -1489,6 +1519,9 @@
       這項政策將在 Chrome 第 88 版中移除。
 
       詳情請參閱 https://www.chromestatus.com/feature/4664843055398912。</translation>
+<translation id="3302829897293005699">如果將這項政策設為啟用或不設定,已註冊的裝置會回報運作中資訊站工作階段相關資訊,例如應用程式 ID 和版本。
+
+      如果將這項政策設為停用,已註冊的裝置不會回報資訊站工作階段相關資訊。</translation>
 <translation id="3303911765031636277">OnFileAttached Chrome Enterprise Connector 的配置政策</translation>
 <translation id="3304662785258434098">你可以設定使用者是否能新增例外網站,允許特定網站顯示混合內容。
 
@@ -1519,6 +1552,10 @@
 <translation id="3345682490796432751">如果將政策設為啟用,系統會將舊版外掛程式視為一般外掛程式執行。如果將這項政策設為停用,系統便不會使用舊版外掛程式。
 
       如果不設定這項政策,系統會要求使用者授權以執行舊版外掛程式。</translation>
+<translation id="3348799281602260763">如果啟用這項政策,WebRTC 對等互連可降級至傳輸層安全標準 (TLS)/DTLS 通訊協定的過時版本 (DTLS 1.0、TLS 1.0 和 TLS 1.1)。
+      如果停用或不設定這項政策,系統會停用這些傳輸層安全標準 (TLS)/DTLS 版本。
+
+      這項政策僅是暫時性措施,我們會在日後的 <ph name="PRODUCT_NAME" /> 版本中予以移除。</translation>
 <translation id="3356657927302977341">設定 Linux 上的 <ph name="PRODUCT_NAME" /> 是否要使用原生通知。
 
 如果設為 True 或未設定,則 <ph name="PRODUCT_NAME" /> 可以使用原生通知。
@@ -1795,6 +1832,9 @@
 <translation id="3709266154059827597">設定擴充功能安裝黑名單</translation>
 <translation id="3711895659073496551">暫停</translation>
 <translation id="3715569262675717862">根據用戶端憑證進行驗證</translation>
+<translation id="3727675072430693164">如果將這項政策設為啟用,已註冊的裝置會回報 SoC 元件的硬體統計資料。
+
+      如果將這項政策設為停用或不設定,已註冊的裝置不會回報這類統計資料。</translation>
 <translation id="3736879847913515635">允許在使用者管理工具中新增使用者</translation>
 <translation id="3737890474637805114">禁止下載大型檔案</translation>
 <translation id="3748900290998155147">指定是否允許使用 Wake Lock。擴充功能如要使用 Wake Lock,可以透過電源管理擴充功能 API 以及 ARC 應用程式提出要求。
@@ -1806,6 +1846,9 @@
 <translation id="375266612405883748">限制這台電腦的遠端存取主機所使用的 UDP 通訊埠範圍。
 
           如果不設定這項政策或設為空值,遠端存取主機就能使用任何可用的通訊埠;但如果 <ph name="REMOTE_ACCESS_HOST_FIREWALL_TRAVERSAL_POLICY_NAME" /> 政策設為停用,遠端存取主機將使用 12400-12409 範圍內的 UDP 通訊埠。</translation>
+<translation id="3755237588083934849">你可以透過這項政策,決定裝置狀態上傳內容的傳送頻率 (以毫秒為單位),下限值是 60 秒。
+
+      如果未設定,系統會套用 3 小時的預設間隔。</translation>
 <translation id="3756011779061588474">封鎖開發人員模式</translation>
 <translation id="3758089716224084329">允許你指定 <ph name="PRODUCT_NAME" /> 使用的 Proxy 伺服器,並禁止使用者變更 Proxy 設定。
 
@@ -2839,6 +2882,9 @@
 
       如果 M76 以下版本 (包含 M76 版) 不設定這項政策,則 <ph name="PRODUCT_NAME" /> 根據預設無法收集及上傳這類記錄。自 M77 版起,針對大多數會受到雲端使用者層級企業政策影響的設定檔,<ph name="PRODUCT_NAME" /> 根據預設可以收集及上傳這類記錄。自 M77 版起 (包含 M80 版),針對會受到 <ph name="PRODUCT_NAME" /> 內部部署管理影響的設定檔,<ph name="PRODUCT_NAME" /> 根據預設也可以收集及上傳這類記錄。</translation>
 <translation id="5331746669335642668"><ph name="PRODUCT_NAME" /> 雲端政策會覆寫平台政策。</translation>
+<translation id="5340105431123046323">如果將這項政策設為啟用或不設定,已註冊的裝置會回報網路介面清單,當中包含網路介面類型和硬體位址資料。
+
+      如果將這項政策設為停用,已註冊的裝置不會回報網路介面清單。</translation>
 <translation id="5346587320074666194">禁止在這些網站上存取感應器</translation>
 <translation id="5362531528507578966">覆寫預設的背景圖形列印模式。</translation>
 <translation id="5365476955714838841">替代瀏覽器的指令行參數。</translation>
@@ -3224,6 +3270,9 @@
           這份清單中的每個項目皆為擴充功能形式的比對模式 (請參閱 https://developer.chrome.com/extensions/match_patterns)。任何網址只要與這份清單中的任意項目相符,使用者便可輕鬆安裝該網址提供的檔案。*.crx 檔案位置和下載來源網頁 (參照網址) 都必須與這份清單中的模式相符。
 
           <ph name="EXTENSION_INSTALL_BLOCKLIST_POLICY_NAME" /> 的優先順序高於這項政策。換句話說,系統不會安裝封鎖清單上的任何擴充功能,即使將該功能的來源網站加到這份清單中也一樣。</translation>
+<translation id="5860010874344790473">如果將這項政策設為啟用,系統會將系統記錄傳送給管理伺服器,讓管理員進行監控。
+
+      如果將這項政策設為停用或不設定,系統不會回報任何系統記錄。</translation>
 <translation id="5861856285460256766">家長存取碼設定</translation>
 <translation id="5868414965372171132">使用者層級網路設定</translation>
 <translation id="587242272905978723">允許 <ph name="PLUGIN_VM_NAME" /> 收集 <ph name="PLUGIN_VM_NAME" /> 使用資料。
@@ -3718,6 +3767,17 @@
       如果將這項政策設為 True,系統會允許裝置觸發 Powerwash。
       如果不設定這項政策,系統會預設為 True,代表允許裝置執行 Powerwash。
       </translation>
+<translation id="6614020900120353107">控管是否要在 <ph name="PRODUCT_NAME" /> 中使用內建的 DNS 用戶端。
+
+      這項政策不會影響系統使用的 DNS 伺服器,只會影響與 DNS 伺服器建立連線的軟體堆疊。比方說,如果作業系統設為使用企業的 DNS 伺服器,內建 DNS 用戶端也會使用相同的伺服器。不過,內建的 DNS 用戶端可能會採用新版 DNS 相關通訊協定 (例如 DNS-over-TLS),透過其他方式與伺服器互動。
+
+      這項政策不會影響 DNS-over-HTTPS。如要變更該行為,請參閱 <ph name="DNS_OVER_HTTPS_MODE_POLICY_NAME" /> 政策。
+
+      如果將這項政策設為 True,系統將使用內建的 DNS 用戶端 (如果可用)。
+
+      如果將這項政策設為 False,系統一律不會使用內建的 DNS 用戶端。
+
+      如果不設定這項政策,macOS、Android (當私人 DNS 和 VPN 皆未啟用時) 和 Chrome 作業系統在預設狀態下會啟用內建的 DNS 用戶端;使用者可以透過編輯 chrome://flags 或指定指令列旗標,來決定系統是否要使用內建的 DNS 用戶端。</translation>
 <translation id="6621839881150363218">如果將這項政策設為啟用,系統會隔離所有網站 (每個網站將各自以獨立程序執行)。如果將這項政策設為停用,系統不會特地執行網站隔離,並且會停用 IsolateOriginsAndroid 和 SitePerProcessAndroid 的實測。使用者仍可手動啟用這項政策。
 
       如果未設定這項政策,使用者可變更這項設定。
@@ -3839,6 +3899,9 @@
       如果受管理的裝置上沒有設定這項政策,該裝置就無法執行虛擬機器。未受管理的裝置可以執行虛擬機器。</translation>
 <translation id="6786747875388722282">擴充功能</translation>
 <translation id="6786967369487349613">設定漫遊設定檔目錄</translation>
+<translation id="6789422336869764846">如果將這項政策設為啟用或不設定,已註冊的裝置會回報裝置的開發人員模式切換設定在開機時的狀態。
+
+      如果將這項政策設為停用,已註冊的裝置不會回報開發人員模式切換設定的狀態。</translation>
 <translation id="6795485990775913659">只在 PIN 碼停用時允許列印</translation>
 <translation id="6810445994095397827">封鎖這些網站的 JavaScript</translation>
 <translation id="6813263547126514821">電源與關機</translation>
@@ -4385,6 +4448,9 @@
 <translation id="7458437477941640506">如果作業系統版本比目標版本還新,則不復原至目標版本,且一併停用更新。</translation>
 <translation id="7459601923199346224">控管憑證管理的使用者和裝置政策。</translation>
 <translation id="7464991223784276288">將來自相符網址的 Cookie 限制在目前的工作階段中</translation>
+<translation id="7468182772656807573">你可以透過這項政策,決定監控網路封包的傳送頻率 (以毫秒為單位)。間隔範圍介於 30 秒到 24 小時。系統會將超出範圍的值調整到範圍內。
+
+      如果未設定,系統會套用 3 分鐘的預設間隔。</translation>
 <translation id="7469554574977894907">啟用搜尋建議</translation>
 <translation id="747014869399137701">如果將這項政策設為 1,網站即可顯示桌面通知。如果將這項政策設為 2,網站將無法顯示桌面通知。
 
@@ -4640,6 +4706,7 @@
            如果不設定這項政策,系統會在登入畫面上預設啟用無障礙功能快速鍵。</translation>
 <translation id="7777535871204167559">以唯讀模式處理外部儲存裝置</translation>
 <translation id="7788511847830146438">根據設定檔</translation>
+<translation id="780629758750905699">允許將 Family Link 帳戶加入裝置</translation>
 <translation id="7807139251387225825">要從同步處理作業中排除的類型清單</translation>
 <translation id="7815699949432723208">這項政策已遭淘汰,請改用「<ph name="NATIVE_MESSAGING_ALLOWLIST_POLICY_NAME" />」政策。
 
@@ -4786,6 +4853,9 @@
 如果你停用這項設定,使用者就無法使用「自動填入」功能。
 
 如果你啟用這項設定或未設定任何值,使用者就能自行管理「自動填入」功能。也就是說,使用者可以設定「自動填入」設定檔,並可自行決定是否要開啟「自動填入」功能。</translation>
+<translation id="8036964468882248070">如果將這項政策設為啟用,已註冊的裝置會回報儲存裝置的硬體統計資料和 ID。
+
+      如果將這項政策設為停用或不設定,已註冊的裝置不會回報儲存裝置統計資料。</translation>
 <translation id="8044493735196713914">回報裝置啟動模式</translation>
 <translation id="8049769137921877885">這項政策可控管系統是否要回報政策資料和擷取政策的時間。
 
@@ -4863,6 +4933,9 @@
           設定這項政策後,使用者即無法變更或覆寫。
 
           如果不設定這項政策,系統預設會停用游標醒目顯示功能,但使用者隨時可以啟用這項功能。</translation>
+<translation id="8164687848393015214">如果將這項政策設為啟用,系統會將監控網路封包 (<ph name="HEARTBEATS_TERM" />) 傳送到可監控上線狀態的管理伺服器,讓伺服器偵測裝置是否處於離線狀態。
+
+      如果將這項政策設為停用或不設定,系統不會傳送任何封包。</translation>
 <translation id="816783746144552109">設定裝置的 Chrome 作業系統最低版本限制。</translation>
 <translation id="8171924760436219650">在登入畫面上將滑鼠的主要按鈕切換為右鍵</translation>
 <translation id="8176035528522326671">僅允許企業使用者成為多重設定檔的主要使用者 (受企業管理的使用者的預設行為)</translation>
@@ -5153,6 +5226,7 @@
 
       如果將這項政策設為 False 或不予設定,使用者不必登入 <ph name="PRODUCT_NAME" /> 即可使用瀏覽器。</translation>
 <translation id="858309738002328421">禁止上傳大型檔案</translation>
+<translation id="8583509234908413302">允許在 WebRTC 中降級為舊版傳輸層安全標準 (TLS)/DTLS</translation>
 <translation id="8584279193368801689">限制 PIN 碼列印模式。如果不設定這項政策,系統會視為未設限制。如果設定的模式不適用,系統會忽略這項政策。請注意,印表機使用的通訊協定必須是 IPPS、HTTPS、USB 或 IPP 型 USB 的其中一種,才能啟用 PIN 碼列印功能。</translation>
 <translation id="8585558195682146109">傳送使用者下載內容以供掃描</translation>
 <translation id="8587229956764455752">允許建立新的使用者帳戶</translation>
@@ -5362,6 +5436,9 @@
 
       網址模式的格式必須符合 https://www.chromium.org/administrators/url-blacklist-filter-format 中的「<ph name="URL_BLOCKLIST_POLICY_NAME" />」政策規定。
       </translation>
+<translation id="8931555638815157255">如果將這項政策設為啟用或不設定,已註冊的裝置會定期回報其 OS 版本和韌體版本。
+
+      如果將這項政策設為停用,已註冊的裝置不會回報版本資訊。</translation>
 <translation id="8937282917198525844"> 自 M81 版起,我們為標準表單控制項元素 (例如 &lt;select&gt;、&lt;button&gt; 和 &lt;input type=date&gt;) 提供煥然一新的外觀和風格,不但強化了無障礙使用設計,在各種作業系統平台操作時,效果也能更一致。這項政策恢復納入了「舊版」表單控制項元素做為使用選項,並且一路提供到 M84 版。
 
       如果將這項政策設為 True,系統會針對所有網站使用「舊版」表單控制項元素。
@@ -5517,6 +5594,9 @@
       如果未設定這項政策,系統會針對所有網站套用 <ph name="DEFAULT_PLUGINS_SETTING_POLICY_NAME" /> 政策 (如果已設定)。否則系統會套用使用者的個人設定。
 
       如果想進一步瞭解有效的網址模式,請參閱 https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns。不過,從 M85 版開始,系統針對這項政策已停止支援主機中包含「*」和「[*.]」萬用字元的模式。</translation>
+<translation id="9073405975862312795">如果將這項政策設為啟用或不設定,已註冊的裝置會回報使用者的裝置使用時間範圍。
+
+      如果將這項政策設為停用,已註冊的裝置不會記錄或回報活動時間。</translation>
 <translation id="9077227880520270584">裝置本機帳戶自動登入計時器</translation>
 <translation id="9084985621503260744">指定會影響電源管理的視訊活動</translation>
 <translation id="9088433379343318874">啟用受監管的使用者內容提供者</translation>
diff --git a/components/safe_browsing/content/base_blocking_page.cc b/components/safe_browsing/content/base_blocking_page.cc
index 33b333f1..a9f9cad 100644
--- a/components/safe_browsing/content/base_blocking_page.cc
+++ b/components/safe_browsing/content/base_blocking_page.cc
@@ -15,6 +15,7 @@
 #include "components/safe_browsing/core/common/safe_browsing_prefs.h"
 #include "components/safe_browsing/core/features.h"
 #include "components/security_interstitials/content/security_interstitial_controller_client.h"
+#include "components/security_interstitials/content/settings_page_helper.h"
 #include "components/security_interstitials/content/unsafe_resource_util.h"
 #include "components/security_interstitials/core/metrics_helper.h"
 #include "components/security_interstitials/core/safe_browsing_loud_error_ui.h"
@@ -85,6 +86,8 @@
       false,                 // kSafeBrowsingProceedAnywayDisabled
       false,                 // should_open_links_in_new_tab
       true,                  // always_show_back_to_safety
+      false,                 // is_enhanced_protection_message_enabled
+      false,                 // is_safe_browsing_managed
       "cpn_safe_browsing");  // help_center_article_link
 }
 
@@ -277,7 +280,9 @@
     content::WebContents* web_contents,
     const UnsafeResourceList& unsafe_resources,
     BaseUIManager* ui_manager,
-    PrefService* pref_service) {
+    PrefService* pref_service,
+    std::unique_ptr<security_interstitials::SettingsPageHelper>
+        settings_page_helper) {
   history::HistoryService* history_service =
       ui_manager->history_service(web_contents);
 
@@ -288,7 +293,8 @@
 
   return std::make_unique<SafeBrowsingControllerClient>(
       web_contents, std::move(metrics_helper), pref_service,
-      ui_manager->app_locale(), ui_manager->default_safe_page());
+      ui_manager->app_locale(), ui_manager->default_safe_page(),
+      std::move(settings_page_helper));
 }
 
 int BaseBlockingPage::GetHTMLTemplateId() {
diff --git a/components/safe_browsing/content/base_blocking_page.h b/components/safe_browsing/content/base_blocking_page.h
index e698de0..41f9402 100644
--- a/components/safe_browsing/content/base_blocking_page.h
+++ b/components/safe_browsing/content/base_blocking_page.h
@@ -17,6 +17,10 @@
 #include "components/security_interstitials/core/metrics_helper.h"
 #include "url/gurl.h"
 
+namespace security_interstitials {
+class SettingsPageHelper;
+}
+
 namespace safe_browsing {
 
 // Base class for managing the SafeBrowsing interstitial pages.
@@ -110,10 +114,13 @@
 
   static std::unique_ptr<
       security_interstitials::SecurityInterstitialControllerClient>
-  CreateControllerClient(content::WebContents* web_contents,
-                         const UnsafeResourceList& unsafe_resources,
-                         BaseUIManager* ui_manager,
-                         PrefService* pref_service);
+  CreateControllerClient(
+      content::WebContents* web_contents,
+      const UnsafeResourceList& unsafe_resources,
+      BaseUIManager* ui_manager,
+      PrefService* pref_service,
+      std::unique_ptr<security_interstitials::SettingsPageHelper>
+          settings_page_helper);
 
   int GetHTMLTemplateId() override;
 
diff --git a/components/safe_browsing/content/password_protection/password_protection_service.cc b/components/safe_browsing/content/password_protection/password_protection_service.cc
index 60c866b..7b63027 100644
--- a/components/safe_browsing/content/password_protection/password_protection_service.cc
+++ b/components/safe_browsing/content/password_protection/password_protection_service.cc
@@ -77,12 +77,11 @@
 }
 
 bool PasswordProtectionService::CanGetReputationOfURL(const GURL& url) {
-  if (!url.is_valid() || !url.SchemeIsHTTPOrHTTPS() || net::IsLocalhost(url))
+  if (!safe_browsing::CanGetReputationOfUrl(url)) {
     return false;
-
+  }
   const std::string hostname = url.HostNoBrackets();
-  return !net::IsHostnameNonUnique(hostname) &&
-         hostname.find('.') != std::string::npos;
+  return !net::IsHostnameNonUnique(hostname);
 }
 
 #if defined(ON_FOCUS_PING_ENABLED)
diff --git a/components/safe_browsing/content/safe_browsing_controller_client.cc b/components/safe_browsing/content/safe_browsing_controller_client.cc
index 0975a07..c0ffba6 100644
--- a/components/safe_browsing/content/safe_browsing_controller_client.cc
+++ b/components/safe_browsing/content/safe_browsing_controller_client.cc
@@ -6,6 +6,7 @@
 
 #include "base/feature_list.h"
 #include "components/safe_browsing/core/features.h"
+#include "components/security_interstitials/content/settings_page_helper.h"
 #include "components/security_interstitials/core/metrics_helper.h"
 
 namespace safe_browsing {
@@ -15,13 +16,16 @@
     std::unique_ptr<security_interstitials::MetricsHelper> metrics_helper,
     PrefService* prefs,
     const std::string& app_locale,
-    const GURL& default_safe_page)
+    const GURL& default_safe_page,
+    std::unique_ptr<security_interstitials::SettingsPageHelper>
+        settings_page_helper)
     : security_interstitials::SecurityInterstitialControllerClient(
           web_contents,
           std::move(metrics_helper),
           prefs,
           app_locale,
-          default_safe_page) {}
+          default_safe_page,
+          std::move(settings_page_helper)) {}
 
 SafeBrowsingControllerClient::~SafeBrowsingControllerClient() {}
 
diff --git a/components/safe_browsing/content/safe_browsing_controller_client.h b/components/safe_browsing/content/safe_browsing_controller_client.h
index 6394286..33a09a20 100644
--- a/components/safe_browsing/content/safe_browsing_controller_client.h
+++ b/components/safe_browsing/content/safe_browsing_controller_client.h
@@ -14,6 +14,7 @@
 
 namespace security_interstitials {
 class MetricsHelper;
+class SettingsPageHelper;
 }
 
 class PrefService;
@@ -30,7 +31,9 @@
       std::unique_ptr<security_interstitials::MetricsHelper> metrics_helper,
       PrefService* prefs,
       const std::string& app_locale,
-      const GURL& default_safe_page);
+      const GURL& default_safe_page,
+      std::unique_ptr<security_interstitials::SettingsPageHelper>
+          settings_page_helper);
   ~SafeBrowsingControllerClient() override;
 
   void Proceed() override;
diff --git a/components/safe_browsing/core/common/safe_browsing_prefs.cc b/components/safe_browsing/core/common/safe_browsing_prefs.cc
index 6d5d746..e894e93 100644
--- a/components/safe_browsing/core/common/safe_browsing_prefs.cc
+++ b/components/safe_browsing/core/common/safe_browsing_prefs.cc
@@ -186,6 +186,11 @@
          prefs.IsManagedPreference(prefs::kSafeBrowsingEnhanced);
 }
 
+bool IsEnhancedProtectionMessageInInterstitialsEnabled() {
+  return base::FeatureList::IsEnabled(
+      kEnhancedProtectionMessageInInterstitials);
+}
+
 void RecordExtendedReportingMetrics(const PrefService& prefs) {
   // This metric tracks the extended browsing opt-in based on whichever setting
   // the user is currently seeing. It tells us whether extended reporting is
diff --git a/components/safe_browsing/core/common/safe_browsing_prefs.h b/components/safe_browsing/core/common/safe_browsing_prefs.h
index 9482089..29672db 100644
--- a/components/safe_browsing/core/common/safe_browsing_prefs.h
+++ b/components/safe_browsing/core/common/safe_browsing_prefs.h
@@ -296,6 +296,9 @@
 // SafeBrowsingProtectionLevel policy(new).
 bool IsSafeBrowsingPolicyManaged(const PrefService& prefs);
 
+// Returns whether enhanced protection message is enabled in interstitials.
+bool IsEnhancedProtectionMessageInInterstitialsEnabled();
+
 // Updates UMA metrics about Safe Browsing Extended Reporting states.
 void RecordExtendedReportingMetrics(const PrefService& prefs);
 
diff --git a/components/safe_browsing/core/common/utils.cc b/components/safe_browsing/core/common/utils.cc
index 369c63c..5131aed 100644
--- a/components/safe_browsing/core/common/utils.cc
+++ b/components/safe_browsing/core/common/utils.cc
@@ -11,6 +11,8 @@
 #include "components/policy/core/browser/browser_policy_connector.h"
 #include "components/prefs/pref_service.h"
 #include "crypto/sha2.h"
+#include "net/base/ip_address.h"
+#include "net/base/url_util.h"
 
 #if defined(OS_WIN)
 #include "base/enterprise_util.h"
@@ -74,4 +76,30 @@
     return next_event - now;
 }
 
+bool CanGetReputationOfUrl(const GURL& url) {
+  if (!url.is_valid() || !url.SchemeIsHTTPOrHTTPS() || net::IsLocalhost(url)) {
+    return false;
+  }
+  const std::string hostname = url.host();
+  // A valid hostname should be longer than 3 characters and have at least 1
+  // dot.
+  if (hostname.size() < 4 || base::STLCount(hostname, '.') < 1) {
+    return false;
+  }
+
+  if (net::IsLocalhost(url)) {
+    // Includes: "//localhost/", "//localhost.localdomain/", "//127.0.0.1/"
+    return false;
+  }
+
+  net::IPAddress ip_address;
+  if (url.HostIsIPAddress() && ip_address.AssignFromIPLiteral(hostname) &&
+      !ip_address.IsPubliclyRoutable()) {
+    // Includes: "//192.168.1.1/", "//172.16.2.2/", "//10.1.1.1/"
+    return false;
+  }
+
+  return true;
+}
+
 }  // namespace safe_browsing
diff --git a/components/safe_browsing/core/common/utils.h b/components/safe_browsing/core/common/utils.h
index 11da036..b1a847c 100644
--- a/components/safe_browsing/core/common/utils.h
+++ b/components/safe_browsing/core/common/utils.h
@@ -41,6 +41,15 @@
                     const base::TimeDelta& delay);
 base::TimeDelta GetDelayFromPref(PrefService* prefs, const char* pref_name);
 
+// Safe Browsing backend cannot get a reliable reputation of a URL if
+// (1) URL is not valid
+// (2) URL doesn't have http or https scheme
+// (3) It maps to a local host.
+// (4) Its hostname is an IP Address that is assigned from IP literal.
+// (5) Its hostname is a dotless domain.
+// (6) Its hostname is less than 4 characters.
+bool CanGetReputationOfUrl(const GURL& url);
+
 }  // namespace safe_browsing
 
 #endif  // COMPONENTS_SAFE_BROWSING_CORE_COMMON_UTILS_H_
diff --git a/components/safe_browsing/core/realtime/BUILD.gn b/components/safe_browsing/core/realtime/BUILD.gn
index 62dda5c..5494e34 100644
--- a/components/safe_browsing/core/realtime/BUILD.gn
+++ b/components/safe_browsing/core/realtime/BUILD.gn
@@ -64,6 +64,7 @@
     "//components/safe_browsing/core:features",
     "//components/safe_browsing/core:realtimeapi_proto",
     "//components/safe_browsing/core:verdict_cache_manager",
+    "//components/safe_browsing/core/common:common",
     "//components/safe_browsing/core/common:safe_browsing_prefs",
     "//components/safe_browsing/core/common:thread_utils",
     "//components/safe_browsing/core/db:v4_protocol_manager_util",
diff --git a/components/safe_browsing/core/realtime/url_lookup_service_base.cc b/components/safe_browsing/core/realtime/url_lookup_service_base.cc
index 35a9cac..1cbf6b6ff7 100644
--- a/components/safe_browsing/core/realtime/url_lookup_service_base.cc
+++ b/components/safe_browsing/core/realtime/url_lookup_service_base.cc
@@ -15,6 +15,7 @@
 #include "components/prefs/pref_service.h"
 #include "components/safe_browsing/core/common/safe_browsing_prefs.h"
 #include "components/safe_browsing/core/common/thread_utils.h"
+#include "components/safe_browsing/core/common/utils.h"
 #include "components/safe_browsing/core/verdict_cache_manager.h"
 #include "components/sync/driver/sync_service.h"
 #include "net/base/ip_address.h"
@@ -133,25 +134,10 @@
 
 // static
 bool RealTimeUrlLookupServiceBase::CanCheckUrl(const GURL& url) {
-  if (!url.SchemeIsHTTPOrHTTPS()) {
-    return false;
+  if (VerdictCacheManager::has_artificial_unsafe_url()) {
+    return true;
   }
-
-  if (net::IsLocalhost(url) &&
-      !VerdictCacheManager::has_artificial_unsafe_url()) {
-    // Includes: "//localhost/", "//localhost.localdomain/", "//127.0.0.1/"
-    return false;
-  }
-
-  net::IPAddress ip_address;
-  if (url.HostIsIPAddress() && ip_address.AssignFromIPLiteral(url.host()) &&
-      !ip_address.IsPubliclyRoutable() &&
-      !VerdictCacheManager::has_artificial_unsafe_url()) {
-    // Includes: "//192.168.1.1/", "//172.16.2.2/", "//10.1.1.1/"
-    return false;
-  }
-
-  return true;
+  return CanGetReputationOfUrl(url);
 }
 
 // static
diff --git a/components/safe_browsing/core/realtime/url_lookup_service_unittest.cc b/components/safe_browsing/core/realtime/url_lookup_service_unittest.cc
index a4f7aff..14e40ee 100644
--- a/components/safe_browsing/core/realtime/url_lookup_service_unittest.cc
+++ b/components/safe_browsing/core/realtime/url_lookup_service_unittest.cc
@@ -527,10 +527,11 @@
                              {"http://10.1.1.1/path", false},
                              {"http://10.1.1.1.1/path", true},
                              {"http://example.test/path", true},
-                             {"https://example.test/path", true}};
-  for (size_t i = 0; i < base::size(can_check_url_cases); i++) {
-    GURL url(can_check_url_cases[i].url);
-    bool expected_can_check = can_check_url_cases[i].can_check;
+                             {"http://nodothost/path", false},
+                             {"http://x.x/shorthost", false}};
+  for (auto& can_check_url_case : can_check_url_cases) {
+    GURL url(can_check_url_case.url);
+    bool expected_can_check = can_check_url_case.can_check;
     EXPECT_EQ(expected_can_check, CanCheckUrl(url));
   }
 }
diff --git a/components/safe_browsing/core/triggers/trigger_manager.cc b/components/safe_browsing/core/triggers/trigger_manager.cc
index 84e9ac2..d2b642a2 100644
--- a/components/safe_browsing/core/triggers/trigger_manager.cc
+++ b/components/safe_browsing/core/triggers/trigger_manager.cc
@@ -91,6 +91,8 @@
                         /*is_proceed_anyway_disabled=*/false,
                         /*should_open_links_in_new_tab=*/false,
                         /*show_back_to_safety_button=*/true,
+                        IsEnhancedProtectionMessageInInterstitialsEnabled(),
+                        IsSafeBrowsingPolicyManaged(pref_service),
                         /*help_center_article_link=*/std::string());
 }
 
diff --git a/components/security_interstitials/content/BUILD.gn b/components/security_interstitials/content/BUILD.gn
index ccd44b5..5a9ab5e 100644
--- a/components/security_interstitials/content/BUILD.gn
+++ b/components/security_interstitials/content/BUILD.gn
@@ -44,6 +44,7 @@
     "security_interstitial_page.h",
     "security_interstitial_tab_helper.cc",
     "security_interstitial_tab_helper.h",
+    "settings_page_helper.h",
     "ssl_blocking_page.cc",
     "ssl_blocking_page.h",
     "ssl_blocking_page_base.cc",
diff --git a/components/security_interstitials/content/cert_report_helper.cc b/components/security_interstitials/content/cert_report_helper.cc
index ffa6ab2..be27d75 100644
--- a/components/security_interstitials/content/cert_report_helper.cc
+++ b/components/security_interstitials/content/cert_report_helper.cc
@@ -192,9 +192,33 @@
 }
 
 bool CertReportHelper::ShouldShowEnhancedProtectionMessage() {
-  // TODO(crbug.com/1130721): Check feature flag, check ep not managed, check
-  // not already in ep. Check not in incognito.
-  return false;
+  // Only show the enhanced protection message iff the user is part of the
+  // respective Finch group and the window is not incognito and Safe Browsing is
+  // not managed by policy and the user is not already in enhanced protection
+  // mode.
+  const bool in_incognito =
+      web_contents_->GetBrowserContext()->IsOffTheRecord();
+  const PrefService* pref_service = GetPrefs(web_contents_);
+  bool is_enhanced_protection_enabled =
+      safe_browsing::IsEnhancedProtectionEnabled(*pref_service);
+  bool is_safe_browsing_managed =
+      safe_browsing::IsSafeBrowsingPolicyManaged(*pref_service);
+  bool is_enhanced_protection_message_enabled =
+      safe_browsing::IsEnhancedProtectionMessageInInterstitialsEnabled();
+
+  if (in_incognito) {
+    return false;
+  }
+  if (is_enhanced_protection_enabled) {
+    return false;
+  }
+  if (is_safe_browsing_managed) {
+    return false;
+  }
+  if (!is_enhanced_protection_message_enabled) {
+    return false;
+  }
+  return true;
 }
 
 bool CertReportHelper::ShouldReportCertificateError() {
diff --git a/components/security_interstitials/content/origin_policy_ui.cc b/components/security_interstitials/content/origin_policy_ui.cc
index 6ce9f904..b537dd9 100644
--- a/components/security_interstitials/content/origin_policy_ui.cc
+++ b/components/security_interstitials/content/origin_policy_ui.cc
@@ -11,6 +11,7 @@
 #include "base/optional.h"
 #include "components/security_interstitials/content/origin_policy_interstitial_page.h"
 #include "components/security_interstitials/content/security_interstitial_tab_helper.h"
+#include "components/security_interstitials/content/settings_page_helper.h"
 #include "components/security_interstitials/core/metrics_helper.h"
 #include "content/public/browser/navigation_handle.h"
 #include "services/network/public/cpp/origin_policy.h"
@@ -31,7 +32,7 @@
           web_contents,
           std::make_unique<MetricsHelper>(url, report_details, nullptr),
           nullptr, /* pref service: can be null */
-          "", GURL());
+          "", GURL(), /* settings_page_helper: not used */ nullptr);
   return std::make_unique<security_interstitials::OriginPolicyInterstitialPage>(
       web_contents, url, std::move(controller), error_reason);
 }
diff --git a/components/security_interstitials/content/security_interstitial_controller_client.cc b/components/security_interstitials/content/security_interstitial_controller_client.cc
index d8c2710..0f1ec1a 100644
--- a/components/security_interstitials/content/security_interstitial_controller_client.cc
+++ b/components/security_interstitials/content/security_interstitial_controller_client.cc
@@ -8,6 +8,7 @@
 
 #include "components/prefs/pref_service.h"
 #include "components/safe_browsing/core/common/safe_browsing_prefs.h"
+#include "components/security_interstitials/content/settings_page_helper.h"
 #include "components/security_interstitials/core/metrics_helper.h"
 #include "content/public/browser/web_contents.h"
 #include "content/public/common/referrer.h"
@@ -21,12 +22,14 @@
     std::unique_ptr<MetricsHelper> metrics_helper,
     PrefService* prefs,
     const std::string& app_locale,
-    const GURL& default_safe_page)
+    const GURL& default_safe_page,
+    std::unique_ptr<SettingsPageHelper> settings_page_helper)
     : ControllerClient(std::move(metrics_helper)),
       web_contents_(web_contents),
       prefs_(prefs),
       app_locale_(app_locale),
-      default_safe_page_(default_safe_page) {}
+      default_safe_page_(default_safe_page),
+      settings_page_helper_(std::move(settings_page_helper)) {}
 
 SecurityInterstitialControllerClient::~SecurityInterstitialControllerClient() {}
 
@@ -81,6 +84,10 @@
   web_contents_->OpenURL(params);
 }
 
+void SecurityInterstitialControllerClient::OpenEnhancedProtectionSettings() {
+  settings_page_helper_->OpenEnhancedProtectionSettings(web_contents_);
+}
+
 const std::string&
 SecurityInterstitialControllerClient::GetApplicationLocale() const {
   return app_locale_;
diff --git a/components/security_interstitials/content/security_interstitial_controller_client.h b/components/security_interstitials/content/security_interstitial_controller_client.h
index 3922629..6edb122 100644
--- a/components/security_interstitials/content/security_interstitial_controller_client.h
+++ b/components/security_interstitials/content/security_interstitial_controller_client.h
@@ -16,6 +16,7 @@
 namespace security_interstitials {
 
 class MetricsHelper;
+class SettingsPageHelper;
 
 // Handle commands from security interstitial pages. This class should only be
 // instantiated by SafeBrowsingBlockingPage for the time being.
@@ -27,7 +28,8 @@
       std::unique_ptr<MetricsHelper> metrics_helper,
       PrefService* prefs,
       const std::string& app_locale,
-      const GURL& default_safe_page);
+      const GURL& default_safe_page,
+      std::unique_ptr<SettingsPageHelper> settings_page_helper);
 
   ~SecurityInterstitialControllerClient() override;
 
@@ -39,6 +41,7 @@
   void Reload() override;
   void OpenUrlInCurrentTab(const GURL& url) override;
   void OpenUrlInNewForegroundTab(const GURL& url) override;
+  void OpenEnhancedProtectionSettings() override;
   PrefService* GetPrefService() override;
   const std::string& GetApplicationLocale() const override;
   bool CanLaunchDateAndTimeSettings() override;
@@ -56,6 +59,7 @@
   // The default safe page we should go to if there is no previous page to go
   // back to, e.g. chrome:kChromeUINewTabURL.
   const GURL default_safe_page_;
+  std::unique_ptr<SettingsPageHelper> settings_page_helper_;
 
   DISALLOW_COPY_AND_ASSIGN(SecurityInterstitialControllerClient);
 };
diff --git a/components/security_interstitials/content/security_interstitial_tab_helper_unittest.cc b/components/security_interstitials/content/security_interstitial_tab_helper_unittest.cc
index 89d3b467..6087bf2 100644
--- a/components/security_interstitials/content/security_interstitial_tab_helper_unittest.cc
+++ b/components/security_interstitials/content/security_interstitial_tab_helper_unittest.cc
@@ -11,6 +11,7 @@
 #include "base/time/time.h"
 #include "components/security_interstitials/content/security_interstitial_controller_client.h"
 #include "components/security_interstitials/content/security_interstitial_page.h"
+#include "components/security_interstitials/content/settings_page_helper.h"
 #include "components/security_interstitials/core/controller_client.h"
 #include "components/security_interstitials/core/metrics_helper.h"
 #include "content/public/browser/certificate_request_result_type.h"
@@ -47,7 +48,8 @@
                 CreateTestMetricsHelper(web_contents),
                 nullptr,
                 base::i18n::GetConfiguredLocale(),
-                GURL())),
+                GURL(),
+                /* settings_page_helper*/ nullptr)),
         destroyed_tracker_(destroyed_tracker) {}
 
   ~TestInterstitialPage() override { *destroyed_tracker_ = true; }
diff --git a/components/security_interstitials/content/settings_page_helper.h b/components/security_interstitials/content/settings_page_helper.h
new file mode 100644
index 0000000..8585f024
--- /dev/null
+++ b/components/security_interstitials/content/settings_page_helper.h
@@ -0,0 +1,31 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef COMPONENTS_SECURITY_INTERSTITIALS_CONTENT_SETTINGS_PAGE_HELPER_H_
+#define COMPONENTS_SECURITY_INTERSTITIALS_CONTENT_SETTINGS_PAGE_HELPER_H_
+
+#include "base/macros.h"
+
+namespace content {
+class WebContents;
+}
+
+namespace security_interstitials {
+
+// Interface to open a settings page in a security interstitial.
+class SettingsPageHelper {
+ public:
+  SettingsPageHelper() = default;
+  virtual ~SettingsPageHelper() = default;
+  SettingsPageHelper(const SettingsPageHelper&) = delete;
+  SettingsPageHelper& operator=(const SettingsPageHelper&) = delete;
+
+  // Opens the settings page that contains enhanced protection.
+  virtual void OpenEnhancedProtectionSettings(
+      content::WebContents* web_contents) const = 0;
+};
+
+}  // namespace security_interstitials
+
+#endif  // COMPONENTS_SECURITY_INTERSTITIALS_CONTENT_SETTINGS_PAGE_HELPER_H_
diff --git a/components/security_interstitials/content/ssl_error_navigation_throttle_unittest.cc b/components/security_interstitials/content/ssl_error_navigation_throttle_unittest.cc
index 49e442b1..6e88dcd 100644
--- a/components/security_interstitials/content/ssl_error_navigation_throttle_unittest.cc
+++ b/components/security_interstitials/content/ssl_error_navigation_throttle_unittest.cc
@@ -9,6 +9,7 @@
 #include "base/threading/thread_task_runner_handle.h"
 #include "components/security_interstitials/content/security_interstitial_controller_client.h"
 #include "components/security_interstitials/content/security_interstitial_page.h"
+#include "components/security_interstitials/content/settings_page_helper.h"
 #include "components/security_interstitials/core/metrics_helper.h"
 #include "components/security_interstitials/core/ssl_error_ui.h"
 #include "content/public/browser/navigation_throttle.h"
@@ -59,7 +60,8 @@
                 CreateMetricsHelperForTest(request_url),
                 /*prefs=*/nullptr,
                 "en_US",
-                GURL("about:blank"))),
+                GURL("about:blank"),
+                /* settings_page_helper */ nullptr)),
         ssl_error_ui_(request_url,
                       cert_error,
                       ssl_info,
diff --git a/components/security_interstitials/core/base_safe_browsing_error_ui.cc b/components/security_interstitials/core/base_safe_browsing_error_ui.cc
index b373ebe6..46f38bb 100644
--- a/components/security_interstitials/core/base_safe_browsing_error_ui.cc
+++ b/components/security_interstitials/core/base_safe_browsing_error_ui.cc
@@ -34,6 +34,8 @@
     bool is_proceed_anyway_disabled,
     bool should_open_links_in_new_tab,
     bool always_show_back_to_safety,
+    bool is_enhanced_protection_message_enabled,
+    bool is_safe_browsing_managed,
     const std::string& help_center_article_link)
     : is_main_frame_load_blocked(is_main_frame_load_blocked),
       is_extended_reporting_opt_in_allowed(
@@ -46,6 +48,9 @@
       is_proceed_anyway_disabled(is_proceed_anyway_disabled),
       should_open_links_in_new_tab(should_open_links_in_new_tab),
       always_show_back_to_safety(always_show_back_to_safety),
+      is_enhanced_protection_message_enabled(
+          is_enhanced_protection_message_enabled),
+      is_safe_browsing_managed(is_safe_browsing_managed),
       help_center_article_link(help_center_article_link) {}
 
 BaseSafeBrowsingErrorUI::SBErrorDisplayOptions::SBErrorDisplayOptions(
@@ -61,6 +66,9 @@
       is_proceed_anyway_disabled(other.is_proceed_anyway_disabled),
       should_open_links_in_new_tab(other.should_open_links_in_new_tab),
       always_show_back_to_safety(other.always_show_back_to_safety),
+      is_enhanced_protection_message_enabled(
+          other.is_enhanced_protection_message_enabled),
+      is_safe_browsing_managed(other.is_safe_browsing_managed),
       help_center_article_link(other.help_center_article_link) {}
 
 }  // security_interstitials
diff --git a/components/security_interstitials/core/base_safe_browsing_error_ui.h b/components/security_interstitials/core/base_safe_browsing_error_ui.h
index cf0dea5..06a03f1d 100644
--- a/components/security_interstitials/core/base_safe_browsing_error_ui.h
+++ b/components/security_interstitials/core/base_safe_browsing_error_ui.h
@@ -36,6 +36,8 @@
                           bool is_proceed_anyway_disabled,
                           bool should_open_links_in_new_tab,
                           bool always_show_back_to_safety,
+                          bool is_enhanced_protection_message_enabled,
+                          bool is_safe_browsing_managed,
                           const std::string& help_center_article_link);
 
     SBErrorDisplayOptions(const SBErrorDisplayOptions& other);
@@ -71,6 +73,13 @@
     // always set this option to true,
     bool always_show_back_to_safety;
 
+    // Indicates if the feature to show enhanced protection message on the
+    // interstitial is enabled.
+    bool is_enhanced_protection_message_enabled;
+
+    // Indicates if Safe Browsing is managed.
+    bool is_safe_browsing_managed;
+
     // The p= query parameter used when visiting the Help Center. If this is
     // nullptr, then a default value will be used for the SafeBrowsing article.
     std::string help_center_article_link;
@@ -128,6 +137,14 @@
     return display_options_.help_center_article_link;
   }
 
+  bool is_enhanced_protection_message_enabled() const {
+    return display_options_.is_enhanced_protection_message_enabled;
+  }
+
+  bool is_safe_browsing_managed() const {
+    return display_options_.is_safe_browsing_managed;
+  }
+
   const SBErrorDisplayOptions& get_error_display_options() const {
     return display_options_;
   }
@@ -144,10 +161,16 @@
            !is_enhanced_protection_enabled();
   }
 
+  // Checks if we should even show the enhanced protection message.
+  // We don't show it:
+  // - in incognito mode, OR
+  // - if kEnhancedProtectionMessageInInterstitials flag is disabled, OR
+  // - if kSafeBrowsingEnabled or kSafeBrowsingEnhanced is managed by enterprise
+  // policy, OR
+  // - if enhanced protection is on
   bool CanShowEnhancedProtectionMessage() {
-    // TODO(crbug.com/1130721): Check feature flag, check ep not managed, check
-    // not already in ep. Check not in incognito.
-    return false;
+    return !is_off_the_record() && is_enhanced_protection_message_enabled() &&
+           !is_safe_browsing_managed() && !is_enhanced_protection_enabled();
   }
 
   SBInterstitialReason interstitial_reason() const {
diff --git a/components/security_interstitials/core/controller_client.cc b/components/security_interstitials/core/controller_client.cc
index b0a1b6a..747cc8a 100644
--- a/components/security_interstitials/core/controller_client.cc
+++ b/components/security_interstitials/core/controller_client.cc
@@ -60,10 +60,6 @@
   OpenURL(open_links_in_new_tab, whitepaper_url);
 }
 
-void ControllerClient::OpenEnhancedProtectionSettings() {
-  // TODO(crbug.com/1130721): Implement this method.
-}
-
 void ControllerClient::OpenURL(bool open_links_in_new_tab, const GURL& url) {
   if (open_links_in_new_tab) {
     OpenUrlInNewForegroundTab(url);
diff --git a/components/security_interstitials/core/controller_client.h b/components/security_interstitials/core/controller_client.h
index 8b55ad6..9c6878f1 100644
--- a/components/security_interstitials/core/controller_client.h
+++ b/components/security_interstitials/core/controller_client.h
@@ -69,8 +69,6 @@
   void OpenExtendedReportingPrivacyPolicy(bool open_links_in_new_tab);
   void OpenExtendedReportingWhitepaper(bool open_links_in_new_tab);
 
-  void OpenEnhancedProtectionSettings();
-
   // Helper method which either opens a URL in a new tab or a the current tab
   // based on the display options setting.
   void OpenURL(bool open_links_in_new_tab, const GURL& url);
@@ -106,6 +104,8 @@
 
   virtual void OpenUrlInNewForegroundTab(const GURL& url) = 0;
 
+  virtual void OpenEnhancedProtectionSettings() = 0;
+
   virtual PrefService* GetPrefService() = 0;
 
   virtual const std::string& GetApplicationLocale() const = 0;
diff --git a/components/session_manager/session_manager_types.h b/components/session_manager/session_manager_types.h
index 0c10be0a..955c39c 100644
--- a/components/session_manager/session_manager_types.h
+++ b/components/session_manager/session_manager_types.h
@@ -33,8 +33,8 @@
   // The session screen is locked.
   LOCKED,
 
-  // Same as SESSION_STATE_LOGIN_PRIMARY but for multi-profiles sign in i.e.
-  // when there's at least one user already active in the session.
+  // Same as LOGIN_PRIMARY but for multi-profiles sign in i.e. when there's at
+  // least one user already active in the session.
   LOGIN_SECONDARY,
 };
 
diff --git a/components/strings/components_strings_bs.xtb b/components/strings/components_strings_bs.xtb
index 10c1065e..ab20d5d 100644
--- a/components/strings/components_strings_bs.xtb
+++ b/components/strings/components_strings_bs.xtb
@@ -834,7 +834,7 @@
 <translation id="4277028893293644418">Ponovo postavi lozinku</translation>
 <translation id="4279811152705618813">Uređajem <ph name="DEVICE_TYPE" /> upravlja <ph name="ENROLLMENT_DOMAIN" /></translation>
 <translation id="428639260510061158">{NUM_CARDS,plural, =1{Ova kartica je sačuvana na vašem Google računu}one{Ove kartice su sačuvane na vašem Google računu}few{Ove kartice su sačuvane na vašem Google računu}other{Ove kartice su sačuvane na vašem Google računu}}</translation>
-<translation id="4297502707443874121">Minijatura za stranicu <ph name="THUMBNAIL_PAGE" /></translation>
+<translation id="4297502707443874121">Sličica za stranicu <ph name="THUMBNAIL_PAGE" /></translation>
 <translation id="42981349822642051">Proširi</translation>
 <translation id="4300675098767811073">Višestruko bušenje na desnoj strani</translation>
 <translation id="4302965934281694568">Chou3 (koverta)</translation>
diff --git a/components/strings/components_strings_de.xtb b/components/strings/components_strings_de.xtb
index 20f0b6f..b0ada43 100644
--- a/components/strings/components_strings_de.xtb
+++ b/components/strings/components_strings_de.xtb
@@ -134,6 +134,7 @@
 <translation id="1453974140256777690">Eingefügter oder angehängter Text wird zur Analyse an Google Cloud oder Dritte gesendet. Er wird beispielsweise auf sensible Daten geprüft.</translation>
 <translation id="1455413310270022028">Radierer</translation>
 <translation id="1462245070427461050">JIS B9</translation>
+<translation id="1462951478840426066">Die Schriftarten auf Ihrem Computer verwenden, damit Sie High Fidelity-Inhalte erstellen können</translation>
 <translation id="1463543813647160932">5 x 7</translation>
 <translation id="1467432559032391204">Links</translation>
 <translation id="1472675084647422956">Mehr anzeigen</translation>
@@ -220,6 +221,7 @@
 <translation id="17513872634828108">Geöffnete Tabs</translation>
 <translation id="1752021286346845558">Ablage 8</translation>
 <translation id="1753706481035618306">Seitennummer</translation>
+<translation id="1757773103848038814">Dicktengleiche Schrift</translation>
 <translation id="1763864636252898013">Dieser Server konnte nicht beweisen, dass er <ph name="DOMAIN" /> ist. Sein Sicherheitszertifikat wird vom Betriebssystem Ihres Geräts als nicht vertrauenswürdig eingestuft. Mögliche Gründe sind eine fehlerhafte Konfiguration oder ein Angreifer, der Ihre Verbindung abfängt.</translation>
 <translation id="1768211456781949159"><ph name="BEGIN_LINK" />Versuchen Sie, die Windows-Netzwerkdiagnose auszuführen.<ph name="END_LINK" /></translation>
 <translation id="1772163372082567643">Der Server <ph name="ORIGIN" />, zu dem Sie gehen, verlangt in einer Header-Datei, dass auf alle an ihn gerichteten Anfragen eine Ursprungsrichtlinie angewendet wird. Die Header-Datei ist allerdings fehlerhaft. Daher kann der Browser Ihre Anforderung für <ph name="SITE" /> nicht ausführen. Ursprungsrichtlinien können von Websitebetreibern verwendet werden, um die Sicherheit und andere Eigenschaften einer Website zu konfigurieren.</translation>
@@ -588,6 +590,7 @@
 <translation id="3395827396354264108">Abholoption</translation>
 <translation id="3399952811970034796">Lieferadresse</translation>
 <translation id="3402261774528610252">Diese Website wurde unter Verwendung von TLS 1.0 oder TLS 1.1 geladen. Diese Versionen wurden eingestellt und werden zukünftig deaktiviert. Sobald sie deaktiviert wurden, können Nutzer diese Website nicht mehr aufrufen. Auf dem Server sollte TLS 1.2 oder höher laufen.</translation>
+<translation id="3411120537985775570">Ihr Administrator hat das Einfügen von Inhalten aus <ph name="ORIGIN_NAME" /> an diese Stelle blockiert</translation>
 <translation id="3414952576877147120">Größe:</translation>
 <translation id="3417660076059365994">Hochgeladene oder angehängte Dateien werden zur Analyse an Google Cloud oder Dritte gesendet. Sie werden beispielsweise auf sensible Daten oder Malware geprüft.</translation>
 <translation id="3422248202833853650">Versuchen Sie, andere Programme zu beenden, um Speicher freizugeben.</translation>
@@ -625,6 +628,7 @@
 <translation id="3532844647053365774"><ph name="HOST" /> möchte Ihr Mikrofon verwenden</translation>
 <translation id="3533328374079021623">Ablage 5</translation>
 <translation id="3539171420378717834">Kopie dieser Karte auf diesem Gerät speichern</translation>
+<translation id="3552297013052089404">Schriftart Sans-Serif</translation>
 <translation id="3558573058928565255">Tageszeit</translation>
 <translation id="3566021033012934673">Dies ist keine sichere Verbindung</translation>
 <translation id="3567778190852720481">Registrierung mit Unternehmenskonto nicht möglich (Unternehmenskonto ist nicht berechtigt).</translation>
@@ -987,6 +991,7 @@
 <translation id="503069730517007720">Für "<ph name="SOFTWARE_NAME" />" ist ein Stammzertifikat erforderlich, das nicht installiert ist. Ihr IT-Administrator sollte die Konfigurationsanweisungen für "<ph name="SOFTWARE_NAME" />" lesen, um das Problem zu beheben. <ph name="FURTHER_EXPLANATION" /></translation>
 <translation id="5031870354684148875">Über Google Übersetzer</translation>
 <translation id="503498442187459473"><ph name="HOST" /> möchte Ihre Kamera und Ihr Mikrofon verwenden</translation>
+<translation id="5039762155821394373">Schriftgröße</translation>
 <translation id="5039804452771397117">Zulassen</translation>
 <translation id="5040262127954254034">Datenschutz</translation>
 <translation id="5043480802608081735">Von Ihnen kopierter Link</translation>
@@ -1254,6 +1259,7 @@
 <translation id="6051221802930200923">Sie können <ph name="SITE" /> zurzeit nicht aufrufen, weil die Website das Zertifikats-Pinning nutzt. Netzwerkfehler und Angriffe sind in der Regel nur vorübergehend, sodass die Seite wahrscheinlich später wieder funktioniert.</translation>
 <translation id="6052284303005792909">•</translation>
 <translation id="6053328359599022071">Ihre Anwesenheit teilen?</translation>
+<translation id="6057359309778282021">Ihr Administrator hat das Teilen von <ph name="ORIGIN_NAME" /> mit <ph name="VM_NAME" /> blockiert</translation>
 <translation id="6058977677006700226">Karten auf allen Ihren Geräten nutzen?</translation>
 <translation id="6059925163896151826">USB-Geräte</translation>
 <translation id="6060009363608157444">Ungültiger DnsOverHttps-Modus.</translation>
@@ -1303,6 +1309,7 @@
         <ph name="END_LIST" /></translation>
 <translation id="6280223929691119688">Die Lieferadresse wird nicht unterstützt. Bitte wählen Sie eine andere Adresse aus.</translation>
 <translation id="6282194474023008486">Postleitzahl</translation>
+<translation id="6289939620939689042">Seitenfarbe</translation>
 <translation id="6290238015253830360">Hier werden Ihre vorgeschlagenen Artikel angezeigt</translation>
 <translation id="6293309776179964942">JIS B5</translation>
 <translation id="6302269476990306341">Google Assistant für Chrome wird beendet</translation>
@@ -1460,6 +1467,7 @@
 <translation id="7004583254764674281">Windows Hello verwenden und Karten schneller bestätigen</translation>
 <translation id="7006930604109697472">Trotzdem senden</translation>
 <translation id="7012363358306927923">China UnionPay</translation>
+<translation id="7014741021609395734">Zoomstufe</translation>
 <translation id="7016992613359344582">Diese Belastungen können einmalig oder wiederkehrend sein und sind vielleicht nicht offensichtlich.</translation>
 <translation id="7029809446516969842">Passwörter</translation>
 <translation id="7031646650991750659">Welche Google Play-Apps Sie installiert haben</translation>
@@ -1863,6 +1871,7 @@
 <translation id="8622948367223941507">Legal-Extra</translation>
 <translation id="8623885649813806493">Keine übereinstimmenden Passwörter. Alle gespeicherten Passwörter anzeigen.</translation>
 <translation id="8625384913736129811">Diese Karte für dieses Gerät speichern</translation>
+<translation id="8657078576661269990">Ihr Administrator hat das Teilen von <ph name="ORIGIN_NAME" /> mit <ph name="VM_NAME_1" /> und <ph name="VM_NAME_2" /> blockiert</translation>
 <translation id="8663226718884576429">Bestellübersicht, <ph name="TOTAL_LABEL" />, weitere Details</translation>
 <translation id="867224526087042813">Signatur</translation>
 <translation id="8676424191133491403">Keine Verzögerung</translation>
@@ -1875,6 +1884,7 @@
 <translation id="8699041776323235191">HID-Gerät</translation>
 <translation id="8703575177326907206">Die Verbindung zu <ph name="DOMAIN" /> ist nicht verschlüsselt.</translation>
 <translation id="8705331520020532516">Seriennummer</translation>
+<translation id="8710842507289500830">Schriftart</translation>
 <translation id="8718314106902482036">Zahlung nicht abgeschlossen</translation>
 <translation id="8719263113926255150"><ph name="ENTITY" />, <ph name="DESCRIPTION" />, Suchvorschlag</translation>
 <translation id="8719528812645237045">Mehrfache Lochung oben</translation>
@@ -1997,6 +2007,7 @@
 <translation id="9191834167571392248">Lochung unten links</translation>
 <translation id="9205078245616868884">Ihre Daten sind mit Ihrer Synchronisierungspassphrase verschlüsselt. Geben Sie diese ein, um die Synchronisierung zu starten.</translation>
 <translation id="9207861905230894330">Der Artikel konnte nicht hinzugefügt werden.</translation>
+<translation id="9213433120051936369">Layout anpassen</translation>
 <translation id="9215416866750762878">Eine Anwendung verhindert, dass Chrome eine sichere Internetverbindung zu dieser Website herstellt</translation>
 <translation id="9219103736887031265">Bilder</translation>
 <translation id="933712198907837967">Diners Club</translation>
diff --git a/components/strings/components_strings_es-419.xtb b/components/strings/components_strings_es-419.xtb
index 0c2a1b6..a2e2232 100644
--- a/components/strings/components_strings_es-419.xtb
+++ b/components/strings/components_strings_es-419.xtb
@@ -134,6 +134,7 @@
 <translation id="1453974140256777690">Se envía el texto que pegas o adjuntas a Google Cloud o a terceros para su análisis. Por ejemplo, es posible que se analice para detectar datos sensibles.</translation>
 <translation id="1455413310270022028">Borrador</translation>
 <translation id="1462245070427461050">JIS B9</translation>
+<translation id="1462951478840426066">Usar las fuentes de la computadora para crear contenido de alta fidelidad</translation>
 <translation id="1463543813647160932">5 x 7</translation>
 <translation id="1467432559032391204">Izquierda</translation>
 <translation id="1472675084647422956">Mostrar más</translation>
@@ -220,6 +221,7 @@
 <translation id="17513872634828108">Pestañas abiertas</translation>
 <translation id="1752021286346845558">Buzón 8</translation>
 <translation id="1753706481035618306">Número de página</translation>
+<translation id="1757773103848038814">Fuente monoespaciada</translation>
 <translation id="1763864636252898013">Este servidor no pudo probar que su dominio es <ph name="DOMAIN" />; el sistema operativo del dispositivo no confía en el certificado de seguridad. Es posible que esto se deba a una configuración incorrecta o a que un atacante interceptó la conexión.</translation>
 <translation id="1768211456781949159"><ph name="BEGIN_LINK" />Intenta ejecutar el Diagnóstico de red de Windows<ph name="END_LINK" />.</translation>
 <translation id="1772163372082567643">El servidor <ph name="ORIGIN" /> al que te diriges estableció un encabezado donde se indica que se aplica una política de origen a todas las solicitudes. Sin embargo, el encabezado tiene un formato no válido, por lo que el navegador no puede cumplir con tu solicitud para <ph name="SITE" />. Los operadores de sitios pueden usar políticas de origen para configurar la seguridad y otras propiedades de un sitio.</translation>
@@ -589,6 +591,7 @@
 <translation id="3395827396354264108">Método de retiro</translation>
 <translation id="3399952811970034796">Dirección de entrega</translation>
 <translation id="3402261774528610252">La conexión que se usó para cargar el sitio implementa el protocolo TLS 1.0 o TLS 1.1, los cuales son obsoletos y se inhabilitarán en el futuro. Cuando esto ocurra, los usuarios no podrán cargar el sitio. El servidor debe habilitar el protocolo TLS 1.2 o versiones posteriores.</translation>
+<translation id="3411120537985775570">Tu administrador no permite pegar contenido de <ph name="ORIGIN_NAME" /> en esta ubicación</translation>
 <translation id="3414952576877147120">Tamaño:</translation>
 <translation id="3417660076059365994">Se envían los archivos que cargas o adjuntas a Google Cloud o a terceros para su análisis. Por ejemplo, es posible que se analicen para detectar datos sensibles o software malicioso.</translation>
 <translation id="3422248202833853650">Prueba cerrar los demás programas para liberar memoria.</translation>
@@ -627,6 +630,7 @@
 <translation id="3532844647053365774"><ph name="HOST" /> desea usar tu micrófono</translation>
 <translation id="3533328374079021623">Buzón 5</translation>
 <translation id="3539171420378717834">Conservar una copia de la tarjeta en el dispositivo.</translation>
+<translation id="3552297013052089404">Fuente Sans Serif</translation>
 <translation id="3558573058928565255">Hora del día</translation>
 <translation id="3566021033012934673">La conexión no es privada</translation>
 <translation id="3567778190852720481">No es posible inscribirse con una cuenta empresarial (tipo de cuenta no apta).</translation>
@@ -820,6 +824,7 @@
 <translation id="4277028893293644418">Restablecer contraseña</translation>
 <translation id="4279811152705618813"><ph name="ENROLLMENT_DOMAIN" /> administra tu dispositivo <ph name="DEVICE_TYPE" /></translation>
 <translation id="428639260510061158">{NUM_CARDS,plural, =1{Se guardó esta tarjeta en tu Cuenta de Google}other{Se guardaron estas tarjetas en tu Cuenta de Google}}</translation>
+<translation id="4297502707443874121">Miniatura para la página <ph name="THUMBNAIL_PAGE" /></translation>
 <translation id="42981349822642051">Expandir</translation>
 <translation id="4300675098767811073">Perforaciones múltiples a la derecha</translation>
 <translation id="4302965934281694568">Chou3 (Envelope)</translation>
@@ -990,6 +995,7 @@
 <translation id="503069730517007720">Se requiere un certificado raíz para "<ph name="SOFTWARE_NAME" />", pero no está instalado. Tu administrador de IT debe analizar las instrucciones de configuración de "<ph name="SOFTWARE_NAME" />" para corregir este problema. <ph name="FURTHER_EXPLANATION" /></translation>
 <translation id="5031870354684148875">Acerca de Google Traductor</translation>
 <translation id="503498442187459473"><ph name="HOST" /> desea usar tu cámara y micrófono</translation>
+<translation id="5039762155821394373">Tamaño de fuente</translation>
 <translation id="5039804452771397117">Permitir</translation>
 <translation id="5040262127954254034">Privacidad</translation>
 <translation id="5043480802608081735">Vínculo que copiaste</translation>
@@ -1257,6 +1263,7 @@
 <translation id="6051221802930200923">No puedes visitar <ph name="SITE" /> ahora porque el sitio web usa la fijación de certificados. Los ataques y errores de red suelen ser temporales, por lo que es posible que esta página funcione más tarde.</translation>
 <translation id="6052284303005792909">•</translation>
 <translation id="6053328359599022071">¿Deseas compartir tu presencia?</translation>
+<translation id="6057359309778282021">Tu administrador no permite que <ph name="ORIGIN_NAME" /> comparta contenido con <ph name="VM_NAME" /></translation>
 <translation id="6058977677006700226">¿Quieres usar tus tarjetas en todos los dispositivos?</translation>
 <translation id="6059925163896151826">Dispositivos USB</translation>
 <translation id="6060009363608157444">Modo DnsOverHttps no válido</translation>
@@ -1306,6 +1313,7 @@
         <ph name="END_LIST" /></translation>
 <translation id="6280223929691119688">La dirección de envío no es válida. Selecciona una dirección diferente.</translation>
 <translation id="6282194474023008486">Código postal</translation>
+<translation id="6289939620939689042">Color de la página</translation>
 <translation id="6290238015253830360">Tus artículos sugeridos aparecen aquí</translation>
 <translation id="6293309776179964942">JIS B5</translation>
 <translation id="6302269476990306341">Se está deteniendo el Asistente de Google en Chrome</translation>
@@ -1463,6 +1471,7 @@
 <translation id="7004583254764674281">Usa Windows Hello para verificar las tarjetas más rápido</translation>
 <translation id="7006930604109697472">Enviar de todas formas</translation>
 <translation id="7012363358306927923">China UnionPay</translation>
+<translation id="7014741021609395734">Nivel del zoom</translation>
 <translation id="7016992613359344582">Estos cargos pueden ser únicos o recurrentes, y es posible que no sean evidentes.</translation>
 <translation id="7029809446516969842">Contraseñas</translation>
 <translation id="7031646650991750659">Las apps de Google Play que instalaste</translation>
@@ -1866,6 +1875,7 @@
 <translation id="8622948367223941507">Legal-Extra</translation>
 <translation id="8623885649813806493">No se encontró una contraseña para este sitio. Mostrar todas las contraseñas guardadas.</translation>
 <translation id="8625384913736129811">Guardar esta tarjeta para este dispositivo</translation>
+<translation id="8657078576661269990">Tu administrador no permite que <ph name="ORIGIN_NAME" /> comparta contenido con <ph name="VM_NAME_1" /> y <ph name="VM_NAME_2" /></translation>
 <translation id="8663226718884576429">Resumen del pedido, <ph name="TOTAL_LABEL" />, Más detalles</translation>
 <translation id="867224526087042813">Firma</translation>
 <translation id="8676424191133491403">Sin demora</translation>
@@ -1878,6 +1888,7 @@
 <translation id="8699041776323235191">Dispositivo HID</translation>
 <translation id="8703575177326907206">Tu conexión a <ph name="DOMAIN" /> no está cifrada.</translation>
 <translation id="8705331520020532516">Número de serie</translation>
+<translation id="8710842507289500830">Estilo de la fuente</translation>
 <translation id="8718314106902482036">No se completó el pago</translation>
 <translation id="8719263113926255150"><ph name="ENTITY" />, <ph name="DESCRIPTION" />, sugerencia de búsqueda</translation>
 <translation id="8719528812645237045">Perforaciones múltiples en la parte superior</translation>
@@ -1999,6 +2010,7 @@
 <translation id="9191834167571392248">Perforación en la esquina inferior izquierda</translation>
 <translation id="9205078245616868884">Tus datos están encriptados con tu frase de contraseña para sincronización. Debes ingresarla para iniciar la sincronización.</translation>
 <translation id="9207861905230894330">Error al agregar artículo</translation>
+<translation id="9213433120051936369">Personalizar el aspecto</translation>
 <translation id="9215416866750762878">Una aplicación impide que Chrome se conecte de forma segura a este sitio</translation>
 <translation id="9219103736887031265">Imágenes</translation>
 <translation id="933712198907837967">Diners Club</translation>
diff --git a/components/strings/components_strings_es.xtb b/components/strings/components_strings_es.xtb
index 81ef2dd..77c51ec 100644
--- a/components/strings/components_strings_es.xtb
+++ b/components/strings/components_strings_es.xtb
@@ -834,6 +834,7 @@
 <translation id="4277028893293644418">Cambiar contraseña</translation>
 <translation id="4279811152705618813">Tu <ph name="DEVICE_TYPE" /> lo gestiona <ph name="ENROLLMENT_DOMAIN" /></translation>
 <translation id="428639260510061158">{NUM_CARDS,plural, =1{Se ha guardado esta tarjeta en tu cuenta de Google}other{Se han guardado estas tarjetas en tu cuenta de Google}}</translation>
+<translation id="4297502707443874121">Miniatura de la página <ph name="THUMBNAIL_PAGE" /></translation>
 <translation id="42981349822642051">Mostrar</translation>
 <translation id="4300675098767811073">Perforado múltiple en la parte derecha</translation>
 <translation id="4302965934281694568">Chou3 (sobre)</translation>
diff --git a/components/strings/components_strings_fr.xtb b/components/strings/components_strings_fr.xtb
index 934effbc..d6da06d5 100644
--- a/components/strings/components_strings_fr.xtb
+++ b/components/strings/components_strings_fr.xtb
@@ -134,6 +134,7 @@
 <translation id="1453974140256777690">Le texte que vous collez ou joignez est envoyé dans Google Cloud ou à des tiers pour y être analysé (par exemple, pour vérifier qu'il ne contient pas de données sensibles).</translation>
 <translation id="1455413310270022028">Gomme</translation>
 <translation id="1462245070427461050">JIS B9</translation>
+<translation id="1462951478840426066">Utiliser les polices installées sur votre ordinateur pour créer des contenus haute fidélité</translation>
 <translation id="1463543813647160932">5 x 7</translation>
 <translation id="1467432559032391204">À gauche</translation>
 <translation id="1472675084647422956">Plus</translation>
@@ -220,6 +221,7 @@
 <translation id="17513872634828108">Onglets ouverts</translation>
 <translation id="1752021286346845558">Boîte aux lettres 8</translation>
 <translation id="1753706481035618306">Numéro de page</translation>
+<translation id="1757773103848038814">Police à chasse fixe</translation>
 <translation id="1763864636252898013">Impossible de vérifier sur le serveur qu'il s'agit bien du domaine <ph name="DOMAIN" />, car son certificat de sécurité n'est pas considéré comme fiable par le système d'exploitation de votre appareil. Cela peut être dû à une mauvaise configuration ou bien à l'interception de votre connexion par un pirate informatique.</translation>
 <translation id="1768211456781949159"><ph name="BEGIN_LINK" />Essayez d'exécuter les diagnostics réseau de Windows<ph name="END_LINK" />.</translation>
 <translation id="1772163372082567643">Le serveur auquel vous accédez (<ph name="ORIGIN" />) a défini un en-tête exigeant
@@ -592,6 +594,7 @@
 <translation id="3395827396354264108">Mode d'enlèvement</translation>
 <translation id="3399952811970034796">Adresse de livraison</translation>
 <translation id="3402261774528610252">La connexion utilisée pour charger ce site l'a fait au moyen de TLS 1.0 ou TLS 1.1, qui sont obsolètes et seront désactivés à l'avenir. Une fois ces protocoles désactivés, les utilisateurs ne seront plus autorisés à charger ce site. Le serveur doit activer TLS 1.2 ou version ultérieure.</translation>
+<translation id="3411120537985775570">L'administrateur a interdit de coller du contenu provenant de "<ph name="ORIGIN_NAME" />" à cet endroit</translation>
 <translation id="3414952576877147120">Taille :</translation>
 <translation id="3417660076059365994">Le fichier que vous importez ou joignez est envoyé dans Google Cloud ou à des tiers pour y être analysé (par exemple, pour vérifier qu'il ne contient pas de données sensibles ni de logiciels malveillants).</translation>
 <translation id="3422248202833853650">Essayez de fermer les autres programmes pour libérer de la mémoire.</translation>
@@ -630,6 +633,7 @@
 <translation id="3532844647053365774"><ph name="HOST" /> souhaite utiliser votre micro</translation>
 <translation id="3533328374079021623">Boîte aux lettres 5</translation>
 <translation id="3539171420378717834">Conserver une copie de cette carte sur cet appareil</translation>
+<translation id="3552297013052089404">Police Sans Serif</translation>
 <translation id="3558573058928565255">Dans la journée</translation>
 <translation id="3566021033012934673">Votre connexion n'est pas privée</translation>
 <translation id="3567778190852720481">Impossible d'enregistrer votre appareil avec ce compte d'entreprise (le compte en question n'est pas éligible).</translation>
@@ -998,6 +1002,7 @@
 <translation id="503069730517007720">Veuillez installer un certificat racine pour "<ph name="SOFTWARE_NAME" />". Nous recommandons à votre administrateur informatique de lire les instructions de configuration du logiciel "<ph name="SOFTWARE_NAME" />" afin de remédier à la situation. <ph name="FURTHER_EXPLANATION" /></translation>
 <translation id="5031870354684148875">À propos de Google Traduction</translation>
 <translation id="503498442187459473"><ph name="HOST" /> souhaite utiliser votre appareil photo et votre micro</translation>
+<translation id="5039762155821394373">Taille de police</translation>
 <translation id="5039804452771397117">Autoriser</translation>
 <translation id="5040262127954254034">Confidentialité</translation>
 <translation id="5043480802608081735">Lien copié</translation>
@@ -1265,6 +1270,7 @@
 <translation id="6051221802930200923">Le site <ph name="SITE" /> est actuellement inaccessible, car il utilise l'épinglage des certificats. Les erreurs réseau et les attaques sont généralement temporaires. Vous devriez donc pouvoir accéder à cette page plus tard.</translation>
 <translation id="6052284303005792909">•</translation>
 <translation id="6053328359599022071">Indiquer que vous êtes là ?</translation>
+<translation id="6057359309778282021">L'administrateur a interdit le partage de données depuis <ph name="ORIGIN_NAME" /> vers <ph name="VM_NAME" /></translation>
 <translation id="6058977677006700226">Vous utilisez vos cartes sur tous vos appareils ?</translation>
 <translation id="6059925163896151826">Appareils USB</translation>
 <translation id="6060009363608157444">Mode DnsOverHttps non valide.</translation>
@@ -1314,6 +1320,7 @@
         <ph name="END_LIST" /></translation>
 <translation id="6280223929691119688">Impossible de livrer à cette adresse. Sélectionnez-en une autre.</translation>
 <translation id="6282194474023008486">Code postal</translation>
+<translation id="6289939620939689042">Couleur de la page</translation>
 <translation id="6290238015253830360">Vos suggestions d'articles s'affichent ici</translation>
 <translation id="6293309776179964942">JIS B5</translation>
 <translation id="6302269476990306341">Arrêt de l'Assistant Google dans Chrome</translation>
@@ -1471,6 +1478,7 @@
 <translation id="7004583254764674281">Utiliser Windows Hello pour confirmer les cartes plus rapidement</translation>
 <translation id="7006930604109697472">Envoyer quand même</translation>
 <translation id="7012363358306927923">China UnionPay</translation>
+<translation id="7014741021609395734">Niveau de zoom</translation>
 <translation id="7016992613359344582">Il peut s'agir de frais uniques ou récurrents qui ne sont pas toujours clairement signalés.</translation>
 <translation id="7029809446516969842">Mots de passe</translation>
 <translation id="7031646650991750659">Les applications Google Play que vous avez installées</translation>
@@ -1873,6 +1881,7 @@
 <translation id="8622948367223941507">Legal-Extra</translation>
 <translation id="8623885649813806493">Aucun mot de passe enregistré. Afficher tous les mots de passe enregistrés.</translation>
 <translation id="8625384913736129811">Enregistrer cette carte sur cet appareil</translation>
+<translation id="8657078576661269990">L'administrateur a interdit le partage de données depuis <ph name="ORIGIN_NAME" /> vers <ph name="VM_NAME_1" /> et <ph name="VM_NAME_2" /></translation>
 <translation id="8663226718884576429">Récapitulatif de la commande, <ph name="TOTAL_LABEL" />, détails supplémentaires</translation>
 <translation id="867224526087042813">Signature</translation>
 <translation id="8676424191133491403">Sans délai</translation>
@@ -1885,6 +1894,7 @@
 <translation id="8699041776323235191">Appareil HID</translation>
 <translation id="8703575177326907206">Votre connexion à <ph name="DOMAIN" /> n'est pas chiffrée.</translation>
 <translation id="8705331520020532516">Numéro de série</translation>
+<translation id="8710842507289500830">Style de police</translation>
 <translation id="8718314106902482036">Paiement non finalisé</translation>
 <translation id="8719263113926255150"><ph name="ENTITY" />, <ph name="DESCRIPTION" />, suggestion de recherche</translation>
 <translation id="8719528812645237045">Multiple perforation en haut</translation>
@@ -2006,6 +2016,7 @@
 <translation id="9191834167571392248">Perforation en bas à gauche</translation>
 <translation id="9205078245616868884">Vos données sont chiffrées avec votre phrase secrète de synchronisation. Saisissez-la pour lancer la synchronisation.</translation>
 <translation id="9207861905230894330">Échec de l'ajout de l'article.</translation>
+<translation id="9213433120051936369">Personnaliser l'apparence</translation>
 <translation id="9215416866750762878">Une application empêche Chrome de se connecter à ce site de manière sécurisée</translation>
 <translation id="9219103736887031265">Images</translation>
 <translation id="933712198907837967">Diners Club</translation>
diff --git a/components/strings/components_strings_hi.xtb b/components/strings/components_strings_hi.xtb
index 382c1ee5..54c1188 100644
--- a/components/strings/components_strings_hi.xtb
+++ b/components/strings/components_strings_hi.xtb
@@ -831,6 +831,7 @@
 <translation id="4277028893293644418">पासवर्ड रीसेट करें</translation>
 <translation id="4279811152705618813">आपके <ph name="DEVICE_TYPE" /> का प्रबंधन <ph name="ENROLLMENT_DOMAIN" /> करता है</translation>
 <translation id="428639260510061158">{NUM_CARDS,plural, =1{यह कार्ड आपके Google खाते में सेव कर लिया गया है}one{ये कार्ड आपके Google खाते में सेव कर लिए गए हैं}other{ये कार्ड आपके Google खाते में सेव कर लिए गए हैं}}</translation>
+<translation id="4297502707443874121">पेज <ph name="THUMBNAIL_PAGE" /> का थंबनेल</translation>
 <translation id="42981349822642051">विस्तृत करें</translation>
 <translation id="4300675098767811073">दाईं ओर एक से ज़्यादा पंच</translation>
 <translation id="4302965934281694568">शू3 (एन्वेलप)</translation>
diff --git a/components/strings/components_strings_hu.xtb b/components/strings/components_strings_hu.xtb
index 8480eaf..136b1fe 100644
--- a/components/strings/components_strings_hu.xtb
+++ b/components/strings/components_strings_hu.xtb
@@ -830,6 +830,7 @@
 <translation id="4277028893293644418">Jelszó visszaállítása</translation>
 <translation id="4279811152705618813"><ph name="DEVICE_TYPE" /> eszközét a(z) <ph name="ENROLLMENT_DOMAIN" /> kezeli</translation>
 <translation id="428639260510061158">{NUM_CARDS,plural, =1{A kártyát mentettük a Google-fiókjába.}other{Ezeket a kártyákat mentettük a Google-fiókjába.}}</translation>
+<translation id="4297502707443874121">A(z) <ph name="THUMBNAIL_PAGE" /> oldal indexképe</translation>
 <translation id="42981349822642051">Kibontás</translation>
 <translation id="4300675098767811073">Több lyuk a jobb oldalon</translation>
 <translation id="4302965934281694568">Chou3 (boríték)</translation>
diff --git a/components/strings/components_strings_it.xtb b/components/strings/components_strings_it.xtb
index effca137..536c534 100644
--- a/components/strings/components_strings_it.xtb
+++ b/components/strings/components_strings_it.xtb
@@ -831,6 +831,7 @@
 <translation id="4277028893293644418">Reimposta password</translation>
 <translation id="4279811152705618813">Il tuo dispositivo <ph name="DEVICE_TYPE" /> è gestito dal dominio <ph name="ENROLLMENT_DOMAIN" /></translation>
 <translation id="428639260510061158">{NUM_CARDS,plural, =1{Questa carta è stata salvata nel tuo Account Google}other{Queste carte sono state salvate nel tuo Account Google}}</translation>
+<translation id="4297502707443874121">Miniatura della pagina <ph name="THUMBNAIL_PAGE" /></translation>
 <translation id="42981349822642051">Espandi</translation>
 <translation id="4300675098767811073">Perforatura multipla a destra</translation>
 <translation id="4302965934281694568">Chou3 (Envelope)</translation>
diff --git a/components/strings/components_strings_ml.xtb b/components/strings/components_strings_ml.xtb
index 2724644..0afc1757 100644
--- a/components/strings/components_strings_ml.xtb
+++ b/components/strings/components_strings_ml.xtb
@@ -828,6 +828,7 @@
 <translation id="4277028893293644418">പാസ്‌വേഡ് റീസെറ്റ് ചെയ്യുക</translation>
 <translation id="4279811152705618813">നിങ്ങളുടെ <ph name="DEVICE_TYPE" /> മാനേജ് ചെയ്യുന്നത് <ph name="ENROLLMENT_DOMAIN" /> ആണ്</translation>
 <translation id="428639260510061158">{NUM_CARDS,plural, =1{ഈ കാർഡ് നിങ്ങളുടെ Google അക്കൗണ്ടിൽ സംരക്ഷിച്ചു}other{ഈ കാർഡുകൾ നിങ്ങളുടെ Google അക്കൗണ്ടിൽ സംരക്ഷിച്ചു}}</translation>
+<translation id="4297502707443874121"><ph name="THUMBNAIL_PAGE" />-ാം പേജിനുള്ള ലഘുചിത്രം</translation>
 <translation id="42981349822642051">വികസിപ്പിക്കുക</translation>
 <translation id="4300675098767811073">വലതുവശത്ത് ഒന്നിലധികം പഞ്ചുകൾ ചെയ്യുക</translation>
 <translation id="4302965934281694568">Chou3 (എൻവലപ്പ്)</translation>
diff --git a/components/strings/components_strings_mr.xtb b/components/strings/components_strings_mr.xtb
index 0cab3a6..c275370d 100644
--- a/components/strings/components_strings_mr.xtb
+++ b/components/strings/components_strings_mr.xtb
@@ -134,6 +134,7 @@
 <translation id="1453974140256777690">तुम्ही पेस्ट किंवा अटॅच केलेला मजकूर विश्लेषणासाठी Google Cloud किंवा तृतीय पक्षांकडे पाठवला जातो. उदाहरणार्थ, तो संवेदनशील डेटासाठी स्कॅन केला जाऊ शकतो.</translation>
 <translation id="1455413310270022028">खोडरबर</translation>
 <translation id="1462245070427461050">JIS B9</translation>
+<translation id="1462951478840426066">तुमच्या कॉंप्युटरवरील फॉंट वापरा जेणेकरून, तुम्ही उच्च फायडेलिटी आशय तयार करू शकाल</translation>
 <translation id="1463543813647160932">5x7</translation>
 <translation id="1467432559032391204">डावे</translation>
 <translation id="1472675084647422956">अधिक दर्शवा</translation>
@@ -220,6 +221,7 @@
 <translation id="17513872634828108">खुले टॅब</translation>
 <translation id="1752021286346845558">मेलबॉक्स ८</translation>
 <translation id="1753706481035618306">पृष्ठ क्रमांक</translation>
+<translation id="1757773103848038814">Monospace फॉंट</translation>
 <translation id="1763864636252898013">हा सर्व्हर हे <ph name="DOMAIN" /> असल्याचे सिद्ध करू शकला नाही; त्याचे सुरक्षितता सर्टिफिकेट तुम्हाला डिव्हाइसच्या ऑपरेटिंग सिस्टमद्वारे विश्वसनीय नाही. हे कदाचित एका चुकीच्या कॉन्फिगरेशनमुळे किंवा हल्लेखोराने तुमचे कनेक्शन इंटरसेप्ट केल्यामुळे झाले असू शकते.</translation>
 <translation id="1768211456781949159"><ph name="BEGIN_LINK" />Windows नेटवर्क निदान चालवून पहा<ph name="END_LINK" />.</translation>
 <translation id="1772163372082567643">तुम्ही ज्या सर्व्हरवर जात आहात त्याने <ph name="ORIGIN" />, ला केलेल्या सर्व विनंत्यांवर
@@ -594,6 +596,7 @@
 <translation id="3395827396354264108">पिकअप पद्धत</translation>
 <translation id="3399952811970034796">वितरण पत्ता</translation>
 <translation id="3402261774528610252">कनेक्शनने ही साइट लोड करण्यासाठी कालबाह्य झालेले TLS 1.0 किंवा TLS 1.1 वापरले आहेत. ते भविष्यात बंद केले जातील. बंद केल्यानंतर, वापरकर्त्यांना ही साइट लोड करण्यापासून प्रतिबंधित केले जाईल. सर्व्हर TLS 1.2 किंवा त्यापुढील आवृत्तीवर सुरू करणे आवश्यक आहे.</translation>
+<translation id="3411120537985775570">तुमच्या अ‍ॅडमिनिस्ट्रेटरने <ph name="ORIGIN_NAME" /> वरून या स्थानावर पेस्ट करणे ब्लॉक केले</translation>
 <translation id="3414952576877147120">आकार:</translation>
 <translation id="3417660076059365994">तुम्ही अपलोड किंवा अटॅच केलेल्या फाइल विश्लेषणासाठी Google Cloud किंवा तृतीय पक्षांकडे पाठवल्या जातात. उदाहरणार्थ, त्या संवेदनशील डेटा किंवा मालवेअरसाठी स्कॅन केल्या जाऊ शकतात.</translation>
 <translation id="3422248202833853650">मेमरी मोकळी करण्‍यासाठी अन्य प्रोग्राम मधून बाहर पडण्याचा प्रयत्न करा.</translation>
@@ -631,6 +634,7 @@
 <translation id="3532844647053365774"><ph name="HOST" /> ला तुमचा मायक्रोफोन वापरायचा आहे</translation>
 <translation id="3533328374079021623">मेलबॉक्स ५</translation>
 <translation id="3539171420378717834">या डिव्हाइसवर या कार्डची एक प्रत ठेवा</translation>
+<translation id="3552297013052089404">Sans-Serif फॉंट</translation>
 <translation id="3558573058928565255">दिवसापर्यंत</translation>
 <translation id="3566021033012934673">तुमचे कनेक्शन खाजगी नाही</translation>
 <translation id="3567778190852720481">एंटरप्राइझ खात्यासोबत नोंदणी करू शकत नाही (एंटरप्राइझ खाते पात्र नाही).</translation>
@@ -999,6 +1003,7 @@
 <translation id="503069730517007720">"<ph name="SOFTWARE_NAME" />" साठी मूळ सर्टिफिकेट आवश्यक आहे परंतु ते इंस्टॉल केलेले नाही. तुमच्या IT अ‍ॅडमिनिस्ट्रेटरने ही समस्या सोडण्यासाठी "<ph name="SOFTWARE_NAME" />" साठीच्या कॉन्फिगरेशन सूचना पहाव्यात. <ph name="FURTHER_EXPLANATION" /></translation>
 <translation id="5031870354684148875">Google भाषांतर बद्दल</translation>
 <translation id="503498442187459473"><ph name="HOST" /> ला तुमचा कॅमेरा आणि मायक्रोफोन वापरायचा आहे</translation>
+<translation id="5039762155821394373">फॉंटचा आकार</translation>
 <translation id="5039804452771397117">परवानगी द्या</translation>
 <translation id="5040262127954254034">गोपनीयता</translation>
 <translation id="5043480802608081735">तुम्ही कॉपी केलेली लिंक</translation>
@@ -1266,6 +1271,7 @@
 <translation id="6051221802930200923">ही वेबसाइट सर्टिफिकेट पिनिंग वापरत असल्यामुळे तुम्ही आत्ता <ph name="SITE" /> पाहू शकणार नाही. नेटवर्क एरर आणि आक्रमण शक्यतो तात्पुरती असतात, त्यामुळे हे पेज नंतर पाहता येईल.</translation>
 <translation id="6052284303005792909">•</translation>
 <translation id="6053328359599022071">तुमची ॲक्टिव्हिटी शेअर करायची आहे का?</translation>
+<translation id="6057359309778282021">तुमच्या अ‍ॅडमिनिस्ट्रेटरने <ph name="ORIGIN_NAME" /> वरून <ph name="VM_NAME" /> वर शेअर करणे ब्लॉक केले</translation>
 <translation id="6058977677006700226">तुमच्या सर्व डिव्हाइसवर तुमची कार्डे वापरायची का?</translation>
 <translation id="6059925163896151826">USB डिव्हाइसेस</translation>
 <translation id="6060009363608157444">चुकीचा DnsOverHttps मोड.</translation>
@@ -1316,6 +1322,7 @@
         <ph name="END_LIST" /></translation>
 <translation id="6280223929691119688">या पत्त्यावर देऊ शकत नाही. वेगळा पत्ता निवडा.</translation>
 <translation id="6282194474023008486">पोस्टल कोड</translation>
+<translation id="6289939620939689042">पेजचा रंग</translation>
 <translation id="6290238015253830360">तुम्ही सुचविलेले लेख येथे दिसतील</translation>
 <translation id="6293309776179964942">JIS B5</translation>
 <translation id="6302269476990306341">Chrome मधील Google असिस्टंट थांबत आहे</translation>
@@ -1473,6 +1480,7 @@
 <translation id="7004583254764674281">कार्डांची जलद खात्री करण्यासाठी Windows Hello वापरा</translation>
 <translation id="7006930604109697472">तरीही पाठवा</translation>
 <translation id="7012363358306927923">China UnionPay</translation>
+<translation id="7014741021609395734">झूम करण्याची पातळी</translation>
 <translation id="7016992613359344582">हे शुल्क एकाच वेळी द्यायचे किंवा आवर्ती असू शकतात आणि स्पष्ट नसू शकतात.</translation>
 <translation id="7029809446516969842">पासवर्ड</translation>
 <translation id="7031646650991750659">तुम्ही कोणती Google Play ॲप्स इंस्टॉल केली आहेत</translation>
@@ -1875,6 +1883,7 @@
 <translation id="8622948367223941507">Legal-Extra</translation>
 <translation id="8623885649813806493">जुळणारे कोणतेही पासवर्ड नाहीत. सेव्ह केलेले सर्व पासवर्ड दाखवा.</translation>
 <translation id="8625384913736129811">या डिव्हाइसवर हे कार्ड सेव्‍ह करा</translation>
+<translation id="8657078576661269990">तुमच्या अ‍ॅडमिनिस्ट्रेटरने <ph name="ORIGIN_NAME" /> वरून <ph name="VM_NAME_1" /> आणि <ph name="VM_NAME_2" /> वर शेअर करणे ब्लॉक केले</translation>
 <translation id="8663226718884576429">ऑर्डर सारांश, <ph name="TOTAL_LABEL" />, आणखी तपशील</translation>
 <translation id="867224526087042813">स्वाक्षरी</translation>
 <translation id="8676424191133491403">विलंब नाही</translation>
@@ -1887,6 +1896,7 @@
 <translation id="8699041776323235191">HID डिव्हाइस</translation>
 <translation id="8703575177326907206">तुमचे <ph name="DOMAIN" /> चे कनेक्शन एंक्रिप्ट केलेले नाही.</translation>
 <translation id="8705331520020532516">सिरीअल नंबर</translation>
+<translation id="8710842507289500830">फॉंटची शैली</translation>
 <translation id="8718314106902482036">पेमेंट पूर्ण झाले नाही</translation>
 <translation id="8719263113926255150"><ph name="ENTITY" />, <ph name="DESCRIPTION" />, शोध सूचना</translation>
 <translation id="8719528812645237045">मल्टिपल पंच बॉटम</translation>
@@ -2008,6 +2018,7 @@
 <translation id="9191834167571392248">पंच बॉटम लेफ्ट</translation>
 <translation id="9205078245616868884">तुमचा डेटा तुमच्या सिंक सांकेतिक पासफ्रेझासह एंक्रिप्ट केलेला केला जातो. सिंक सुरू करण्यासाठी तो एंटर करा.</translation>
 <translation id="9207861905230894330">लेख जोडण्यात अयशस्वी.</translation>
+<translation id="9213433120051936369">स्वरूप कस्टमाइझ करा</translation>
 <translation id="9215416866750762878">एक ॲप्लिकेशन Chrome ला या साइटशी सुरक्षितपणे कनेक्ट करण्यापासून थांबवत आहे</translation>
 <translation id="9219103736887031265">इमेज</translation>
 <translation id="933712198907837967">Diners Club</translation>
diff --git a/components/strings/components_strings_nl.xtb b/components/strings/components_strings_nl.xtb
index ef34c948..1a18d97b7 100644
--- a/components/strings/components_strings_nl.xtb
+++ b/components/strings/components_strings_nl.xtb
@@ -134,6 +134,7 @@
 <translation id="1453974140256777690">Tekst die je plakt of bijvoegt, wordt voor analyse naar Google Cloud of naar derden gestuurd. De tekst kan bijvoorbeeld worden gescand op gevoelige gegevens of malware.</translation>
 <translation id="1455413310270022028">Gum</translation>
 <translation id="1462245070427461050">JIS B9</translation>
+<translation id="1462951478840426066">Gebruik de lettertypen op je computer zodat je hifi-content kunt maken</translation>
 <translation id="1463543813647160932">5x7</translation>
 <translation id="1467432559032391204">Links</translation>
 <translation id="1472675084647422956">Meer weergeven</translation>
@@ -220,6 +221,7 @@
 <translation id="17513872634828108">Geopende tabbladen</translation>
 <translation id="1752021286346845558">Mailbox 8</translation>
 <translation id="1753706481035618306">Paginanummer</translation>
+<translation id="1757773103848038814">Monospace-lettertype</translation>
 <translation id="1763864636252898013">De server kan niet bewijzen dat dit <ph name="DOMAIN" /> is. Het beveiligingscertificaat van de server wordt niet vertrouwd door het besturingssysteem van je apparaat. Dit kan worden veroorzaakt door een verkeerde configuratie of een aanvaller die je verbinding onderschept.</translation>
 <translation id="1768211456781949159"><ph name="BEGIN_LINK" />Voer Windows Netwerkcontrole uit<ph name="END_LINK" />.</translation>
 <translation id="1772163372082567643">Voor de server waar je naartoe gaat (<ph name="ORIGIN" />), is een header ingesteld
@@ -586,6 +588,7 @@
 <translation id="3395827396354264108">Ophaalmethode</translation>
 <translation id="3399952811970034796">Bezorgadres</translation>
 <translation id="3402261774528610252">De verbinding waarmee deze site is geladen, gebruikte TLS 1.0 of TLS 1.1. Deze versies zijn verouderd en worden in de toekomst uitgeschakeld. Nadat ze zijn uitgeschakeld, kunnen gebruikers deze site niet meer laden. Voor de server moet TLS 1.2 of hoger worden ingeschakeld.</translation>
+<translation id="3411120537985775570">Plakken van <ph name="ORIGIN_NAME" /> naar deze locatie is geblokkeerd door je beheerder</translation>
 <translation id="3414952576877147120">Grootte:</translation>
 <translation id="3417660076059365994">Bestanden die je uploadt of bijvoegt, worden voor analyse naar Google Cloud of derden gestuurd. De bestanden kunnen bijvoorbeeld worden gescand op gevoelige gegevens of malware.</translation>
 <translation id="3422248202833853650">Probeer andere programma's af te sluiten om geheugen vrij te maken.</translation>
@@ -623,6 +626,7 @@
 <translation id="3532844647053365774"><ph name="HOST" /> wil gebruikmaken van je microfoon</translation>
 <translation id="3533328374079021623">Mailbox 5</translation>
 <translation id="3539171420378717834">Een exemplaar van deze pas op dit apparaat bewaren</translation>
+<translation id="3552297013052089404">Sans-serif-lettertype</translation>
 <translation id="3558573058928565255">Tijd van de dag</translation>
 <translation id="3566021033012934673">Je verbinding is niet privé</translation>
 <translation id="3567778190852720481">Kan niet inschrijven met werkaccount (werkaccount komt niet in aanmerking).</translation>
@@ -991,6 +995,7 @@
 <translation id="503069730517007720">Er is een rootcertificaat voor '<ph name="SOFTWARE_NAME" />' vereist, maar niet geïnstalleerd. Je IT-beheerder moet de configuratie-instructies voor '<ph name="SOFTWARE_NAME" />' raadplegen om dit probleem op te lossen. <ph name="FURTHER_EXPLANATION" /></translation>
 <translation id="5031870354684148875">Over Google Translate</translation>
 <translation id="503498442187459473"><ph name="HOST" /> wil gebruikmaken van je camera en microfoon</translation>
+<translation id="5039762155821394373">Lettergrootte</translation>
 <translation id="5039804452771397117">Toestaan</translation>
 <translation id="5040262127954254034">Privacy</translation>
 <translation id="5043480802608081735">Link die je hebt gekopieerd</translation>
@@ -1258,6 +1263,7 @@
 <translation id="6051221802930200923">Je kunt <ph name="SITE" /> momenteel niet bezoeken, omdat de website gebruikmaakt van certificaatpinning. Netwerkfouten en aanvallen zijn doorgaans tijdelijk, dus deze pagina werkt later waarschijnlijk correct.</translation>
 <translation id="6052284303005792909">•</translation>
 <translation id="6053328359599022071">Je aanwezigheid delen?</translation>
+<translation id="6057359309778282021">Je beheerder heeft delen door <ph name="ORIGIN_NAME" /> met <ph name="VM_NAME" /> geblokkeerd</translation>
 <translation id="6058977677006700226">Je passen gebruiken op al je apparaten?</translation>
 <translation id="6059925163896151826">USB-apparaten</translation>
 <translation id="6060009363608157444">Ongeldige DnsOverHttps-modus.</translation>
@@ -1306,6 +1312,7 @@
         <ph name="END_LIST" /></translation>
 <translation id="6280223929691119688">Kan niet bezorgen op dit adres. Selecteer een ander adres.</translation>
 <translation id="6282194474023008486">Postcode</translation>
+<translation id="6289939620939689042">Paginakleur</translation>
 <translation id="6290238015253830360">Je voorgestelde artikelen worden hier weergegeven</translation>
 <translation id="6293309776179964942">JIS B5</translation>
 <translation id="6302269476990306341">De Google Assistent in Chrome wordt gestopt</translation>
@@ -1463,6 +1470,7 @@
 <translation id="7004583254764674281">Gebruik Windows Hello om kaarten sneller te bevestigen</translation>
 <translation id="7006930604109697472">Toch sturen</translation>
 <translation id="7012363358306927923">China UnionPay</translation>
+<translation id="7014741021609395734">Zoomniveau</translation>
 <translation id="7016992613359344582">Dit kunnen eenmalige of terugkerende kosten zijn die misschien niet duidelijk worden aangegeven.</translation>
 <translation id="7029809446516969842">Wachtwoorden</translation>
 <translation id="7031646650991750659">Welke Google Play-apps je hebt geïnstalleerd</translation>
@@ -1865,6 +1873,7 @@
 <translation id="8622948367223941507">Legal-Extra</translation>
 <translation id="8623885649813806493">Geen overeenkomende wachtwoorden. Alle opgeslagen wachtwoorden weergeven.</translation>
 <translation id="8625384913736129811">Deze pas opslaan op dit apparaat</translation>
+<translation id="8657078576661269990">Je beheerder heeft delen door <ph name="ORIGIN_NAME" /> met <ph name="VM_NAME_1" /> en <ph name="VM_NAME_2" /> geblokkeerd</translation>
 <translation id="8663226718884576429">Besteloverzicht, <ph name="TOTAL_LABEL" />, meer informatie</translation>
 <translation id="867224526087042813">Handtekening</translation>
 <translation id="8676424191133491403">Geen vertraging</translation>
@@ -1877,6 +1886,7 @@
 <translation id="8699041776323235191">HID-apparaat</translation>
 <translation id="8703575177326907206">Je verbinding met <ph name="DOMAIN" /> is niet gecodeerd.</translation>
 <translation id="8705331520020532516">Serienummer</translation>
+<translation id="8710842507289500830">Letterstijl</translation>
 <translation id="8718314106902482036">Betaling niet voltooid</translation>
 <translation id="8719263113926255150"><ph name="ENTITY" />, <ph name="DESCRIPTION" />, zoeksuggestie</translation>
 <translation id="8719528812645237045">Meerdere perforaties boven</translation>
@@ -1998,6 +2008,7 @@
 <translation id="9191834167571392248">Perforatie linksonder</translation>
 <translation id="9205078245616868884">Je gegevens zijn versleuteld met je wachtwoordzin voor synchronisatie. Geef deze op om de synchronisatie te starten.</translation>
 <translation id="9207861905230894330">Kan artikel niet toevoegen.</translation>
+<translation id="9213433120051936369">Weergave aanpassen</translation>
 <translation id="9215416866750762878">Een app voorkomt dat Chrome veilig verbinding kan maken met deze site</translation>
 <translation id="9219103736887031265">Afbeeldingen</translation>
 <translation id="933712198907837967">Diners Club</translation>
diff --git a/components/strings/components_strings_no.xtb b/components/strings/components_strings_no.xtb
index 4c6a983a..666c9e36 100644
--- a/components/strings/components_strings_no.xtb
+++ b/components/strings/components_strings_no.xtb
@@ -834,6 +834,7 @@
 <translation id="4277028893293644418">Tilbakestill passordet</translation>
 <translation id="4279811152705618813"><ph name="DEVICE_TYPE" /> administreres av <ph name="ENROLLMENT_DOMAIN" /></translation>
 <translation id="428639260510061158">{NUM_CARDS,plural, =1{Dette kortet er lagret i Google-kontoen din}other{Disse kortene er lagret i Google-kontoen din}}</translation>
+<translation id="4297502707443874121">Miniatyrbilde for side <ph name="THUMBNAIL_PAGE" /></translation>
 <translation id="42981349822642051">Vis</translation>
 <translation id="4300675098767811073">Flere hull høyre</translation>
 <translation id="4302965934281694568">Chou3 (konvolutt)</translation>
diff --git a/components/strings/components_strings_pl.xtb b/components/strings/components_strings_pl.xtb
index 67d13493c..03a4c27 100644
--- a/components/strings/components_strings_pl.xtb
+++ b/components/strings/components_strings_pl.xtb
@@ -825,6 +825,7 @@
 <translation id="4277028893293644418">Resetuj hasło</translation>
 <translation id="4279811152705618813">Twoim urządzeniem (<ph name="DEVICE_TYPE" />) zarządza domena <ph name="ENROLLMENT_DOMAIN" /></translation>
 <translation id="428639260510061158">{NUM_CARDS,plural, =1{Ta karta została zapisana na Twoim koncie Google}few{Te karty zostały zapisane na Twoim koncie Google}many{Te karty zostały zapisane na Twoim koncie Google}other{Te karty zostały zapisane na Twoim koncie Google}}</translation>
+<translation id="4297502707443874121">Miniatura strony <ph name="THUMBNAIL_PAGE" /></translation>
 <translation id="42981349822642051">Rozwiń</translation>
 <translation id="4300675098767811073">Wiele otworów z prawej strony</translation>
 <translation id="4302965934281694568">Chou3 (koperta)</translation>
diff --git a/components/strings/components_strings_pt-BR.xtb b/components/strings/components_strings_pt-BR.xtb
index a1802dd..fcaf579 100644
--- a/components/strings/components_strings_pt-BR.xtb
+++ b/components/strings/components_strings_pt-BR.xtb
@@ -134,6 +134,7 @@
 <translation id="1453974140256777690">O texto colado ou anexado é enviado ao Google Cloud ou a terceiros para análise. Por exemplo, ele pode ser verificado em busca de dados confidenciais.</translation>
 <translation id="1455413310270022028">Borracha</translation>
 <translation id="1462245070427461050">JIS B9</translation>
+<translation id="1462951478840426066">Usar as fontes do seu computador para criar conteúdo de alta fidelidade</translation>
 <translation id="1463543813647160932">5x7</translation>
 <translation id="1467432559032391204">À esquerda</translation>
 <translation id="1472675084647422956">Mostrar mais</translation>
@@ -220,6 +221,7 @@
 <translation id="17513872634828108">Guias abertas</translation>
 <translation id="1752021286346845558">Caixa de e-mails 8</translation>
 <translation id="1753706481035618306">Numero da página</translation>
+<translation id="1757773103848038814">Fonte monoespaçada</translation>
 <translation id="1763864636252898013">Este servidor não conseguiu provar que é <ph name="DOMAIN" />. O certificado de segurança não é confiável para o sistema operacional do seu dispositivo. Isso pode ser causado por uma configuração incorreta ou pela interceptação da sua conexão por um invasor.</translation>
 <translation id="1768211456781949159"><ph name="BEGIN_LINK" />Tente executar o Diagnóstico de Rede do Windows<ph name="END_LINK" />.</translation>
 <translation id="1772163372082567643">O servidor que você acessará, <ph name="ORIGIN" />, definiu um cabeçalho solicitando que uma política de origem seja aplicada a todas as solicitações feitas a ele. No entanto, o cabeçalho está incorreto, o que impede que o navegador faça a solicitação para <ph name="SITE" />. Políticas de origem podem ser usadas por operadores para configurar a segurança e outras propriedades de um site.</translation>
@@ -588,6 +590,7 @@
 <translation id="3395827396354264108">Método de retirada</translation>
 <translation id="3399952811970034796">Endereço de Entrega</translation>
 <translation id="3402261774528610252">A conexão para carregar este site usou o TLS 1.0 ou o TLS 1.1, que estão obsoletos e serão desativados em breve. Depois da desativação, os usuários não poderão carregar este site. É necessário ativar o TLS 1.2 ou mais recente no servidor.</translation>
+<translation id="3411120537985775570">O administrador bloqueou a opção de colar conteúdo de <ph name="ORIGIN_NAME" /> neste local</translation>
 <translation id="3414952576877147120">Tamanho:</translation>
 <translation id="3417660076059365994">Os arquivos transferidos por upload ou anexados são enviados ao Google Cloud ou a terceiros para análise. Por exemplo, eles podem ser verificados em busca de dados confidenciais ou malware.</translation>
 <translation id="3422248202833853650">Tente sair de outros programas para liberar memória.</translation>
@@ -626,6 +629,7 @@
 <translation id="3532844647053365774"><ph name="HOST" /> quer usar seu microfone</translation>
 <translation id="3533328374079021623">Caixa de e-mails 5</translation>
 <translation id="3539171420378717834">Manter uma cópia deste cartão neste dispositivo</translation>
+<translation id="3552297013052089404">Fonte Sans-Serif</translation>
 <translation id="3558573058928565255">Dia</translation>
 <translation id="3566021033012934673">Sua conexão não é particular</translation>
 <translation id="3567778190852720481">Não é possível fazer a inscrição com a conta corporativa (a conta corporativa não está qualificada).</translation>
@@ -819,6 +823,7 @@
 <translation id="4277028893293644418">Redefinir senha</translation>
 <translation id="4279811152705618813">Seu <ph name="DEVICE_TYPE" /> é gerenciado por <ph name="ENROLLMENT_DOMAIN" /></translation>
 <translation id="428639260510061158">{NUM_CARDS,plural, =1{Esse cartão foi adicionado à sua Conta do Google}one{Esse cartão foi adicionado à sua Conta do Google}other{Esses cartões foram adicionados à sua Conta do Google}}</translation>
+<translation id="4297502707443874121">Miniatura da página <ph name="THUMBNAIL_PAGE" /></translation>
 <translation id="42981349822642051">Expandir</translation>
 <translation id="4300675098767811073">Perfuração múltipla do lado direito</translation>
 <translation id="4302965934281694568">Chou3 (Envelope)</translation>
@@ -989,6 +994,7 @@
 <translation id="503069730517007720">Um certificado raiz para "<ph name="SOFTWARE_NAME" />" é necessário, mas não está instalado. O administrador de TI deve revisar as instruções de configuração do "<ph name="SOFTWARE_NAME" />" para corrigir esse problema. <ph name="FURTHER_EXPLANATION" /></translation>
 <translation id="5031870354684148875">Sobre o Google Tradutor</translation>
 <translation id="503498442187459473"><ph name="HOST" /> quer usar sua câmera e seu microfone</translation>
+<translation id="5039762155821394373">Tamanho da fonte</translation>
 <translation id="5039804452771397117">Permitir</translation>
 <translation id="5040262127954254034">Privacidade</translation>
 <translation id="5043480802608081735">Link que você copiou</translation>
@@ -1256,6 +1262,7 @@
 <translation id="6051221802930200923">Não é possível acessar <ph name="SITE" /> no momento, porque o site usa bloqueio de certificados. Como os ataques e erros de rede são geralmente temporários, esta pagina provavelmente funcionará mais tarde.</translation>
 <translation id="6052284303005792909">•</translation>
 <translation id="6053328359599022071">Compartilhar que você está interagindo?</translation>
+<translation id="6057359309778282021">O administrador bloqueou o compartilhamento de <ph name="ORIGIN_NAME" /> com <ph name="VM_NAME" /></translation>
 <translation id="6058977677006700226">Usar seus cartões em todos os dispositivos?</translation>
 <translation id="6059925163896151826">Dispositivos USB</translation>
 <translation id="6060009363608157444">Modo DnsOverHttps inválido.</translation>
@@ -1305,6 +1312,7 @@
         <ph name="END_LIST" /></translation>
 <translation id="6280223929691119688">Não é possível entregar nesse endereço. Selecione um endereço diferente.</translation>
 <translation id="6282194474023008486">CEP</translation>
+<translation id="6289939620939689042">Cor da página</translation>
 <translation id="6290238015253830360">Os artigos sugeridos aparecerão aqui</translation>
 <translation id="6293309776179964942">JIS B5</translation>
 <translation id="6302269476990306341">Parando o Google Assistente no Chrome</translation>
@@ -1462,6 +1470,7 @@
 <translation id="7004583254764674281">Use o Windows Hello para confirmar o uso de cartões mais rapidamente</translation>
 <translation id="7006930604109697472">Enviar mesmo assim</translation>
 <translation id="7012363358306927923">China UnionPay</translation>
+<translation id="7014741021609395734">Nível de zoom</translation>
 <translation id="7016992613359344582">Essas cobranças podem ser únicas ou recorrentes e talvez não sejam óbvias.</translation>
 <translation id="7029809446516969842">Senhas</translation>
 <translation id="7031646650991750659">quais apps do Google Play estão instalados.</translation>
@@ -1865,6 +1874,7 @@
 <translation id="8622948367223941507">Legal extra</translation>
 <translation id="8623885649813806493">Não achamos uma senha. Mostrar todas as senhas salvas.</translation>
 <translation id="8625384913736129811">Salvar este cartão neste dispositivo</translation>
+<translation id="8657078576661269990">O administrador bloqueou o compartilhamento de <ph name="ORIGIN_NAME" /> com <ph name="VM_NAME_1" /> e <ph name="VM_NAME_2" /></translation>
 <translation id="8663226718884576429">Resumo do pedido, <ph name="TOTAL_LABEL" />, Mais detalhes</translation>
 <translation id="867224526087042813">Assinatura</translation>
 <translation id="8676424191133491403">Sem atraso</translation>
@@ -1877,6 +1887,7 @@
 <translation id="8699041776323235191">Dispositivo HID</translation>
 <translation id="8703575177326907206">Sua conexão com <ph name="DOMAIN" /> não está criptografada.</translation>
 <translation id="8705331520020532516">Número de série</translation>
+<translation id="8710842507289500830">Estilo da fonte</translation>
 <translation id="8718314106902482036">Pagamento não concluído</translation>
 <translation id="8719263113926255150"><ph name="ENTITY" />, <ph name="DESCRIPTION" />, sugestão de pesquisa</translation>
 <translation id="8719528812645237045">Perfuração múltipla na parte superior</translation>
@@ -1999,6 +2010,7 @@
 <translation id="9191834167571392248">Perfuração na parte inferior esquerda</translation>
 <translation id="9205078245616868884">Seus dados são criptografados com sua senha longa de sincronização. Informe-a para começar a sincronização.</translation>
 <translation id="9207861905230894330">Falha ao adicionar artigo.</translation>
+<translation id="9213433120051936369">Personalizar aparência</translation>
 <translation id="9215416866750762878">Um aplicativo está impedindo que o Chrome se conecte com segurança a este site</translation>
 <translation id="9219103736887031265">Imagens</translation>
 <translation id="933712198907837967">Diners Club</translation>
diff --git a/components/strings/components_strings_pt-PT.xtb b/components/strings/components_strings_pt-PT.xtb
index 5db81f0d..073d497 100644
--- a/components/strings/components_strings_pt-PT.xtb
+++ b/components/strings/components_strings_pt-PT.xtb
@@ -834,6 +834,7 @@
 <translation id="4277028893293644418">Repor palavra-passe</translation>
 <translation id="4279811152705618813">O seu <ph name="DEVICE_TYPE" /> é gerido por <ph name="ENROLLMENT_DOMAIN" /></translation>
 <translation id="428639260510061158">{NUM_CARDS,plural, =1{Este cartão foi guardado na sua Conta Google.}other{Estes cartões foram guardados na sua Conta Google.}}</translation>
+<translation id="4297502707443874121">Miniatura da página <ph name="THUMBNAIL_PAGE" /></translation>
 <translation id="42981349822642051">Expandir</translation>
 <translation id="4300675098767811073">Perfuração múltipla à direita</translation>
 <translation id="4302965934281694568">Chou3 (Envelope)</translation>
diff --git a/components/strings/components_strings_ru.xtb b/components/strings/components_strings_ru.xtb
index 712ca63..2b962430 100644
--- a/components/strings/components_strings_ru.xtb
+++ b/components/strings/components_strings_ru.xtb
@@ -134,6 +134,7 @@
 <translation id="1453974140256777690">Введенный или прикрепленный вами текст передается на проверку в Google Cloud или сторонние сервисы. В частности, он может быть просканирован на наличие конфиденциальных данных.</translation>
 <translation id="1455413310270022028">Ластик</translation>
 <translation id="1462245070427461050">JIS B9</translation>
+<translation id="1462951478840426066">Использование шрифтов на компьютере для создания высококачественного контента.</translation>
 <translation id="1463543813647160932">5x7</translation>
 <translation id="1467432559032391204">Слева</translation>
 <translation id="1472675084647422956">Показать больше...</translation>
@@ -220,6 +221,7 @@
 <translation id="17513872634828108">Открытые вкладки</translation>
 <translation id="1752021286346845558">Почтовый ящик 8</translation>
 <translation id="1753706481035618306">Номер страницы</translation>
+<translation id="1757773103848038814">Моноширинный шрифт</translation>
 <translation id="1763864636252898013">Не удалось подтвердить, что это сервер <ph name="DOMAIN" />. Операционная система устройства не доверяет его сертификату безопасности. Возможно, сервер настроен неправильно или кто-то пытается перехватить ваши данные.</translation>
 <translation id="1768211456781949159"><ph name="BEGIN_LINK" />Выполните диагностику сети в Windows<ph name="END_LINK" />.</translation>
 <translation id="1772163372082567643">Сервер <ph name="ORIGIN" />, на который вы переходите, установил заголовок, требующий применять правило источника ко всем запросам. Однако из-за неверного формата заголовка браузер не может выполнить ваш запрос для сайта <ph name="SITE" />. Правила в отношении источников позволяют операторам настраивать параметры безопасности и другие свойства сайтов.</translation>
@@ -587,6 +589,7 @@
 <translation id="3395827396354264108">Способ выдачи</translation>
 <translation id="3399952811970034796">Адрес доставки</translation>
 <translation id="3402261774528610252">Сайт использует устаревший протокол TLS 1.0 или TLS 1.1. В будущем эти протоколы будут отключены, из-за чего пользователи не смогут зайти на сайт. На сервере нужно включить протокол TLS 1.2 или более поздней версии.</translation>
+<translation id="3411120537985775570">Вставка контента из <ph name="ORIGIN_NAME" /> в этом месте заблокирована администратором.</translation>
 <translation id="3414952576877147120">Размер:</translation>
 <translation id="3417660076059365994">Загруженные или прикрепленные вами файлы передаются на проверку в Google Cloud или сторонние сервисы. В частности, файлы могут быть просканированы на наличие конфиденциальных данных или вредоносного ПО.</translation>
 <translation id="3422248202833853650">Закройте другие программы, чтобы освободить память.</translation>
@@ -625,6 +628,7 @@
 <translation id="3532844647053365774">Сайт <ph name="HOST" /> запрашивает доступ к микрофону.</translation>
 <translation id="3533328374079021623">Почтовый ящик 5</translation>
 <translation id="3539171420378717834">Хранить данные карты на этом устройстве</translation>
+<translation id="3552297013052089404">Шрифт без засечек</translation>
 <translation id="3558573058928565255">До дня</translation>
 <translation id="3566021033012934673">Подключение не защищено</translation>
 <translation id="3567778190852720481">Корпоративные аккаунты не допускаются к регистрации.</translation>
@@ -988,6 +992,7 @@
 <translation id="503069730517007720">Необходимый корневой сертификат для программы "<ph name="SOFTWARE_NAME" />" не установлен. Чтобы устранить проблему, попросите системного администратора ознакомиться с инструкциями по настройке программы "<ph name="SOFTWARE_NAME" />". <ph name="FURTHER_EXPLANATION" /></translation>
 <translation id="5031870354684148875">О Переводчике Google</translation>
 <translation id="503498442187459473">Сайт <ph name="HOST" /> запрашивает доступ к камере и микрофону.</translation>
+<translation id="5039762155821394373">Размер шрифта</translation>
 <translation id="5039804452771397117">Разрешить</translation>
 <translation id="5040262127954254034">Конфиденциальность</translation>
 <translation id="5043480802608081735">Скопированная ссылка</translation>
@@ -1255,6 +1260,7 @@
 <translation id="6051221802930200923">Веб-сайт <ph name="SITE" /> использует механизм Certificate Pinning, поэтому на нем могла произойти подмена сертификата. Открыть сайт в настоящее время нельзя. Сбой мог быть вызван сетевой ошибкой или действиями злоумышленников. Скорее всего, сайт заработает через некоторое время.</translation>
 <translation id="6052284303005792909">•</translation>
 <translation id="6053328359599022071">Передавать информацию о вашем присутствии?</translation>
+<translation id="6057359309778282021">Возможность делиться контентом из <ph name="ORIGIN_NAME" /> с виртуальной машиной <ph name="VM_NAME" /> заблокирована администратором.</translation>
 <translation id="6058977677006700226">Хотите использовать карты на всех устройствах?</translation>
 <translation id="6059925163896151826">USB-устройства</translation>
 <translation id="6060009363608157444">Недопустимый режим DnsOverHttps.</translation>
@@ -1304,6 +1310,7 @@
         <ph name="END_LIST" /></translation>
 <translation id="6280223929691119688">Невозможно доставить заказ по этому адресу. Выберите другой вариант.</translation>
 <translation id="6282194474023008486">Почтовый индекс</translation>
+<translation id="6289939620939689042">Цвет страницы</translation>
 <translation id="6290238015253830360">Здесь появятся рекомендуемые статьи.</translation>
 <translation id="6293309776179964942">JIS B5</translation>
 <translation id="6302269476990306341">Google Ассистент в Chrome отключится</translation>
@@ -1461,6 +1468,7 @@
 <translation id="7004583254764674281">Использовать Windows Hello для быстрого подтверждения карт</translation>
 <translation id="7006930604109697472">Все равно отправить</translation>
 <translation id="7012363358306927923">China UnionPay</translation>
+<translation id="7014741021609395734">Масштаб</translation>
 <translation id="7016992613359344582">Списание может быть разовым или повторяющимся без каких-либо уведомлений.</translation>
 <translation id="7029809446516969842">Пароли</translation>
 <translation id="7031646650991750659">Приложения, установленные из Google Play.</translation>
@@ -1863,6 +1871,7 @@
 <translation id="8622948367223941507">Legal-Extra</translation>
 <translation id="8623885649813806493">Нет подходящих паролей. Показать все сохраненные пароли.</translation>
 <translation id="8625384913736129811">Сохранить карту на этом устройстве</translation>
+<translation id="8657078576661269990">Возможность делиться контентом из <ph name="ORIGIN_NAME" /> с виртуальными машинами <ph name="VM_NAME_1" /> и <ph name="VM_NAME_2" /> заблокирована администратором.</translation>
 <translation id="8663226718884576429">Информация о заказе, <ph name="TOTAL_LABEL" />, дополнительные сведения</translation>
 <translation id="867224526087042813">Подпись</translation>
 <translation id="8676424191133491403">Без задержки</translation>
@@ -1875,6 +1884,7 @@
 <translation id="8699041776323235191">HID-устройство</translation>
 <translation id="8703575177326907206">Соединение с <ph name="DOMAIN" /> не зашифровано.</translation>
 <translation id="8705331520020532516">Серийный номер</translation>
+<translation id="8710842507289500830">Стиль шрифта</translation>
 <translation id="8718314106902482036">Не удалось обработать платеж</translation>
 <translation id="8719263113926255150"><ph name="ENTITY" />, <ph name="DESCRIPTION" />, подсказка</translation>
 <translation id="8719528812645237045">Несколько отверстий сверху</translation>
@@ -1996,6 +2006,7 @@
 <translation id="9191834167571392248">Отверстие в левом нижнем углу</translation>
 <translation id="9205078245616868884">Данные зашифрованы с помощью кодовой фразы. Введите ее, чтобы начать синхронизацию.</translation>
 <translation id="9207861905230894330">Не удалось добавить статью</translation>
+<translation id="9213433120051936369">Настроить вид</translation>
 <translation id="9215416866750762878">Приложение не позволяет Chrome безопасно подключиться к этому сайту</translation>
 <translation id="9219103736887031265">Картинки</translation>
 <translation id="933712198907837967">Diners Club</translation>
diff --git a/components/strings/components_strings_sl.xtb b/components/strings/components_strings_sl.xtb
index e410d38..e419efc 100644
--- a/components/strings/components_strings_sl.xtb
+++ b/components/strings/components_strings_sl.xtb
@@ -834,6 +834,7 @@
 <translation id="4277028893293644418">Ponastavi geslo</translation>
 <translation id="4279811152705618813">Vašo napravo <ph name="DEVICE_TYPE" /> upravlja domena <ph name="ENROLLMENT_DOMAIN" /></translation>
 <translation id="428639260510061158">{NUM_CARDS,plural, =1{Ta kartica je shranjena v Google Računu}one{Te kartice so shranjene v Google Računu}two{Te kartice so shranjene v Google Računu}few{Te kartice so shranjene v Google Računu}other{Te kartice so shranjene v Google Računu}}</translation>
+<translation id="4297502707443874121">Sličica za stran <ph name="THUMBNAIL_PAGE" /></translation>
 <translation id="42981349822642051">Razširi</translation>
 <translation id="4300675098767811073">Večkratno luknjanje na desni</translation>
 <translation id="4302965934281694568">Chou3 (Envelope)</translation>
diff --git a/components/strings/components_strings_sr-Latn.xtb b/components/strings/components_strings_sr-Latn.xtb
index 71c0610..4acb3c51 100644
--- a/components/strings/components_strings_sr-Latn.xtb
+++ b/components/strings/components_strings_sr-Latn.xtb
@@ -834,6 +834,7 @@
 <translation id="4277028893293644418">Resetujte lozinku</translation>
 <translation id="4279811152705618813"><ph name="DEVICE_TYPE" />-om upravlja <ph name="ENROLLMENT_DOMAIN" /></translation>
 <translation id="428639260510061158">{NUM_CARDS,plural, =1{Ova kartica je sačuvana na Google nalogu}one{Ove kartice su sačuvane na Google nalogu}few{Ove kartice su sačuvane na Google nalogu}other{Ove kartice su sačuvane na Google nalogu}}</translation>
+<translation id="4297502707443874121">Sličica za <ph name="THUMBNAIL_PAGE" />. stranicu</translation>
 <translation id="42981349822642051">Proširite</translation>
 <translation id="4300675098767811073">Višestruko bušenje na desnoj strani</translation>
 <translation id="4302965934281694568">Chou3 (koverat)</translation>
diff --git a/components/strings/components_strings_sr.xtb b/components/strings/components_strings_sr.xtb
index 6034b1d..385ec75 100644
--- a/components/strings/components_strings_sr.xtb
+++ b/components/strings/components_strings_sr.xtb
@@ -834,6 +834,7 @@
 <translation id="4277028893293644418">Ресетујте лозинку</translation>
 <translation id="4279811152705618813"><ph name="DEVICE_TYPE" />-ом управља <ph name="ENROLLMENT_DOMAIN" /></translation>
 <translation id="428639260510061158">{NUM_CARDS,plural, =1{Ова картица је сачувана на Google налогу}one{Ове картице су сачуване на Google налогу}few{Ове картице су сачуване на Google налогу}other{Ове картице су сачуване на Google налогу}}</translation>
+<translation id="4297502707443874121">Сличица за <ph name="THUMBNAIL_PAGE" />. страницу</translation>
 <translation id="42981349822642051">Проширите</translation>
 <translation id="4300675098767811073">Вишеструко бушење на десној страни</translation>
 <translation id="4302965934281694568">Chou3 (коверат)</translation>
diff --git a/components/strings/components_strings_sv.xtb b/components/strings/components_strings_sv.xtb
index a010487..be0ffc8a 100644
--- a/components/strings/components_strings_sv.xtb
+++ b/components/strings/components_strings_sv.xtb
@@ -834,6 +834,7 @@
 <translation id="4277028893293644418">Återställ lösenord</translation>
 <translation id="4279811152705618813">Din <ph name="DEVICE_TYPE" /> hanteras av <ph name="ENROLLMENT_DOMAIN" /></translation>
 <translation id="428639260510061158">{NUM_CARDS,plural, =1{Det här kortet har sparats i ditt Google-konto}other{De här korten har sparats i ditt Google-konto}}</translation>
+<translation id="4297502707443874121">Miniatyr för sidan <ph name="THUMBNAIL_PAGE" /></translation>
 <translation id="42981349822642051">Expandera</translation>
 <translation id="4300675098767811073">Flera hål till höger</translation>
 <translation id="4302965934281694568">Chou3 (kuvert)</translation>
diff --git a/components/strings/components_strings_te.xtb b/components/strings/components_strings_te.xtb
index f5e6e3d73..de41127 100644
--- a/components/strings/components_strings_te.xtb
+++ b/components/strings/components_strings_te.xtb
@@ -834,6 +834,7 @@
 <translation id="4277028893293644418">పాస్‌వర్డ్‌ను రీసెట్ చేయి</translation>
 <translation id="4279811152705618813">మీ <ph name="DEVICE_TYPE" /> పరికరం <ph name="ENROLLMENT_DOMAIN" /> నిర్వహణలో ఉంది</translation>
 <translation id="428639260510061158">{NUM_CARDS,plural, =1{ఈ కార్డ్ మీ Google ఖాతాలో సేవ్ చేయబడింది}other{ఈ కార్డ్‌లు మీ Google ఖాతాలో సేవ్ చేయబడ్డాయి}}</translation>
+<translation id="4297502707443874121"><ph name="THUMBNAIL_PAGE" /> పేజీ కోసం థంబ్‌నెయిల్</translation>
 <translation id="42981349822642051">విస్తరించు</translation>
 <translation id="4300675098767811073">కుడివైపు అనేక రంధ్రాలు</translation>
 <translation id="4302965934281694568">Chou3 (ఎన్వలప్)</translation>
diff --git a/components/strings/components_strings_th.xtb b/components/strings/components_strings_th.xtb
index 04cd196..0270c5eb 100644
--- a/components/strings/components_strings_th.xtb
+++ b/components/strings/components_strings_th.xtb
@@ -134,6 +134,7 @@
 <translation id="1453974140256777690">ข้อความที่คุณวางหรือแนบจะส่งไปยัง Google Cloud หรือบุคคลที่สามเพื่อทำการวิเคราะห์ เช่น สแกนหาข้อมูลที่ละเอียดอ่อน</translation>
 <translation id="1455413310270022028">ยางลบ</translation>
 <translation id="1462245070427461050">JIS B9</translation>
+<translation id="1462951478840426066">ใช้แบบอักษรที่มีอยู่ในคอมพิวเตอร์เพื่อให้สร้างเนื้อหาความแม่นยำสูงได้</translation>
 <translation id="1463543813647160932">5x7</translation>
 <translation id="1467432559032391204">ซ้าย</translation>
 <translation id="1472675084647422956">แสดงเพิ่มเติม</translation>
@@ -220,6 +221,7 @@
 <translation id="17513872634828108">แท็บที่เปิดอยู่</translation>
 <translation id="1752021286346845558">กล่องจดหมาย 8</translation>
 <translation id="1753706481035618306">เลขหน้า</translation>
+<translation id="1757773103848038814">แบบอักษรที่มีความกว้างคงที่</translation>
 <translation id="1763864636252898013">เซิร์ฟเวอร์นี้ไม่สามารถพิสูจน์ได้ว่าเป็น <ph name="DOMAIN" /> เพราะระบบปฏิบัติการของอุปกรณ์ของคุณไม่เชื่อถือใบรับรองความปลอดภัย โดยอาจเกิดจากการกำหนดค่าผิดหรือผู้บุกรุกที่ขัดขวางการเชื่อมต่อของคุณ</translation>
 <translation id="1768211456781949159"><ph name="BEGIN_LINK" />ลองเรียกใช้การวินิจฉัยเครือข่ายของ Windows<ph name="END_LINK" /></translation>
 <translation id="1772163372082567643">เซิร์ฟเวอร์ที่คุณกำลังจะเข้าถึง <ph name="ORIGIN" /> ได้ตั้งค่าส่วนหัวที่กำหนดให้บังคับใช้นโยบายดั้งเดิมกับคำขอทั้งหมดที่ส่งถึงเซิร์ฟเวอร์ แต่ส่วนหัวดังกล่าวมีรูปแบบที่ไม่ถูกต้อง ซึ่งทำให้เบราว์เซอร์ดำเนินการตามคำขอของคุณสำหรับ <ph name="SITE" /> ไม่ได้ ผู้ให้บริการเว็บไซต์อาจใช้นโยบายดั้งเดิมในการกำหนดค่าความปลอดภัยและพร็อพเพอร์ตี้อื่นๆ ของเว็บไซต์</translation>
@@ -588,6 +590,7 @@
 <translation id="3395827396354264108">วิธีการรับสินค้า</translation>
 <translation id="3399952811970034796">ที่อยู่สำหรับจัดส่ง</translation>
 <translation id="3402261774528610252">การเชื่อมต่อที่ใช้โหลดเว็บไซต์นี้ใช้ TLS 1.0 หรือ TLS 1.1 ซึ่งเลิกใช้งานแล้วและจะถูกปิดใช้ในอนาคต เมื่อปิดใช้แล้ว ระบบจะไม่ให้ผู้ใช้โหลดเว็บไซต์นี้ เซิร์ฟเวอร์ควรเปิดใช้ TLS 1.2 ขึ้นไป</translation>
+<translation id="3411120537985775570">ผู้ดูแลระบบบล็อกการวางจาก <ph name="ORIGIN_NAME" /> ลงในตำแหน่งนี้ไว้</translation>
 <translation id="3414952576877147120">ขนาด:</translation>
 <translation id="3417660076059365994">ไฟล์ที่คุณอัปโหลดหรือแนบจะส่งไปยัง Google Cloud หรือบุคคลที่สามเพื่อทำการวิเคราะห์ เช่น สแกนหาข้อมูลที่ละเอียดอ่อนหรือมัลแวร์</translation>
 <translation id="3422248202833853650">ลองออกจากโปรแกรมอื่นๆ เพื่อเพิ่มหน่วยความจำ</translation>
@@ -625,6 +628,7 @@
 <translation id="3532844647053365774"><ph name="HOST" /> ต้องการใช้ไมโครโฟนของคุณ</translation>
 <translation id="3533328374079021623">กล่องจดหมาย 5</translation>
 <translation id="3539171420378717834">เก็บสำเนาบัตรนี้ไว้บนอุปกรณ์นี้</translation>
+<translation id="3552297013052089404">แบบอักษร Sans Serif</translation>
 <translation id="3558573058928565255">ตอนกลางวัน</translation>
 <translation id="3566021033012934673">การเชื่อมต่อของคุณไม่เป็นส่วนตัว</translation>
 <translation id="3567778190852720481">ลงทะเบียนด้วยบัญชีองค์กรไม่ได้ (บัญชีองค์กรไม่มีสิทธิ์)</translation>
@@ -818,6 +822,7 @@
 <translation id="4277028893293644418">รีเซ็ตรหัสผ่าน</translation>
 <translation id="4279811152705618813"><ph name="DEVICE_TYPE" /> ของคุณจัดการโดย <ph name="ENROLLMENT_DOMAIN" /></translation>
 <translation id="428639260510061158">{NUM_CARDS,plural, =1{บันทึกบัตรนี้ลงในบัญชี Google ของคุณแล้ว}other{บันทึกบัตรเหล่านี้ลงในบัญชี Google ของคุณแล้ว}}</translation>
+<translation id="4297502707443874121">ภาพขนาดย่อของหน้า <ph name="THUMBNAIL_PAGE" /></translation>
 <translation id="42981349822642051">ขยาย</translation>
 <translation id="4300675098767811073">เจาะรูด้านขวาหลายรู</translation>
 <translation id="4302965934281694568">Chou3 (ซองจดหมาย)</translation>
@@ -988,6 +993,7 @@
 <translation id="503069730517007720">ไม่ได้ติดตั้งใบรับรองรากที่จำเป็นของ "<ph name="SOFTWARE_NAME" />" ผู้ดูแลระบบ IT ควรดูวิธีการกำหนดค่าของ "<ph name="SOFTWARE_NAME" />" เพื่อแก้ไขปัญหานี้ <ph name="FURTHER_EXPLANATION" /></translation>
 <translation id="5031870354684148875">เกี่ยวกับ Google แปลภาษา</translation>
 <translation id="503498442187459473"><ph name="HOST" /> ต้องการใช้กล้องถ่ายรูปและไมโครโฟนของคุณ</translation>
+<translation id="5039762155821394373">ขนาดแบบอักษร</translation>
 <translation id="5039804452771397117">อนุญาต</translation>
 <translation id="5040262127954254034">ความเป็นส่วนตัว</translation>
 <translation id="5043480802608081735">ลิงก์ที่คุณคัดลอก</translation>
@@ -1255,6 +1261,7 @@
 <translation id="6051221802930200923">คุณไม่สามารถไปที่ <ph name="SITE" /> ได้ในขณะนี้เนื่องจากเว็บไซต์ใช้การตรึงใบรับรอง โดยปกติข้อผิดพลาดของเครือข่ายและการโจมตีจะเกิดขึ้นเพียงชั่วคราว หน้านี้จึงอาจใช้งานได้ในภายหลัง</translation>
 <translation id="6052284303005792909">•</translation>
 <translation id="6053328359599022071">แชร์การเคลื่อนไหวของคุณไหม</translation>
+<translation id="6057359309778282021">ผู้ดูแลระบบบล็อกการแชร์จาก <ph name="ORIGIN_NAME" /> ไปยัง <ph name="VM_NAME" /></translation>
 <translation id="6058977677006700226">ต้องการใช้บัตรในอุปกรณ์ทุกเครื่องไหม</translation>
 <translation id="6059925163896151826">อุปกรณ์ USB</translation>
 <translation id="6060009363608157444">โหมด DnsOverHttps ไม่ถูกต้อง</translation>
@@ -1304,6 +1311,7 @@
         <ph name="END_LIST" /></translation>
 <translation id="6280223929691119688">ไม่สามารถนำส่งสินค้าไปยังที่อยู่นี้ โปรดเลือกที่อยู่อื่น</translation>
 <translation id="6282194474023008486">รหัสไปรษณีย์</translation>
+<translation id="6289939620939689042">สีของหน้าเว็บ</translation>
 <translation id="6290238015253830360">บทความที่แนะนำจะปรากฏที่นี่</translation>
 <translation id="6293309776179964942">JIS B5</translation>
 <translation id="6302269476990306341">Google Assistant ใน Chrome หยุดทำงาน</translation>
@@ -1461,6 +1469,7 @@
 <translation id="7004583254764674281">ใช้ Windows Hello เพื่อยืนยันบัตรได้เร็วขึ้น</translation>
 <translation id="7006930604109697472">ส่งเลย</translation>
 <translation id="7012363358306927923">China UnionPay</translation>
+<translation id="7014741021609395734">ระดับการซูม</translation>
 <translation id="7016992613359344582">การเรียกเก็บเงินเหล่านี้อาจเกิดขึ้นครั้งเดียวหรือเป็นเกิดขึ้นซ้ำๆ และอาจไม่แสดงอย่างชัดแจ้ง</translation>
 <translation id="7029809446516969842">รหัสผ่าน</translation>
 <translation id="7031646650991750659">แอปจาก Google Play ที่คุณติดตั้ง</translation>
@@ -1864,6 +1873,7 @@
 <translation id="8622948367223941507">Legal-Extra</translation>
 <translation id="8623885649813806493">ไม่มีรหัสผ่านที่ตรงกัน แสดงรหัสผ่านที่บันทึกไว้ทั้งหมด</translation>
 <translation id="8625384913736129811">บันทึกบัตรนี้ลงในอุปกรณ์นี้</translation>
+<translation id="8657078576661269990">ผู้ดูแลระบบบล็อกการแชร์จาก <ph name="ORIGIN_NAME" /> ไปยัง <ph name="VM_NAME_1" /> และ <ph name="VM_NAME_2" /></translation>
 <translation id="8663226718884576429">สรุปคำสั่งซื้อ <ph name="TOTAL_LABEL" /> รายละเอียดเพิ่มเติม</translation>
 <translation id="867224526087042813">ลายเซ็น</translation>
 <translation id="8676424191133491403">ไม่หน่วงเวลา</translation>
@@ -1876,6 +1886,7 @@
 <translation id="8699041776323235191">อุปกรณ์ HID</translation>
 <translation id="8703575177326907206">การเชื่อมต่อของคุณไปยัง <ph name="DOMAIN" /> ไม่ได้รับการเข้ารหัส</translation>
 <translation id="8705331520020532516">หมายเลขซีเรียล</translation>
+<translation id="8710842507289500830">รูปแบบตัวอักษร</translation>
 <translation id="8718314106902482036">การชำระเงินไม่เสร็จสมบูรณ์</translation>
 <translation id="8719263113926255150"><ph name="ENTITY" />, <ph name="DESCRIPTION" />, คำแนะนำการค้นหา</translation>
 <translation id="8719528812645237045">เจาะรูด้านบนหลายรู</translation>
@@ -1997,6 +2008,7 @@
 <translation id="9191834167571392248">เจาะรูด้านซ้ายล่าง</translation>
 <translation id="9205078245616868884">ข้อมูลของคุณมีการเข้ารหัสด้วยรหัสผ่านการซิงค์ โปรดป้อนรหัสผ่านเพื่อเริ่มซิงค์</translation>
 <translation id="9207861905230894330">การเพิ่มบทความล้มเหลว</translation>
+<translation id="9213433120051936369">กำหนดลักษณะที่ปรากฏ</translation>
 <translation id="9215416866750762878">มีแอปพลิเคชันที่ห้ามไม่ให้ Chrome เชื่อมต่อกับไซต์นี้อย่างปลอดภัย</translation>
 <translation id="9219103736887031265">ภาพ</translation>
 <translation id="933712198907837967">Diners Club</translation>
diff --git a/components/strings/components_strings_ur.xtb b/components/strings/components_strings_ur.xtb
index 7eda2d2..327b361 100644
--- a/components/strings/components_strings_ur.xtb
+++ b/components/strings/components_strings_ur.xtb
@@ -134,6 +134,7 @@
 <translation id="1453974140256777690">‏جو ٹیکسٹ آپ پیسٹ یا منسلک کرتے ہیں اسے تجزیہ کیلئے Google کلاؤڈ یا فریق ثالث کو بھیجا جاتا ہے۔ مثال کے طور پر، اسے حساس ڈیٹا کیلئے اسکین کیا جا سکتا ہے۔</translation>
 <translation id="1455413310270022028">صافی</translation>
 <translation id="1462245070427461050">JIS B9</translation>
+<translation id="1462951478840426066">اپنے کمپیوٹر پر فونٹس کا استعمال کریں تاکہ آپ ہائی فیڈیلٹی مواد تخلیق کر سکیں</translation>
 <translation id="1463543813647160932">5x7</translation>
 <translation id="1467432559032391204">بائیں</translation>
 <translation id="1472675084647422956">مزید دکھائیں</translation>
@@ -221,6 +222,7 @@
 <translation id="17513872634828108">کھلے ٹیبز</translation>
 <translation id="1752021286346845558">میل باکس 8</translation>
 <translation id="1753706481035618306">صفحہ نمبر</translation>
+<translation id="1757773103848038814">مونو اسپیس فونٹ</translation>
 <translation id="1763864636252898013">یہ سرور یہ ثابت نہیں کر سکا کہ یہ <ph name="DOMAIN" /> ہے؛ اس کا سیکیورٹی سرٹیفیکیٹ آپ کے آلہ کے آپریٹنگ سسٹم کے ذریعے بھروسہ مند نہیں ہے۔ یہ غلط کنفیگریشن یا آپ کے کنکشن میں مانع بن رہے کسی حملہ آور کی وجہ سے ہو سکتا ہے۔</translation>
 <translation id="1768211456781949159">‏<ph name="BEGIN_LINK" />Windows نیٹ ورک کی تشخیصات چلانے کی کوشش کریں<ph name="END_LINK" />۔</translation>
 <translation id="1772163372082567643">آپ جس سرور پر جا رہے ہیں، <ph name="ORIGIN" />، نے ہیڈر سیٹ کیا ہے
@@ -597,6 +599,7 @@
 <translation id="3395827396354264108">پِک اپ کا طریقہ</translation>
 <translation id="3399952811970034796">ڈیلیوری کا پتہ</translation>
 <translation id="3402261774528610252">‏اس سائٹ کو لوڈ کرنے کے لئے استعمال ہونے والے کنکشن میں TLS 1.0 یا TLS 1.1 استعمال کیا گیا تھا، جو فرسودہ ہیں اور مستقبل میں بھی غیر فعال کر دیے جائیں گے۔ ایک بار غیر فعال ہوجانے پر، صارفین کو اس سائٹ کو لوڈ کرنے سے روکا جائے گا۔ سرور کو TLS 1.2 یا اس سے اعلی ورژن کو فعال کرنا چاہیے۔</translation>
+<translation id="3411120537985775570">آپ کے منتظم کے ذریعے <ph name="ORIGIN_NAME" /> سے اس مقام پر پیسٹ کرنا مسدود کر دیا گیا ہے</translation>
 <translation id="3414952576877147120">سائز:</translation>
 <translation id="3417660076059365994">‏جن فائلز کو آپ اپ لوڈ یا منسلک کرتے ہیں وہ Google کلاؤڈ یا تیسرے فریق کو تجزیہ کیلئے بھیجی جاتی ہیں۔ مثال کے طور پر، انہیں حساس ڈیٹا یا میلوئیر کیلئے اسکین کیا جا سکتا ہے۔</translation>
 <translation id="3422248202833853650">میموری خالی کرنے کیلئے دیگر پروگرامز سے باہر نکلنے کی کوشش کریں۔</translation>
@@ -635,6 +638,7 @@
 <translation id="3532844647053365774"><ph name="HOST" /> آپ کا مائیکروفون استعمال کرنا چاہتا ہے</translation>
 <translation id="3533328374079021623">میل باکس 5</translation>
 <translation id="3539171420378717834">اس کارڈ کی ایک کاپی اس آلہ پر رکھیں</translation>
+<translation id="3552297013052089404">‏Sans Serif فونٹ</translation>
 <translation id="3558573058928565255">دن کا وقت</translation>
 <translation id="3566021033012934673">آپ کا کنکشن نجی نہیں ہے</translation>
 <translation id="3567778190852720481">انٹرپرائز اکاؤنٹ کے ساتھ اندراج نہیں ہوسکتا (انٹرپرائز اکاؤنٹ اہل نہیں ہے)۔</translation>
@@ -1003,6 +1007,7 @@
 <translation id="503069730517007720">‏"<ph name="SOFTWARE_NAME" />" کے لیے ایک روٹ سرٹیفکیٹ درکار ہے لیکن انسٹال نہیں ہے۔ آپ کے IT منتظم کو یہ مسئلہ حل کرنے کے لیے "<ph name="SOFTWARE_NAME" />" کی کنفیگریشن ہدایات کو دیکھنا چاہئے۔ <ph name="FURTHER_EXPLANATION" /></translation>
 <translation id="5031870354684148875">‏Google Translate کے بارے میں</translation>
 <translation id="503498442187459473"><ph name="HOST" /> آپ کا کیمرا اور مائیکروفون استعمال کرنا چاہتا ہے</translation>
+<translation id="5039762155821394373">فونٹ سائز</translation>
 <translation id="5039804452771397117">اجازت دیں</translation>
 <translation id="5040262127954254034">رازداری</translation>
 <translation id="5043480802608081735">آپ کا کاپی کردہ لنک</translation>
@@ -1270,6 +1275,7 @@
 <translation id="6051221802930200923">آپ ابھی <ph name="SITE" /> ملاحظہ نہیں کر سکتے ہیں کیونکہ ویب سائٹ سرٹیفکیٹ پننگ کا استعمال کرتی ہے۔ نیٹ ورک کی خرابیاں اور حملے عام طور پر عارضی ہوتے ہیں، لہذا یہ صفحہ شاید بعد میں کام کرے گا۔</translation>
 <translation id="6052284303005792909">•</translation>
 <translation id="6053328359599022071">آپ کی موجودگی کا اشتراک کریں؟</translation>
+<translation id="6057359309778282021">آپ کے منتظم نے <ph name="ORIGIN_NAME" /> سے <ph name="VM_NAME" /> میں اشتراک کرنا مسدود کر دیا ہے</translation>
 <translation id="6058977677006700226">اپنے تمام آلات پر اپنے کارڈز استعمال کریں؟</translation>
 <translation id="6059925163896151826">‏USB آلات</translation>
 <translation id="6060009363608157444">‏DnsOverHttps وضع غلط ہے۔</translation>
@@ -1320,6 +1326,7 @@
         <ph name="END_LIST" /></translation>
 <translation id="6280223929691119688">اس پتے پر ڈیلیوری نہیں ہو سکتی۔ کوئی مختلف پتہ منتخب کریں۔</translation>
 <translation id="6282194474023008486">پوسٹل کوڈ</translation>
+<translation id="6289939620939689042">صفحے کا رنگ</translation>
 <translation id="6290238015253830360">آپ کے تجویز کردہ مضامین یہاں ظاہر ہوتے ہیں</translation>
 <translation id="6293309776179964942">JIS B5</translation>
 <translation id="6302269476990306341">‏Chrome میں Google اسسٹنٹ موقوف کی جا ر ہی ہے</translation>
@@ -1404,6 +1411,7 @@
 <translation id="6645291930348198241">کوکیز اور سائٹ کے ڈیٹا تک رسائی حاصل کریں۔</translation>
 <translation id="6646269444027925224">{COUNT,plural, =0{کوئی سائٹ نہیں}=1{‏1 سائٹ سے (آپ اپنے Google اکاؤنٹ سے سائن آؤٹ نہیں ہوں گے)}other{‏# سائٹس سے (آپ اپنے Google اکاؤنٹ سے سائن آؤٹ نہیں ہوں گے)}}</translation>
 <translation id="6648459603387803038">‏آپ کا منتظم دور سے آپ کے براؤزر کا سیٹ اپ تبدیل کر سکتا ہے۔ اس آلے پر ہونے والی سرگرمی کا نظم Chrome سے باہر بھی کیا جا سکتا ہے۔</translation>
+<translation id="6648524591329069940">‏Serif فونٹ</translation>
 <translation id="6652101503459149953">‏Windows Hello کا استعمال کریں</translation>
 <translation id="6657585470893396449">پاس ورڈ</translation>
 <translation id="666259744093848177">‏(x86_64 ترجمہ کردہ)</translation>
@@ -1476,6 +1484,7 @@
 <translation id="7004583254764674281">‏تیزی سے کاڈرز کی تصدیق کرنے کیلئے Windows Hello کا استعمال کریں</translation>
 <translation id="7006930604109697472">بہر صورت بھیجیں</translation>
 <translation id="7012363358306927923">China UnionPay</translation>
+<translation id="7014741021609395734">زوم کی سطح</translation>
 <translation id="7016992613359344582">یہ چارجز ایک بار یا بار بار عائد ہوسکتے ہیں اور ہو سکتا ہے کہ واضح نہ ہوں۔</translation>
 <translation id="7029809446516969842">پاس ورڈز</translation>
 <translation id="7031646650991750659">‏آپ نے کن Google Play ایپس کو انسٹال کیا ہے</translation>
@@ -1878,6 +1887,7 @@
 <translation id="8622948367223941507">Legal-Extra</translation>
 <translation id="8623885649813806493">کوئی مماثل پاس ورڈ نہیں۔ سبھی محفوظ پاس ورڈز دکھائيں</translation>
 <translation id="8625384913736129811">اس کارڈ کو اس آلہ میں محفوظ کریں</translation>
+<translation id="8657078576661269990">آپ کے منتظم نے <ph name="ORIGIN_NAME" /> سے <ph name="VM_NAME_1" /> اور <ph name="VM_NAME_2" /> میں اشتراک کرنا مسدود کر دیا ہے</translation>
 <translation id="8663226718884576429">آرڈر کا خلاصہ، <ph name="TOTAL_LABEL" />، مزید تفصیلات</translation>
 <translation id="867224526087042813">دستخط</translation>
 <translation id="8676424191133491403">کوئی تاخیر نہیں</translation>
@@ -1890,6 +1900,7 @@
 <translation id="8699041776323235191">‏HID آلہ</translation>
 <translation id="8703575177326907206"><ph name="DOMAIN" /> سے آپ کا کنکشن مرموز نہیں کیا گیا ہے۔</translation>
 <translation id="8705331520020532516">نمبر شمار</translation>
+<translation id="8710842507289500830">فونٹ کا طرز</translation>
 <translation id="8718314106902482036">ادائيگی مکمل نہیں ہوئی</translation>
 <translation id="8719263113926255150"><ph name="ENTITY" />، <ph name="DESCRIPTION" />، تلاش کی تجویز</translation>
 <translation id="8719528812645237045">اوپر متعدد سوراخ</translation>
@@ -2012,6 +2023,7 @@
 <translation id="9191834167571392248">نیچے بائیں طرف سوراخ</translation>
 <translation id="9205078245616868884">آپ کے ڈیٹا کی آپ کے مطابقت پذیر پاس فریز کے ساتھ مرموز کاری کی گئی ہے۔ مطابقت پذیری شروع کرنے کیلئے اسے درج کریں۔</translation>
 <translation id="9207861905230894330">مضمون شامل کرنے میں ناکام ہوگیا۔</translation>
+<translation id="9213433120051936369">ہیئت حسب ضرورت بنائیں</translation>
 <translation id="9215416866750762878">‏ایک ایپلیکیشن Chrome کو محفوظ طور پر سائٹ سے منسلک ہونے سے روک رہی ہے</translation>
 <translation id="9219103736887031265">تصاویر</translation>
 <translation id="933712198907837967">Diners Club</translation>
diff --git a/components/sync_bookmarks/bookmark_model_type_processor.cc b/components/sync_bookmarks/bookmark_model_type_processor.cc
index 777be7d..fd9a7ee4 100644
--- a/components/sync_bookmarks/bookmark_model_type_processor.cc
+++ b/components/sync_bookmarks/bookmark_model_type_processor.cc
@@ -39,47 +39,6 @@
 
 namespace {
 
-// Metrics: "Sync.MissingBookmarkPermanentNodes"
-// These values are persisted to logs. Entries should not be renumbered and
-// numeric values should never be reused.
-enum class MissingPermanentNodes {
-  kBookmarkBar = 0,
-  kOtherBookmarks = 1,
-  kMobileBookmarks = 2,
-  kBookmarkBarAndOtherBookmarks = 3,
-  kBookmarkBarAndMobileBookmarks = 4,
-  kOtherBookmarksAndMobileBookmarks = 5,
-  kBookmarkBarAndOtherBookmarksAndMobileBookmarks = 6,
-
-  kMaxValue = kBookmarkBarAndOtherBookmarksAndMobileBookmarks,
-};
-
-void LogMissingPermanentNodes(
-    const SyncedBookmarkTracker::Entity* bookmark_bar,
-    const SyncedBookmarkTracker::Entity* other_bookmarks,
-    const SyncedBookmarkTracker::Entity* mobile_bookmarks) {
-  MissingPermanentNodes missing_nodes;
-  if (!bookmark_bar && other_bookmarks && mobile_bookmarks) {
-    missing_nodes = MissingPermanentNodes::kBookmarkBar;
-  } else if (bookmark_bar && !other_bookmarks && mobile_bookmarks) {
-    missing_nodes = MissingPermanentNodes::kOtherBookmarks;
-  } else if (bookmark_bar && other_bookmarks && !mobile_bookmarks) {
-    missing_nodes = MissingPermanentNodes::kMobileBookmarks;
-  } else if (!bookmark_bar && !other_bookmarks && mobile_bookmarks) {
-    missing_nodes = MissingPermanentNodes::kBookmarkBarAndOtherBookmarks;
-  } else if (!bookmark_bar && other_bookmarks && !mobile_bookmarks) {
-    missing_nodes = MissingPermanentNodes::kBookmarkBarAndMobileBookmarks;
-  } else if (bookmark_bar && !other_bookmarks && !mobile_bookmarks) {
-    missing_nodes = MissingPermanentNodes::kOtherBookmarksAndMobileBookmarks;
-  } else {
-    // All must be missing.
-    missing_nodes =
-        MissingPermanentNodes::kBookmarkBarAndOtherBookmarksAndMobileBookmarks;
-  }
-  UMA_HISTOGRAM_ENUMERATION("Sync.MissingBookmarkPermanentNodes",
-                            missing_nodes);
-}
-
 class ScopedRemoteUpdateBookmarks {
  public:
   // |bookmark_model|, |bookmark_undo_service| and |observer| must not be null
@@ -476,12 +435,6 @@
           bookmark_model_->other_node()) ||
       !bookmark_tracker_->GetEntityForBookmarkNode(
           bookmark_model_->mobile_node())) {
-    LogMissingPermanentNodes(bookmark_tracker_->GetEntityForBookmarkNode(
-                                 bookmark_model_->bookmark_bar_node()),
-                             bookmark_tracker_->GetEntityForBookmarkNode(
-                                 bookmark_model_->other_node()),
-                             bookmark_tracker_->GetEntityForBookmarkNode(
-                                 bookmark_model_->mobile_node()));
     StopTrackingMetadata();
     bookmark_tracker_.reset();
     error_handler_.Run(
diff --git a/components/variations/android/java/src/org/chromium/components/variations/firstrun/VariationsSeedBridge.java b/components/variations/android/java/src/org/chromium/components/variations/firstrun/VariationsSeedBridge.java
index 7853429d..3be8e26 100644
--- a/components/variations/android/java/src/org/chromium/components/variations/firstrun/VariationsSeedBridge.java
+++ b/components/variations/android/java/src/org/chromium/components/variations/firstrun/VariationsSeedBridge.java
@@ -94,6 +94,7 @@
     /**
      * Returns the status of the variations seed storing on the C++ side: was it successful or not.
      */
+    @CalledByNative
     public static boolean hasNativePref() {
         return ContextUtils.getAppSharedPreferences().getBoolean(
                 VARIATIONS_FIRST_RUN_SEED_NATIVE_STORED, false);
diff --git a/components/variations/android/variations_seed_bridge.cc b/components/variations/android/variations_seed_bridge.cc
index 380f255..21e85a7 100644
--- a/components/variations/android/variations_seed_bridge.cc
+++ b/components/variations/android/variations_seed_bridge.cc
@@ -70,5 +70,10 @@
       static_cast<jboolean>(is_gzip_compressed));
 }
 
+bool HasMarkedPrefsForTesting() {
+  JNIEnv* env = AttachCurrentThread();
+  return Java_VariationsSeedBridge_hasNativePref(env);
+}
+
 }  // namespace android
 }  // namespace variations
diff --git a/components/variations/android/variations_seed_bridge.h b/components/variations/android/variations_seed_bridge.h
index 0840af0..652623b 100644
--- a/components/variations/android/variations_seed_bridge.h
+++ b/components/variations/android/variations_seed_bridge.h
@@ -33,6 +33,8 @@
                                     long response_date,
                                     bool is_gzip_compressed);
 
+bool HasMarkedPrefsForTesting();
+
 }  // namespace android
 }  // namespace variations
 
diff --git a/components/variations/variations_seed_store.cc b/components/variations/variations_seed_store.cc
index 32fb7ee..c356714 100644
--- a/components/variations/variations_seed_store.cc
+++ b/components/variations/variations_seed_store.cc
@@ -118,9 +118,11 @@
 VariationsSeedStore::VariationsSeedStore(
     PrefService* local_state,
     std::unique_ptr<SeedResponse> initial_seed,
-    bool signature_verification_enabled)
+    bool signature_verification_enabled,
+    bool use_first_run_prefs)
     : local_state_(local_state),
-      signature_verification_enabled_(signature_verification_enabled) {
+      signature_verification_enabled_(signature_verification_enabled),
+      use_first_run_prefs_(use_first_run_prefs) {
 #if defined(OS_ANDROID)
   if (initial_seed)
     ImportInitialSeed(std::move(initial_seed));
@@ -411,7 +413,9 @@
   // needed there. This is done regardless if we fail or succeed
   // below - since if we succeed, we're good to go and if we fail,
   // we probably don't want to keep around the bad content anyway.
-  android::ClearJavaFirstRunPrefs();
+  if (use_first_run_prefs_) {
+    android::ClearJavaFirstRunPrefs();
+  }
 
   if (initial_seed->date == 0) {
     RecordFirstRunSeedImportResult(
@@ -518,8 +522,10 @@
 #if defined(OS_ANDROID)
   // If currently we do not have any stored pref then we mark seed storing as
   // successful on the Java side to avoid repeated seed fetches.
-  if (local_state_->GetString(prefs::kVariationsCompressedSeed).empty())
+  if (local_state_->GetString(prefs::kVariationsCompressedSeed).empty() &&
+      use_first_run_prefs_) {
     android::MarkVariationsSeedAsStored();
+  }
 #endif
 
   // Update the saved country code only if one was returned from the server.
diff --git a/components/variations/variations_seed_store.h b/components/variations/variations_seed_store.h
index 3ee8dd8..8f905e1 100644
--- a/components/variations/variations_seed_store.h
+++ b/components/variations/variations_seed_store.h
@@ -35,10 +35,14 @@
   // seed store. This is used by Android Chrome to supply the first run seed,
   // and by Android WebView to supply the seed on every run.
   // |signature_verification_enabled| can be used in unit tests to disable
-  // signature checks on the seed.
+  // signature checks on the seed. If |use_first_run_prefs| is true (default),
+  // then this VariationsSeedStore may modify the Java SharedPreferences ("first
+  // run prefs") which are set during first run; otherwise this will not access
+  // SharedPreferences at all.
   VariationsSeedStore(PrefService* local_state,
                       std::unique_ptr<SeedResponse> initial_seed,
-                      bool signature_verification_enabled);
+                      bool signature_verification_enabled,
+                      bool use_first_run_prefs = true);
   virtual ~VariationsSeedStore();
 
   // Loads the variations seed data from local state into |seed|, as well as the
@@ -204,7 +208,10 @@
   std::string latest_serial_number_;
 
   // Whether to validate signatures on the seed. Always on except in tests.
-  bool signature_verification_enabled_ = true;
+  const bool signature_verification_enabled_;
+
+  // Whether this may read or write to Java "first run" SharedPreferences.
+  const bool use_first_run_prefs_;
 
   DISALLOW_COPY_AND_ASSIGN(VariationsSeedStore);
 };
diff --git a/components/variations/variations_seed_store_unittest.cc b/components/variations/variations_seed_store_unittest.cc
index c37c6ed..e038583 100644
--- a/components/variations/variations_seed_store_unittest.cc
+++ b/components/variations/variations_seed_store_unittest.cc
@@ -51,10 +51,14 @@
 
 class TestVariationsSeedStore : public VariationsSeedStore {
  public:
-  explicit TestVariationsSeedStore(PrefService* local_state)
+  explicit TestVariationsSeedStore(
+      PrefService* local_state,
+      std::unique_ptr<SeedResponse> initial_seed = nullptr,
+      bool use_first_run_prefs = true)
       : VariationsSeedStore(local_state,
-                            nullptr,
-                            /*signature_verification_enabled=*/false) {}
+                            std::move(initial_seed),
+                            /*signature_verification_enabled=*/false,
+                            use_first_run_prefs) {}
   ~TestVariationsSeedStore() override = default;
 
   bool StoreSeedForTesting(const std::string& seed_data) {
@@ -1208,6 +1212,70 @@
   EXPECT_EQ(0, seed->date);
   EXPECT_FALSE(seed->is_gzip_compressed);
 }
+
+class VariationsSeedStoreFirstRunPrefsTest
+    : public testing::TestWithParam<bool> {};
+
+INSTANTIATE_TEST_SUITE_P(VariationsSeedStoreTest,
+                         VariationsSeedStoreFirstRunPrefsTest,
+                         testing::Bool());
+
+TEST_P(VariationsSeedStoreFirstRunPrefsTest, FirstRunPrefsAllowed) {
+  bool use_first_run_prefs = GetParam();
+
+  const std::string test_seed_data = "raw_seed_data_test";
+  const std::string test_seed_signature = "seed_signature_test";
+  const std::string test_seed_country = "seed_country_code_test";
+  const long test_response_date = 1234567890;
+  const bool test_is_gzip_compressed = true;
+  android::SetJavaFirstRunPrefsForTesting(test_seed_data, test_seed_signature,
+                                          test_seed_country, test_response_date,
+                                          test_is_gzip_compressed);
+
+  const VariationsSeed test_seed = CreateTestSeed();
+  const std::string seed_data = SerializeSeed(test_seed);
+  const std::string base64_seed_data = SerializeSeedBase64(test_seed);
+  auto seed = std::make_unique<SeedResponse>();
+  seed->data = seed_data;
+  seed->signature = "java_seed_signature";
+  seed->country = "java_seed_country";
+  seed->date = 1234554321;
+  seed->is_gzip_compressed = false;
+
+  TestingPrefServiceSimple prefs;
+  VariationsSeedStore::RegisterPrefs(prefs.registry());
+  TestVariationsSeedStore seed_store(&prefs, /*initial_seed=*/std::move(seed),
+                                     use_first_run_prefs);
+
+  seed = android::GetVariationsFirstRunSeed();
+
+  if (use_first_run_prefs) {
+    // VariationsSeedStore should clear the first run seed prefs, so
+    // GetVariationsFirstRunSeed() should return default values.
+    EXPECT_EQ("", seed->data);
+    EXPECT_EQ("", seed->signature);
+    EXPECT_EQ("", seed->country);
+    EXPECT_EQ(0, seed->date);
+    EXPECT_FALSE(seed->is_gzip_compressed);
+
+    // VariationsSeedStore should signal to Java that it has saved the seed in
+    // native prefs.
+    EXPECT_TRUE(android::HasMarkedPrefsForTesting());
+  } else {
+    // VariationsSeedStore must not modify Java prefs at all.
+    EXPECT_EQ(test_seed_data, seed->data);
+    EXPECT_EQ(test_seed_signature, seed->signature);
+    EXPECT_EQ(test_seed_country, seed->country);
+    EXPECT_EQ(test_response_date, seed->date);
+    EXPECT_EQ(test_is_gzip_compressed, seed->is_gzip_compressed);
+    EXPECT_FALSE(android::HasMarkedPrefsForTesting());
+  }
+
+  // Seed should be stored in prefs.
+  EXPECT_FALSE(PrefHasDefaultValue(prefs, prefs::kVariationsCompressedSeed));
+  EXPECT_EQ(base64_seed_data,
+            prefs.GetString(prefs::kVariationsCompressedSeed));
+}
 #endif  // OS_ANDROID
 
 }  // namespace variations
diff --git a/content/browser/accessibility/accessibility_event_recorder.cc b/content/browser/accessibility/accessibility_event_recorder.cc
index ff5d956..26c301af 100644
--- a/content/browser/accessibility/accessibility_event_recorder.cc
+++ b/content/browser/accessibility/accessibility_event_recorder.cc
@@ -21,7 +21,7 @@
 std::unique_ptr<AccessibilityEventRecorder> AccessibilityEventRecorder::Create(
     BrowserAccessibilityManager* manager,
     base::ProcessId pid,
-    const AccessibilityTreeFormatter::TreeSelector& selector) {
+    const AXTreeSelector& selector) {
   return std::make_unique<AccessibilityEventRecorder>(manager);
 }
 
diff --git a/content/browser/accessibility/accessibility_event_recorder.h b/content/browser/accessibility/accessibility_event_recorder.h
index 59aec348..f9eb7e6 100644
--- a/content/browser/accessibility/accessibility_event_recorder.h
+++ b/content/browser/accessibility/accessibility_event_recorder.h
@@ -14,13 +14,15 @@
 #include "base/macros.h"
 #include "base/process/process_handle.h"
 #include "content/common/content_export.h"
-#include "content/public/browser/accessibility_tree_formatter.h"
+#include "ui/accessibility/platform/inspect/inspect.h"
 
 namespace content {
 
 using AccessibilityEventCallback =
     base::RepeatingCallback<void(const std::string&)>;
 
+using ui::AXTreeSelector;
+
 class BrowserAccessibilityManager;
 
 // Listens for native accessibility events fired by a given
@@ -44,14 +46,14 @@
   static std::unique_ptr<AccessibilityEventRecorder> Create(
       BrowserAccessibilityManager* manager = nullptr,
       base::ProcessId pid = 0,
-      const AccessibilityTreeFormatter::TreeSelector& selector = {});
+      const AXTreeSelector& selector = {});
 
   // Get a set of factory methods to create event-recorders, one for each test
   // pass; see |DumpAccessibilityTestBase|.
   using EventRecorderFactory = std::unique_ptr<AccessibilityEventRecorder> (*)(
       BrowserAccessibilityManager* manager,
       base::ProcessId pid,
-      const AccessibilityTreeFormatter::TreeSelector& selector);
+      const AXTreeSelector& selector);
   struct TestPass {
     const char* name;
     EventRecorderFactory create_recorder;
diff --git a/content/browser/accessibility/accessibility_event_recorder_auralinux.cc b/content/browser/accessibility/accessibility_event_recorder_auralinux.cc
index bd32b239..20fe9b6 100644
--- a/content/browser/accessibility/accessibility_event_recorder_auralinux.cc
+++ b/content/browser/accessibility/accessibility_event_recorder_auralinux.cc
@@ -35,7 +35,7 @@
   explicit AccessibilityEventRecorderAuraLinux(
       BrowserAccessibilityManager* manager,
       base::ProcessId pid,
-      const AccessibilityTreeFormatter::TreeSelector& selector);
+      const AXTreeSelector& selector);
   ~AccessibilityEventRecorderAuraLinux() override;
 
   void ProcessATKEvent(const char* event,
@@ -98,7 +98,7 @@
 std::unique_ptr<AccessibilityEventRecorder> AccessibilityEventRecorder::Create(
     BrowserAccessibilityManager* manager,
     base::ProcessId pid,
-    const AccessibilityTreeFormatter::TreeSelector& selector) {
+    const AXTreeSelector& selector) {
   return std::make_unique<AccessibilityEventRecorderAuraLinux>(manager, pid,
                                                                selector);
 }
@@ -120,7 +120,7 @@
 AccessibilityEventRecorderAuraLinux::AccessibilityEventRecorderAuraLinux(
     BrowserAccessibilityManager* manager,
     base::ProcessId pid,
-    const AccessibilityTreeFormatter::TreeSelector& selector)
+    const AXTreeSelector& selector)
     : AccessibilityEventRecorder(manager),
       pid_(pid),
       application_name_match_pattern_(selector.pattern) {
diff --git a/content/browser/accessibility/accessibility_event_recorder_mac.mm b/content/browser/accessibility/accessibility_event_recorder_mac.mm
index fcb93ba..6efa579 100644
--- a/content/browser/accessibility/accessibility_event_recorder_mac.mm
+++ b/content/browser/accessibility/accessibility_event_recorder_mac.mm
@@ -64,7 +64,7 @@
 std::unique_ptr<AccessibilityEventRecorder> AccessibilityEventRecorder::Create(
     BrowserAccessibilityManager* manager,
     base::ProcessId pid,
-    const AccessibilityTreeFormatter::TreeSelector& selector) {
+    const AXTreeSelector& selector) {
   AXUIElementRef node = nil;
   if (pid) {
     node = AXUIElementCreateApplication(pid);
diff --git a/content/browser/accessibility/accessibility_event_recorder_uia_win.cc b/content/browser/accessibility/accessibility_event_recorder_uia_win.cc
index 8ed50d1..768d56d7 100644
--- a/content/browser/accessibility/accessibility_event_recorder_uia_win.cc
+++ b/content/browser/accessibility/accessibility_event_recorder_uia_win.cc
@@ -47,10 +47,9 @@
 
 // static
 std::unique_ptr<AccessibilityEventRecorder>
-AccessibilityEventRecorderUia::CreateUia(
-    BrowserAccessibilityManager* manager,
-    base::ProcessId pid,
-    const AccessibilityTreeFormatter::TreeSelector& selector) {
+AccessibilityEventRecorderUia::CreateUia(BrowserAccessibilityManager* manager,
+                                         base::ProcessId pid,
+                                         const AXTreeSelector& selector) {
   return std::make_unique<AccessibilityEventRecorderUia>(manager, pid,
                                                          selector.pattern);
 }
diff --git a/content/browser/accessibility/accessibility_event_recorder_uia_win.h b/content/browser/accessibility/accessibility_event_recorder_uia_win.h
index 338f15a..9658947 100644
--- a/content/browser/accessibility/accessibility_event_recorder_uia_win.h
+++ b/content/browser/accessibility/accessibility_event_recorder_uia_win.h
@@ -34,7 +34,7 @@
   static std::unique_ptr<AccessibilityEventRecorder> CreateUia(
       BrowserAccessibilityManager* manager,
       base::ProcessId pid,
-      const AccessibilityTreeFormatter::TreeSelector& selector);
+      const AXTreeSelector& selector);
 
   // Called to ensure the event recorder has finished recording async events.
   void FlushAsyncEvents() override;
diff --git a/content/browser/accessibility/accessibility_event_recorder_win.cc b/content/browser/accessibility/accessibility_event_recorder_win.cc
index a9b5cbb..f17d3b9 100644
--- a/content/browser/accessibility/accessibility_event_recorder_win.cc
+++ b/content/browser/accessibility/accessibility_event_recorder_win.cc
@@ -126,7 +126,7 @@
 std::unique_ptr<AccessibilityEventRecorder> AccessibilityEventRecorder::Create(
     BrowserAccessibilityManager* manager,
     base::ProcessId pid,
-    const AccessibilityTreeFormatter::TreeSelector& selector) {
+    const AXTreeSelector& selector) {
   if (!selector.pattern.empty()) {
     LOG(FATAL) << "Recording accessibility events from an application name "
                   "match pattern not supported on this platform yet.";
diff --git a/content/browser/accessibility/accessibility_tools_utils_mac.h b/content/browser/accessibility/accessibility_tools_utils_mac.h
index 4f31537..3c134f1c 100644
--- a/content/browser/accessibility/accessibility_tools_utils_mac.h
+++ b/content/browser/accessibility/accessibility_tools_utils_mac.h
@@ -8,7 +8,9 @@
 #import <Cocoa/Cocoa.h>
 
 #include "base/callback.h"
-#include "content/public/browser/accessibility_tree_formatter.h"
+#include "ui/accessibility/platform/inspect/inspect.h"
+
+using ui::AXTreeSelector;
 
 namespace content {
 namespace a11y {
@@ -55,8 +57,7 @@
 /**
  * Returns AXUIElement and its application process id by a given tree selector.
  */
-std::pair<AXUIElementRef, int> FindAXUIElement(
-    const AccessibilityTreeFormatter::TreeSelector&);
+std::pair<AXUIElementRef, int> FindAXUIElement(const AXTreeSelector&);
 
 }  // namespace a11y
 }  // namespace content
diff --git a/content/browser/accessibility/accessibility_tools_utils_mac.mm b/content/browser/accessibility/accessibility_tools_utils_mac.mm
index 179edc1..32777c7 100644
--- a/content/browser/accessibility/accessibility_tools_utils_mac.mm
+++ b/content/browser/accessibility/accessibility_tools_utils_mac.mm
@@ -16,7 +16,6 @@
 namespace content {
 namespace a11y {
 
-using TreeSelector = AccessibilityTreeFormatter::TreeSelector;
 using base::SysNSStringToUTF8;
 
 const char kChromeTitle[] = "Google Chrome";
@@ -148,20 +147,19 @@
   return nil;
 }
 
-std::pair<AXUIElementRef, int> FindAXUIElement(
-    const AccessibilityTreeFormatter::TreeSelector& selector) {
+std::pair<AXUIElementRef, int> FindAXUIElement(const AXTreeSelector& selector) {
   NSArray* windows = static_cast<NSArray*>(CGWindowListCopyWindowInfo(
       kCGWindowListOptionOnScreenOnly | kCGWindowListExcludeDesktopElements,
       kCGNullWindowID));
 
   std::string title;
-  if (selector.types & TreeSelector::Chrome) {
+  if (selector.types & AXTreeSelector::Chrome) {
     title = kChromeTitle;
-  } else if (selector.types & TreeSelector::Chromium) {
+  } else if (selector.types & AXTreeSelector::Chromium) {
     title = kChromiumTitle;
-  } else if (selector.types & TreeSelector::Firefox) {
+  } else if (selector.types & AXTreeSelector::Firefox) {
     title = kFirefoxTitle;
-  } else if (selector.types & TreeSelector::Safari) {
+  } else if (selector.types & AXTreeSelector::Safari) {
     title = kSafariTitle;
   }
 
@@ -178,7 +176,7 @@
 
     if (window_name == title) {
       AXUIElementRef node = AXUIElementCreateApplication(pid);
-      if (selector.types & TreeSelector::ActiveTab) {
+      if (selector.types & AXTreeSelector::ActiveTab) {
         node = FindAXUIElement(
             node, base::BindRepeating([](const AXUIElementRef node) {
               // Only active tab in exposed in browsers, thus find first
diff --git a/content/browser/accessibility/accessibility_tree_formatter_android.cc b/content/browser/accessibility/accessibility_tree_formatter_android.cc
index ea0501368..6b4ca89 100644
--- a/content/browser/accessibility/accessibility_tree_formatter_android.cc
+++ b/content/browser/accessibility/accessibility_tree_formatter_android.cc
@@ -90,7 +90,7 @@
       gfx::AcceleratedWidget widget) override;
 
   std::unique_ptr<base::DictionaryValue> BuildAccessibilityTreeForSelector(
-      const TreeSelector& selector) override;
+      const AXTreeSelector& selector) override;
 
   void AddDefaultFilters(
       std::vector<PropertyFilter>* property_filters) override;
@@ -154,7 +154,7 @@
 
 std::unique_ptr<base::DictionaryValue>
 AccessibilityTreeFormatterAndroid::BuildAccessibilityTreeForSelector(
-    const TreeSelector& selector) {
+    const AXTreeSelector& selector) {
   NOTREACHED();
   return nullptr;
 }
diff --git a/content/browser/accessibility/accessibility_tree_formatter_auralinux.cc b/content/browser/accessibility/accessibility_tree_formatter_auralinux.cc
index 7b184d2..3df22f7 100644
--- a/content/browser/accessibility/accessibility_tree_formatter_auralinux.cc
+++ b/content/browser/accessibility/accessibility_tree_formatter_auralinux.cc
@@ -54,7 +54,7 @@
   std::unique_ptr<base::DictionaryValue> BuildAccessibilityTreeForWindow(
       gfx::AcceleratedWidget hwnd) override;
   std::unique_ptr<base::DictionaryValue> BuildAccessibilityTreeForSelector(
-      const TreeSelector& selector) override;
+      const AXTreeSelector& selector) override;
   std::unique_ptr<base::DictionaryValue> BuildAccessibilityTreeWithNode(
       AtspiAccessible* node);
 
@@ -95,7 +95,7 @@
 
 std::unique_ptr<base::DictionaryValue>
 AccessibilityTreeFormatterAuraLinux::BuildAccessibilityTreeForSelector(
-    const TreeSelector& selector) {
+    const AXTreeSelector& selector) {
   // AT-SPI2 always expects the first parameter to this call to be zero.
   AtspiAccessible* desktop = atspi_get_desktop(0);
   CHECK(desktop);
diff --git a/content/browser/accessibility/accessibility_tree_formatter_blink.cc b/content/browser/accessibility/accessibility_tree_formatter_blink.cc
index 7458359..8c69fe8 100644
--- a/content/browser/accessibility/accessibility_tree_formatter_blink.cc
+++ b/content/browser/accessibility/accessibility_tree_formatter_blink.cc
@@ -223,7 +223,7 @@
 
 std::unique_ptr<base::DictionaryValue>
 AccessibilityTreeFormatterBlink::BuildAccessibilityTreeForSelector(
-    const TreeSelector& selector) {
+    const AXTreeSelector& selector) {
   NOTREACHED();
   return nullptr;
 }
diff --git a/content/browser/accessibility/accessibility_tree_formatter_blink.h b/content/browser/accessibility/accessibility_tree_formatter_blink.h
index f8d13ca..2bc1577b 100644
--- a/content/browser/accessibility/accessibility_tree_formatter_blink.h
+++ b/content/browser/accessibility/accessibility_tree_formatter_blink.h
@@ -26,7 +26,7 @@
       gfx::AcceleratedWidget widget) override;
 
   std::unique_ptr<base::DictionaryValue> BuildAccessibilityTreeForSelector(
-      const TreeSelector& selector) override;
+      const AXTreeSelector& selector) override;
 
   void AddDefaultFilters(
       std::vector<PropertyFilter>* property_filters) override;
diff --git a/content/browser/accessibility/accessibility_tree_formatter_mac.mm b/content/browser/accessibility/accessibility_tree_formatter_mac.mm
index cf56583..3c3ecde 100644
--- a/content/browser/accessibility/accessibility_tree_formatter_mac.mm
+++ b/content/browser/accessibility/accessibility_tree_formatter_mac.mm
@@ -67,7 +67,7 @@
   std::unique_ptr<base::DictionaryValue> BuildAccessibilityTreeForWindow(
       gfx::AcceleratedWidget widget) override;
   std::unique_ptr<base::DictionaryValue> BuildAccessibilityTreeForSelector(
-      const TreeSelector& selector) override;
+      const AXTreeSelector& selector) override;
 
  private:
   std::unique_ptr<base::DictionaryValue> BuildAccessibilityTreeForAXUIElement(
@@ -171,7 +171,7 @@
 
 std::unique_ptr<base::DictionaryValue>
 AccessibilityTreeFormatterMac::BuildAccessibilityTreeForSelector(
-    const TreeSelector& selector) {
+    const AXTreeSelector& selector) {
   AXUIElementRef node = nil;
   std::tie(node, std::ignore) = a11y::FindAXUIElement(selector);
   return node != nil ? BuildAccessibilityTreeForAXUIElement(node) : nil;
diff --git a/content/browser/accessibility/accessibility_tree_formatter_uia_win.cc b/content/browser/accessibility/accessibility_tree_formatter_uia_win.cc
index d7a21e0..2a316617 100644
--- a/content/browser/accessibility/accessibility_tree_formatter_uia_win.cc
+++ b/content/browser/accessibility/accessibility_tree_formatter_uia_win.cc
@@ -444,7 +444,7 @@
 
 std::unique_ptr<base::DictionaryValue>
 AccessibilityTreeFormatterUia::BuildAccessibilityTreeForSelector(
-    const TreeSelector& selector) {
+    const AXTreeSelector& selector) {
   LOG(ERROR) << "Windows does not yet support building accessibility trees for "
                 "tree selectors";
   return nullptr;
diff --git a/content/browser/accessibility/accessibility_tree_formatter_uia_win.h b/content/browser/accessibility/accessibility_tree_formatter_uia_win.h
index df1a2ff..7c1f8307 100644
--- a/content/browser/accessibility/accessibility_tree_formatter_uia_win.h
+++ b/content/browser/accessibility/accessibility_tree_formatter_uia_win.h
@@ -38,7 +38,7 @@
   std::unique_ptr<base::DictionaryValue> BuildAccessibilityTreeForWindow(
       gfx::AcceleratedWidget hwnd) override;
   std::unique_ptr<base::DictionaryValue> BuildAccessibilityTreeForSelector(
-      const TreeSelector& selector) override;
+      const AXTreeSelector& selector) override;
 
  private:
   static const long properties_[];
diff --git a/content/browser/accessibility/accessibility_tree_formatter_win.cc b/content/browser/accessibility/accessibility_tree_formatter_win.cc
index 06a55906..24066a4 100644
--- a/content/browser/accessibility/accessibility_tree_formatter_win.cc
+++ b/content/browser/accessibility/accessibility_tree_formatter_win.cc
@@ -47,7 +47,7 @@
   std::unique_ptr<base::DictionaryValue> BuildAccessibilityTreeForWindow(
       gfx::AcceleratedWidget hwnd) override;
   std::unique_ptr<base::DictionaryValue> BuildAccessibilityTreeForSelector(
-      const TreeSelector& selector) override;
+      const AXTreeSelector& selector) override;
   std::unique_ptr<base::DictionaryValue> BuildAccessibilityTree(
       Microsoft::WRL::ComPtr<IAccessible> start,
       LONG window_x = 0,
@@ -327,7 +327,7 @@
 
 std::unique_ptr<base::DictionaryValue>
 AccessibilityTreeFormatterWin::BuildAccessibilityTreeForSelector(
-    const TreeSelector& selector) {
+    const AXTreeSelector& selector) {
   LOG(ERROR) << "Windows does not yet support building accessibility trees for "
                 "tree selectors";
   return nullptr;
diff --git a/content/browser/accessibility/browser_accessibility_manager.cc b/content/browser/accessibility/browser_accessibility_manager.cc
index 9fda59c75..4745879 100644
--- a/content/browser/accessibility/browser_accessibility_manager.cc
+++ b/content/browser/accessibility/browser_accessibility_manager.cc
@@ -11,6 +11,7 @@
 #include <memory>
 #include <utility>
 
+#include "base/auto_reset.h"
 #include "base/debug/crash_logging.h"
 #include "base/logging.h"
 #include "base/metrics/user_metrics.h"
@@ -407,6 +408,10 @@
   TRACE_EVENT0("accessibility",
                "BrowserAccessibilityManager::OnAccessibilityEvents");
 
+#if DCHECK_IS_ON()
+  base::AutoReset<bool> auto_reset(&in_on_accessibility_events_, true);
+#endif  // DCHECK_IS_ON()
+
   // Update the cached device scale factor.
   if (delegate_ && !use_custom_device_scale_factor_for_testing_)
     device_scale_factor_ = delegate_->AccessibilityGetDeviceScaleFactor();
diff --git a/content/browser/accessibility/browser_accessibility_manager.h b/content/browser/accessibility/browser_accessibility_manager.h
index cd05ef7..ec263568 100644
--- a/content/browser/accessibility/browser_accessibility_manager.h
+++ b/content/browser/accessibility/browser_accessibility_manager.h
@@ -589,6 +589,11 @@
   static base::Optional<int32_t> last_focused_node_id_;
   static base::Optional<ui::AXTreeID> last_focused_node_tree_id_;
 
+  // For debug only: True when handling OnAccessibilityEvents.
+#if DCHECK_IS_ON()
+  bool in_on_accessibility_events_ = false;
+#endif  // DCHECK_IS_ON()
+
  private:
   // Helper that calls AXTree::Unserialize(). On failure it populates crash data
   // with error information.
diff --git a/content/browser/accessibility/browser_accessibility_manager_win.cc b/content/browser/accessibility/browser_accessibility_manager_win.cc
index 2a3645b..b4909c2 100644
--- a/content/browser/accessibility/browser_accessibility_manager_win.cc
+++ b/content/browser/accessibility/browser_accessibility_manager_win.cc
@@ -28,6 +28,33 @@
 
 namespace content {
 
+namespace {
+
+#if DCHECK_IS_ON()
+#define DCHECK_IN_ON_ACCESSIBILITY_EVENTS()                                \
+  DCHECK(in_on_accessibility_events_)                                      \
+      << "This method should only be called during OnAccessibilityEvents " \
+         "because memoized information is cleared afterwards in "          \
+         "FinalizeAccessibilityEvents"
+#else
+#define DCHECK_IN_ON_ACCESSIBILITY_EVENTS()
+#endif  // DCHECK_IS_ON()
+
+BrowserAccessibility* GetUiaTextPatternProvider(BrowserAccessibility& node) {
+  for (BrowserAccessibility* current_node = &node; current_node;
+       current_node = current_node->PlatformGetParent()) {
+    if (ToBrowserAccessibilityWin(current_node)
+            ->GetCOM()
+            ->IsPatternProviderSupported(UIA_TextPatternId)) {
+      return current_node;
+    }
+  }
+
+  return nullptr;
+}
+
+}  // namespace
+
 // static
 BrowserAccessibilityManager* BrowserAccessibilityManager::Create(
     const ui::AXTreeUpdate& initial_tree,
@@ -108,10 +135,10 @@
       FireWinAccessibilityEvent(EVENT_SYSTEM_SCROLLINGSTART, node);
       break;
     case ax::mojom::Event::kTextChanged:
-      FireUiaTextContainerEvent(UIA_Text_TextChangedEventId, node);
+      HandleTextChangedEvent(*node);
       break;
     case ax::mojom::Event::kTextSelectionChanged:
-      text_selection_changed_events_.insert(node);
+      HandleTextSelectionChangedEvent(*node);
       break;
     default:
       break;
@@ -151,10 +178,10 @@
       FireUiaAccessibilityEvent(UIA_SystemAlertEventId, node);
       break;
     case ui::AXEventGenerator::Event::ATOMIC_CHANGED:
-      aria_properties_events_.insert(node);
+      HandleAriaPropertiesChangedEvent(*node);
       break;
     case ui::AXEventGenerator::Event::BUSY_CHANGED:
-      aria_properties_events_.insert(node);
+      HandleAriaPropertiesChangedEvent(*node);
       break;
     case ui::AXEventGenerator::Event::CHECKED_STATE_CHANGED:
       // https://www.w3.org/TR/core-aam-1.1/#mapping_state-property_table
@@ -165,7 +192,7 @@
                                    IsUIANodeSelected(node));
       }
       FireUiaPropertyChangedEvent(UIA_ToggleToggleStatePropertyId, node);
-      aria_properties_events_.insert(node);
+      HandleAriaPropertiesChangedEvent(*node);
       break;
     case ui::AXEventGenerator::Event::CHILDREN_CHANGED: {
       // If this node is ignored, fire the event on the platform parent since
@@ -186,7 +213,7 @@
     case ui::AXEventGenerator::Event::EXPANDED:
       FireUiaPropertyChangedEvent(
           UIA_ExpandCollapseExpandCollapseStatePropertyId, node);
-      aria_properties_events_.insert(node);
+      HandleAriaPropertiesChangedEvent(*node);
       break;
     case ui::AXEventGenerator::Event::CONTROLS_CHANGED:
       FireUiaPropertyChangedEvent(UIA_ControllerForPropertyId, node);
@@ -203,16 +230,16 @@
       BrowserAccessibility* focus_object = GetFromID(focus_id);
       if (focus_object && focus_object->HasVisibleCaretOrSelection())
         FireWinAccessibilityEvent(IA2_EVENT_TEXT_CARET_MOVED, focus_object);
-      text_selection_changed_events_.insert(node);
+      HandleTextSelectionChangedEvent(*node);
       break;
     }
     // aria-dropeffect is deprecated in WAI-ARIA 1.1.
     case ui::AXEventGenerator::Event::DROPEFFECT_CHANGED:
-      aria_properties_events_.insert(node);
+      HandleAriaPropertiesChangedEvent(*node);
       break;
     case ui::AXEventGenerator::Event::ENABLED_CHANGED:
       FireUiaPropertyChangedEvent(UIA_IsEnabledPropertyId, node);
-      aria_properties_events_.insert(node);
+      HandleAriaPropertiesChangedEvent(*node);
       break;
     case ui::AXEventGenerator::Event::FLOW_FROM_CHANGED:
       FireUiaPropertyChangedEvent(UIA_FlowsFromPropertyId, node);
@@ -222,14 +249,14 @@
       break;
     // aria-grabbed is deprecated in WAI-ARIA 1.1.
     case ui::AXEventGenerator::Event::GRABBED_CHANGED:
-      aria_properties_events_.insert(node);
+      HandleAriaPropertiesChangedEvent(*node);
       break;
     case ui::AXEventGenerator::Event::HASPOPUP_CHANGED:
-      aria_properties_events_.insert(node);
+      HandleAriaPropertiesChangedEvent(*node);
       break;
     case ui::AXEventGenerator::Event::HIERARCHICAL_LEVEL_CHANGED:
       FireUiaPropertyChangedEvent(UIA_LevelPropertyId, node);
-      aria_properties_events_.insert(node);
+      HandleAriaPropertiesChangedEvent(*node);
       break;
     case ui::AXEventGenerator::Event::IGNORED_CHANGED:
       if (node->IsIgnored()) {
@@ -240,14 +267,14 @@
           FireUiaAccessibilityEvent(UIA_MenuClosedEventId, node);
         }
       }
-      aria_properties_events_.insert(node);
+      HandleAriaPropertiesChangedEvent(*node);
       break;
     case ui::AXEventGenerator::Event::IMAGE_ANNOTATION_CHANGED:
       FireWinAccessibilityEvent(EVENT_OBJECT_NAMECHANGE, node);
       break;
     case ui::AXEventGenerator::Event::INVALID_STATUS_CHANGED:
       FireUiaPropertyChangedEvent(UIA_IsDataValidForFormPropertyId, node);
-      aria_properties_events_.insert(node);
+      HandleAriaPropertiesChangedEvent(*node);
       break;
     case ui::AXEventGenerator::Event::KEY_SHORTCUTS_CHANGED:
       FireUiaPropertyChangedEvent(UIA_AcceleratorKeyPropertyId, node);
@@ -278,7 +305,7 @@
       break;
     case ui::AXEventGenerator::Event::LIVE_STATUS_CHANGED:
       FireUiaPropertyChangedEvent(UIA_LiveSettingPropertyId, node);
-      aria_properties_events_.insert(node);
+      HandleAriaPropertiesChangedEvent(*node);
       break;
     case ui::AXEventGenerator::Event::LOAD_COMPLETE:
       FireWinAccessibilityEvent(IA2_EVENT_DOCUMENT_LOAD_COMPLETE, node);
@@ -288,12 +315,12 @@
       break;
     case ui::AXEventGenerator::Event::LIVE_RELEVANT_CHANGED:
     case ui::AXEventGenerator::Event::MULTILINE_STATE_CHANGED:
-      aria_properties_events_.insert(node);
+      HandleAriaPropertiesChangedEvent(*node);
       break;
     case ui::AXEventGenerator::Event::MULTISELECTABLE_STATE_CHANGED:
       FireUiaPropertyChangedEvent(UIA_SelectionCanSelectMultiplePropertyId,
                                   node);
-      aria_properties_events_.insert(node);
+      HandleAriaPropertiesChangedEvent(*node);
       break;
     case ui::AXEventGenerator::Event::NAME_CHANGED:
       FireUiaPropertyChangedEvent(UIA_NamePropertyId, node);
@@ -311,18 +338,18 @@
       break;
     case ui::AXEventGenerator::Event::POSITION_IN_SET_CHANGED:
       FireUiaPropertyChangedEvent(UIA_PositionInSetPropertyId, node);
-      aria_properties_events_.insert(node);
+      HandleAriaPropertiesChangedEvent(*node);
       break;
     case ui::AXEventGenerator::Event::READONLY_CHANGED:
       if (node->GetData().IsRangeValueSupported())
         FireUiaPropertyChangedEvent(UIA_RangeValueIsReadOnlyPropertyId, node);
       else if (ui::IsValuePatternSupported(node))
         FireUiaPropertyChangedEvent(UIA_ValueIsReadOnlyPropertyId, node);
-      aria_properties_events_.insert(node);
+      HandleAriaPropertiesChangedEvent(*node);
       break;
     case ui::AXEventGenerator::Event::REQUIRED_STATE_CHANGED:
       FireUiaPropertyChangedEvent(UIA_IsRequiredForFormPropertyId, node);
-      aria_properties_events_.insert(node);
+      HandleAriaPropertiesChangedEvent(*node);
       break;
     case ui::AXEventGenerator::Event::ROLE_CHANGED:
       FireUiaPropertyChangedEvent(UIA_AriaRolePropertyId, node);
@@ -342,18 +369,18 @@
                                  IsIA2NodeSelected(node));
       HandleSelectedStateChanged(uia_selection_events_, node,
                                  IsUIANodeSelected(node));
-      aria_properties_events_.insert(node);
+      HandleAriaPropertiesChangedEvent(*node);
       break;
     case ui::AXEventGenerator::Event::SELECTED_CHILDREN_CHANGED:
       FireWinAccessibilityEvent(EVENT_OBJECT_SELECTIONWITHIN, node);
       break;
     case ui::AXEventGenerator::Event::SET_SIZE_CHANGED:
       FireUiaPropertyChangedEvent(UIA_SizeOfSetPropertyId, node);
-      aria_properties_events_.insert(node);
+      HandleAriaPropertiesChangedEvent(*node);
       break;
     case ui::AXEventGenerator::Event::SORT_CHANGED:
       FireWinAccessibilityEvent(IA2_EVENT_OBJECT_ATTRIBUTE_CHANGED, node);
-      aria_properties_events_.insert(node);
+      HandleAriaPropertiesChangedEvent(*node);
       break;
     case ui::AXEventGenerator::Event::SUBTREE_CREATED:
       FireWinAccessibilityEvent(EVENT_OBJECT_SHOW, node);
@@ -365,31 +392,31 @@
       break;
     case ui::AXEventGenerator::Event::TEXT_ATTRIBUTE_CHANGED:
       FireWinAccessibilityEvent(IA2_EVENT_TEXT_ATTRIBUTE_CHANGED, node);
-      FireUiaTextContainerEvent(UIA_Text_TextChangedEventId, node);
+      HandleTextChangedEvent(*node);
       break;
     case ui::AXEventGenerator::Event::VALUE_CHANGED:
       FireWinAccessibilityEvent(EVENT_OBJECT_VALUECHANGE, node);
       if (node->GetData().IsRangeValueSupported()) {
         FireUiaPropertyChangedEvent(UIA_RangeValueValuePropertyId, node);
-        aria_properties_events_.insert(node);
+        HandleAriaPropertiesChangedEvent(*node);
       } else if (ui::IsValuePatternSupported(node)) {
         FireUiaPropertyChangedEvent(UIA_ValueValuePropertyId, node);
-        FireUiaTextContainerEvent(UIA_Text_TextChangedEventId, node);
+        HandleTextChangedEvent(*node);
       } else if (node->GetData().GetBoolAttribute(
                      ax::mojom::BoolAttribute::kEditableRoot)) {
-        FireUiaTextContainerEvent(UIA_Text_TextChangedEventId, node);
+        HandleTextChangedEvent(*node);
       }
       break;
     case ui::AXEventGenerator::Event::VALUE_MAX_CHANGED:
       if (node->GetData().IsRangeValueSupported()) {
         FireUiaPropertyChangedEvent(UIA_RangeValueMaximumPropertyId, node);
-        aria_properties_events_.insert(node);
+        HandleAriaPropertiesChangedEvent(*node);
       }
       break;
     case ui::AXEventGenerator::Event::VALUE_MIN_CHANGED:
       if (node->GetData().IsRangeValueSupported()) {
         FireUiaPropertyChangedEvent(UIA_RangeValueMinimumPropertyId, node);
-        aria_properties_events_.insert(node);
+        HandleAriaPropertiesChangedEvent(*node);
       }
       break;
     case ui::AXEventGenerator::Event::VALUE_STEP_CHANGED:
@@ -558,21 +585,6 @@
   }
 }
 
-void BrowserAccessibilityManagerWin::FireUiaTextContainerEvent(
-    LONG uia_event,
-    BrowserAccessibility* node) {
-  // If the node supports text pattern, fire the event from itself, otherwise,
-  // fire the event from the closest ancestor that supports text pattern.
-  while (node) {
-    if (ToBrowserAccessibilityWin(node)->GetCOM()->IsPatternProviderSupported(
-            UIA_TextPatternId)) {
-      FireUiaAccessibilityEvent(uia_event, node);
-      return;
-    }
-    node = node->PlatformGetParent();
-  }
-}
-
 bool BrowserAccessibilityManagerWin::CanFireEvents() const {
   return BrowserAccessibilityManager::CanFireEvents() &&
          GetDelegateFromRootManager() &&
@@ -801,9 +813,34 @@
   selection_events_map.clear();
 }
 
+void BrowserAccessibilityManagerWin::HandleAriaPropertiesChangedEvent(
+    BrowserAccessibility& node) {
+  DCHECK_IN_ON_ACCESSIBILITY_EVENTS();
+  aria_properties_events_.insert(&node);
+}
+
+void BrowserAccessibilityManagerWin::HandleTextChangedEvent(
+    BrowserAccessibility& node) {
+  DCHECK_IN_ON_ACCESSIBILITY_EVENTS();
+  if (BrowserAccessibility* text_provider = GetUiaTextPatternProvider(node))
+    text_changed_events_.insert(text_provider);
+}
+
+void BrowserAccessibilityManagerWin::HandleTextSelectionChangedEvent(
+    BrowserAccessibility& node) {
+  DCHECK_IN_ON_ACCESSIBILITY_EVENTS();
+  if (BrowserAccessibility* text_provider = GetUiaTextPatternProvider(node))
+    text_selection_changed_events_.insert(text_provider);
+}
+
 void BrowserAccessibilityManagerWin::BeforeAccessibilityEvents() {
   BrowserAccessibilityManager::BeforeAccessibilityEvents();
 
+  DCHECK(aria_properties_events_.empty());
+  DCHECK(text_changed_events_.empty());
+  DCHECK(text_selection_changed_events_.empty());
+  DCHECK(ignored_changed_nodes_.empty());
+
   for (const auto& targeted_event : event_generator()) {
     if (targeted_event.event_params.event ==
         ui::AXEventGenerator::Event::IGNORED_CHANGED) {
@@ -824,18 +861,20 @@
   BrowserAccessibilityManager::FinalizeAccessibilityEvents();
 
   // Finalize aria properties events.
-  for (auto&& event_node : aria_properties_events_) {
+  for (BrowserAccessibility* event_node : aria_properties_events_)
     FireUiaPropertyChangedEvent(UIA_AriaPropertiesPropertyId, event_node);
-  }
   aria_properties_events_.clear();
 
   // Finalize text selection events.
-  for (auto&& sel_event_node : text_selection_changed_events_) {
-    FireUiaTextContainerEvent(UIA_Text_TextSelectionChangedEventId,
-                              sel_event_node);
-  }
+  for (BrowserAccessibility* event_node : text_selection_changed_events_)
+    FireUiaAccessibilityEvent(UIA_Text_TextSelectionChangedEventId, event_node);
   text_selection_changed_events_.clear();
 
+  // Finalize text changed events.
+  for (BrowserAccessibility* event_node : text_changed_events_)
+    FireUiaAccessibilityEvent(UIA_Text_TextChangedEventId, event_node);
+  text_changed_events_.clear();
+
   // Finalize selection item events.
   FinalizeSelectionEvents(
       ia2_selection_events_, base::BindRepeating(&IsIA2NodeSelected),
diff --git a/content/browser/accessibility/browser_accessibility_manager_win.h b/content/browser/accessibility/browser_accessibility_manager_win.h
index 63a9ed7..3a45c8f 100644
--- a/content/browser/accessibility/browser_accessibility_manager_win.h
+++ b/content/browser/accessibility/browser_accessibility_manager_win.h
@@ -9,7 +9,7 @@
 
 #include <map>
 #include <memory>
-#include <unordered_set>
+#include <set>
 #include <vector>
 
 #include "base/macros.h"
@@ -51,7 +51,6 @@
                                    BrowserAccessibility* node);
   void FireUiaStructureChangedEvent(StructureChangeType change_type,
                                     BrowserAccessibility* node);
-  void FireUiaTextContainerEvent(LONG uia_event, BrowserAccessibility* node);
 
   // Do event pre-processing
   void BeforeAccessibilityEvents() override;
@@ -112,6 +111,10 @@
       IsSelectedPredicate is_selected_predicate,
       FirePlatformSelectionEventsCallback fire_platform_events_callback);
 
+  void HandleAriaPropertiesChangedEvent(BrowserAccessibility& node);
+  void HandleTextChangedEvent(BrowserAccessibility& node);
+  void HandleTextSelectionChangedEvent(BrowserAccessibility& node);
+
   // Give BrowserAccessibilityManager::Create access to our constructor.
   friend class BrowserAccessibilityManager;
 
@@ -123,16 +126,22 @@
 
   // Since there could be multiple aria property changes on a node and we only
   // want to fire UIA_AriaPropertiesPropertyId once for that node, we use the
-  // unordered set here to keep track of the unique nodes that had aria property
-  // changes, so we only fire the event once for every node.
-  std::unordered_set<BrowserAccessibility*> aria_properties_events_;
+  // set here to keep track of the unique nodes that had aria property changes,
+  // so we only fire the event once for every node.
+  std::set<BrowserAccessibility*> aria_properties_events_;
 
   // Since there could be duplicate text selection changed events on a node
-  // raised from both FireBlinkEvent and FireGeneratedEvent, we use an unordered
-  // set here to keep track of the unique nodes that had
+  // raised from both FireBlinkEvent and FireGeneratedEvent, we use the set here
+  // to keep track of the unique nodes that had
   // UIA_Text_TextSelectionChangedEventId, so we only fire the event once for
   // every node.
-  std::unordered_set<BrowserAccessibility*> text_selection_changed_events_;
+  std::set<BrowserAccessibility*> text_selection_changed_events_;
+
+  // Since there could be duplicate text changed events on a node raised from
+  // both FireBlinkEvent and FireGeneratedEvent, we use the set here to keep
+  // track of the unique nodes that had UIA_Text_TextChangedEventId, so we only
+  // fire the event once for every node.
+  std::set<BrowserAccessibility*> text_changed_events_;
 
   // When the ignored state changes for a node, we only want to fire the
   // events relevant to the ignored state change (e.g. show / hide).
diff --git a/content/browser/blob_storage/blob_url_unittest.cc b/content/browser/blob_storage/blob_url_unittest.cc
index ccb838ae..bbbf1b9d 100644
--- a/content/browser/blob_storage/blob_url_unittest.cc
+++ b/content/browser/blob_storage/blob_url_unittest.cc
@@ -78,7 +78,6 @@
   BlobURLTest()
       : task_environment_(BrowserTaskEnvironment::IO_MAINLOOP),
         blob_data_(new BlobDataBuilder("uuid")),
-        blob_uuid_(blob_data_->uuid()),
         response_error_code_(net::OK),
         expected_error_code_(net::OK),
         expected_status_code_(0) {}
@@ -309,7 +308,6 @@
   storage::BlobUrlRegistry blob_url_registry_;
   std::unique_ptr<storage::BlobDataHandle> blob_handle_;
   std::unique_ptr<BlobDataBuilder> blob_data_;
-  std::string blob_uuid_;
   std::unique_ptr<BlobDataSnapshot> blob_data_snapshot_;
   std::string response_;
   int response_error_code_;
diff --git a/content/browser/cache_storage/cache_storage_context_impl.cc b/content/browser/cache_storage/cache_storage_context_impl.cc
index 3891f08c..98be733 100644
--- a/content/browser/cache_storage/cache_storage_context_impl.cc
+++ b/content/browser/cache_storage/cache_storage_context_impl.cc
@@ -5,7 +5,6 @@
 #include "content/browser/cache_storage/cache_storage_context_impl.h"
 
 #include "base/bind.h"
-#include "base/feature_list.h"
 #include "base/files/file_path.h"
 #include "base/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
@@ -28,12 +27,7 @@
 
 namespace {
 
-const base::Feature kCacheStorageSequenceFeature{
-    "CacheStorageSequence", base::FEATURE_ENABLED_BY_DEFAULT};
-
 scoped_refptr<base::SequencedTaskRunner> CreateSchedulerTaskRunner() {
-  if (!base::FeatureList::IsEnabled(kCacheStorageSequenceFeature))
-    return GetIOThreadTaskRunner({});
   return base::ThreadPool::CreateSequencedTaskRunner(
       {base::TaskPriority::USER_VISIBLE});
 }
diff --git a/content/browser/child_process_security_policy_impl.cc b/content/browser/child_process_security_policy_impl.cc
index 2c46349..0fa984d 100644
--- a/content/browser/child_process_security_policy_impl.cc
+++ b/content/browser/child_process_security_policy_impl.cc
@@ -1289,11 +1289,6 @@
         // Data is self-contained within |body| - no need to check access.
         break;
 
-      case network::mojom::DataElementType::kBlob:
-        // No need to validate - the unguessability of the uuid of the blob is a
-        // sufficient defense against access from an unrelated renderer.
-        break;
-
       case network::mojom::DataElementType::kDataPipe:
         // Data is self-contained within |body| - no need to check access.
         break;
diff --git a/content/browser/download/download_browsertest.cc b/content/browser/download/download_browsertest.cc
index 1ff510bc..da31765a 100644
--- a/content/browser/download/download_browsertest.cc
+++ b/content/browser/download/download_browsertest.cc
@@ -142,7 +142,19 @@
 // AllowRenderingMhtmlOverHttp() and allows consumers to set a value.
 class DownloadTestContentBrowserClient : public TestContentBrowserClient {
  public:
-  DownloadTestContentBrowserClient() = default;
+  DownloadTestContentBrowserClient() {
+#if defined(OS_ANDROID)
+    content_url_loader_factory_ = std::make_unique<FakeNetworkURLLoaderFactory>(
+        "HTTP/1.1 200 OK\nContent-Type: multipart/related\n\n",
+        "This is a test for download mhtml through non http/https urls",
+        /* network_accessed */ true, net::OK);
+#endif  // OS_ANDROID
+
+    file_url_loader_factory_ = std::make_unique<FakeNetworkURLLoaderFactory>(
+        "HTTP/1.1 200 OK\nContent-Type: multipart/related\n\n",
+        "This is a test for download mhtml through non http/https urls",
+        /* network_accessed */ true, net::OK);
+  }
 
   bool AllowRenderingMhtmlOverHttp(NavigationUIData* navigation_data) override {
     return allowed_rendering_mhtml_over_http_;
@@ -163,34 +175,31 @@
   void RegisterNonNetworkNavigationURLLoaderFactories(
       int frame_tree_node_id,
       base::UkmSourceId ukm_source_id,
-      NonNetworkURLLoaderFactoryDeprecatedMap* uniquely_owned_factories,
       NonNetworkURLLoaderFactoryMap* factories) override {
     if (!enable_register_non_network_url_loader_)
       return;
 
 #if defined(OS_ANDROID)
-    auto content_url_loader_factory =
-        std::make_unique<FakeNetworkURLLoaderFactory>(
-            "HTTP/1.1 200 OK\nContent-Type: multipart/related\n\n",
-            "This is a test for download mhtml through non http/https urls",
-            /* network_accessed */ true, net::OK);
-    uniquely_owned_factories->emplace(url::kContentScheme,
-                                      std::move(content_url_loader_factory));
+    mojo::PendingRemote<network::mojom::URLLoaderFactory>
+        content_factory_remote;
+    content_url_loader_factory_->Clone(
+        content_factory_remote.InitWithNewPipeAndPassReceiver());
+    factories->emplace(url::kContentScheme, std::move(content_factory_remote));
 #endif  // OS_ANDROID
 
-    auto file_url_loader_factory =
-        std::make_unique<FakeNetworkURLLoaderFactory>(
-            "HTTP/1.1 200 OK\nContent-Type: multipart/related\n\n",
-            "This is a test for download mhtml through non http/https urls",
-            /* network_accessed */ true, net::OK);
-    uniquely_owned_factories->emplace(url::kFileScheme,
-                                      std::move(file_url_loader_factory));
+    mojo::PendingRemote<network::mojom::URLLoaderFactory> file_factory_remote;
+    file_url_loader_factory_->Clone(
+        file_factory_remote.InitWithNewPipeAndPassReceiver());
+    factories->emplace(url::kFileScheme, std::move(file_factory_remote));
   }
 
  private:
   bool allowed_rendering_mhtml_over_http_ = false;
   bool enable_register_non_network_url_loader_ = false;
 
+  std::unique_ptr<FakeNetworkURLLoaderFactory> content_url_loader_factory_;
+  std::unique_ptr<FakeNetworkURLLoaderFactory> file_url_loader_factory_;
+
   DISALLOW_COPY_AND_ASSIGN(DownloadTestContentBrowserClient);
 };
 
@@ -4313,7 +4322,14 @@
 
 // Verify that if the second request fails after the beginning request takes
 // over and completes its slice, download should complete.
-IN_PROC_BROWSER_TEST_F(ParallelDownloadTest, MiddleSliceDelayedError) {
+// Flaky on Linux.  http://crbug.com/1106059
+#if defined(OS_LINUX)
+#define MAYBE_MiddleSliceDelayedError DISABLED_MiddleSliceDelayedError
+#else
+#define MAYBE_MiddleSliceDelayedError MiddleSliceDelayedError
+#endif
+
+IN_PROC_BROWSER_TEST_F(ParallelDownloadTest, MAYBE_MiddleSliceDelayedError) {
   scoped_refptr<TestFileErrorInjector> injector(
       TestFileErrorInjector::Create(DownloadManagerForShell(shell())));
 
diff --git a/content/browser/download/download_manager_impl.cc b/content/browser/download/download_manager_impl.cc
index b2fa2a28..87309e3 100644
--- a/content/browser/download/download_manager_impl.cc
+++ b/content/browser/download/download_manager_impl.cc
@@ -272,17 +272,6 @@
       std::move(proxy_factory_remote), std::move(proxy_factory_receiver));
 }
 
-std::unique_ptr<network::PendingSharedURLLoaderFactory>
-CreatePendingSharedURLLoaderFactoryFromURLLoaderFactory(
-    std::unique_ptr<network::mojom::URLLoaderFactory> factory) {
-  mojo::PendingRemote<network::mojom::URLLoaderFactory> factory_remote;
-  mojo::MakeSelfOwnedReceiver(std::move(factory),
-                              factory_remote.InitWithNewPipeAndPassReceiver());
-
-  return std::make_unique<network::WrapperPendingSharedURLLoaderFactory>(
-      std::move(factory_remote));
-}
-
 void RecordDownloadOpenerType(RenderFrameHost* current,
                               RenderFrameHost* opener) {
   DCHECK(current);
@@ -1322,34 +1311,22 @@
             DataURLLoaderFactory::CreateForOneSpecificUrl(params->url()));
   } else if (rfh && !blink::network_utils::IsURLHandledByNetworkService(
                         params->url())) {
-    ContentBrowserClient::NonNetworkURLLoaderFactoryDeprecatedMap
-        non_network_uniquely_owned_factories;
     ContentBrowserClient::NonNetworkURLLoaderFactoryMap
         non_network_url_loader_factories;
-
     GetContentClient()
         ->browser()
         ->RegisterNonNetworkSubresourceURLLoaderFactories(
             params->render_process_host_id(),
             params->render_frame_host_routing_id(),
-            &non_network_uniquely_owned_factories,
             &non_network_url_loader_factories);
-    auto it = non_network_uniquely_owned_factories.find(params->url().scheme());
-    if (it != non_network_uniquely_owned_factories.end()) {
+    auto it = non_network_url_loader_factories.find(params->url().scheme());
+    if (it != non_network_url_loader_factories.end()) {
       pending_url_loader_factory =
-          CreatePendingSharedURLLoaderFactoryFromURLLoaderFactory(
+          std::make_unique<network::WrapperPendingSharedURLLoaderFactory>(
               std::move(it->second));
     } else {
-      auto it2 = non_network_url_loader_factories.find(params->url().scheme());
-      if (it2 != non_network_url_loader_factories.end()) {
-        pending_url_loader_factory =
-            std::make_unique<network::WrapperPendingSharedURLLoaderFactory>(
-                std::move(it2->second));
-      } else {
-        DLOG(ERROR) << "No URLLoaderFactory found to download "
-                    << params->url();
-        return;
-      }
+      DLOG(ERROR) << "No URLLoaderFactory found to download " << params->url();
+      return;
     }
   } else {
     StoragePartitionImpl* storage_partition =
diff --git a/content/browser/loader/cross_site_document_blocking_browsertest.cc b/content/browser/loader/cross_site_document_blocking_browsertest.cc
index 4d8a7f9..a0aa820 100644
--- a/content/browser/loader/cross_site_document_blocking_browsertest.cc
+++ b/content/browser/loader/cross_site_document_blocking_browsertest.cc
@@ -461,12 +461,6 @@
         network::switches::kHostResolverRules,
         "MAP * " + embedded_test_server()->host_port_pair().ToString() +
             ",EXCLUDE localhost");
-    // TODO(yoichio): This is temporary switch to support chrome internal
-    // components migration from the old web APIs.
-    // After completion of the migration, we should remove this.
-    // See crbug.com/911943 for detail.
-    command_line->AppendSwitchASCII(switches::kEnableBlinkFeatures,
-                                    "HTMLImports");
   }
 
   void VerifyImgRequest(std::string resource, CorbExpectations expectations) {
@@ -1426,197 +1420,6 @@
   EXPECT_EQ("<p>contents of the response</p>", response_body);
 }
 
-// This test covers a scenario where foo.com document HTML-Imports a bar.com
-// document.  Because of historical reasons, bar.com fetches use foo.com's
-// URLLoaderFactory.  This means that |request_initiator_origin_lock|
-// enforcement can incorrectly classify such fetches as malicious
-// (kIncorrectLock). This test ensures that UMAs properly detect such mishaps.
-//
-// TODO(lukasza, yoichio): https://crbug.com/766694: Remove this test once HTML
-// Imports are removed from the codebase.
-IN_PROC_BROWSER_TEST_P(CrossSiteDocumentBlockingTest,
-                       HtmlImports_IncorrectLock) {
-  embedded_test_server()->StartAcceptingConnections();
-
-  // Prepare to intercept the network request at the IPC layer.
-  // This has to be done before the RenderFrameHostImpl is created.
-  //
-  // Note: we want to verify that the blocking prevents the data from being sent
-  // over IPC.  Testing later (e.g. via Response/Headers Web APIs) might give a
-  // false sense of security, since some sanitization happens inside the
-  // renderer (e.g. via FetchResponseData::CreateCorsFilteredResponse).
-  GURL json_url("http://bar.com/site_isolation/nosniff.json");
-  RequestInterceptor interceptor(json_url);
-
-  // Navigate to the test page.
-  GURL foo_url("http://foo.com/title1.html");
-  EXPECT_TRUE(NavigateToURL(shell(), foo_url));
-
-  // Trigger a HTML import from another site.  The imported document will
-  // perform a fetch of nosniff.json same-origin (bar.com) via <script> element.
-  // CORB should normally allow such fetch (request_initiator == bar.com ==
-  // origin_of_fetch_target), but here the fetch will be blocked, because
-  // request_initiator_origin_lock (a.com) will differ from request_initiator.
-  // Such mishap is okay, because CORB only blocks HTML/XML/JSON and such
-  // content type wouldn't have worked in <script> (or other non-XHR/fetch
-  // context) anyway.
-  GURL html_import_url(
-      "http://bar.com/cross_site_document_blocking/html_import.html");
-  const char* html_import_injection_template = R"(
-          var link = document.createElement('link');
-          link.rel = 'import';
-          link.href = $1;
-          document.head.appendChild(link);
-          )";
-  {
-    base::HistogramTester histograms;
-    std::string script =
-        JsReplace(html_import_injection_template, html_import_url);
-    ExecuteScriptAsync(shell()->web_contents(), script);
-    interceptor.WaitForRequestCompletion();
-
-    // NetworkService enforces |request_initiator_origin_lock| for CORB,
-    // which means that legitimate fetches from HTML Imported scripts may get
-    // incorrectly blocked.
-    interceptor.Verify(CorbExpectations::kShouldBeBlockedWithoutSniffing,
-                       "no resource body needed for blocking verification");
-  }
-}
-
-// This test doesn't cover desirable behavior, but rather highlights bugs in
-// implementation of HTML Imports:
-// 1. On one hand:
-//    - "/site_isolation/nosniff.json" is resolved relative to foo.com
-//    - request_initiator is set to foo.com
-// 2. But
-//    - CORB sees that the request was made from bar.com and blocks it.
-//
-// The test helps show that the bug above means that in XHR/fetch scenarios
-// request_initiator is accidentally compatible with
-// request_initiator_origin_lock and therefore the lock can be safely enforced.
-//
-// There are 2 almost identical tests here:
-// - HtmlImports_CompatibleLock1
-// - HtmlImports_CompatibleLock2
-// They differ in which document is HTML Imported (and how the fetch of
-// nosniff.json is triggered).
-//
-// TODO(lukasza, yoichio): https://crbug.com/766694: Remove this test once HTML
-// Imports are removed from the codebase.
-IN_PROC_BROWSER_TEST_P(CrossSiteDocumentBlockingTest,
-                       HtmlImports_CompatibleLock1) {
-  embedded_test_server()->StartAcceptingConnections();
-
-  // Prepare to intercept the network request at the IPC layer.
-  // This has to be done before the RenderFrameHostImpl is created.
-  //
-  // Note: we want to verify that the blocking prevents the data from being sent
-  // over IPC.  Testing later (e.g. via Response/Headers Web APIs) might give a
-  // false sense of security, since some sanitization happens inside the
-  // renderer (e.g. via FetchResponseData::CreateCorsFilteredResponse).
-  GURL json_url("http://foo.com/site_isolation/nosniff.json");
-  RequestInterceptor interceptor(json_url);
-
-  // Navigate to the test page.
-  GURL foo_url("http://foo.com/title1.html");
-  EXPECT_TRUE(NavigateToURL(shell(), foo_url));
-
-  // Trigger a HTML import from another site.  The imported document will
-  // perform a fetch of nosniff.json same-origin (bar.com).  CORB should
-  // allow all same-origin fetches.
-  GURL html_import_url(
-      "http://bar.com/cross_site_document_blocking/html_import2.html");
-  const char* html_import_injection_template = R"(
-          var link = document.createElement('link');
-          link.rel = 'import';
-          link.href = $1;
-          document.head.appendChild(link);
-          )";
-  {
-    DOMMessageQueue msg_queue;
-    base::HistogramTester histograms;
-    std::string script =
-        JsReplace(html_import_injection_template, html_import_url);
-    ExecuteScriptAsync(shell()->web_contents(), script);
-    interceptor.WaitForRequestCompletion();
-
-    // |request_initiator| is same-origin (foo.com), and so the fetch should not
-    // be blocked by CORB.
-    interceptor.Verify(CorbExpectations::kShouldBeAllowedWithoutSniffing,
-                       GetTestFileContents("site_isolation", "nosniff.json"));
-    std::string fetch_result;
-    EXPECT_TRUE(msg_queue.WaitForMessage(&fetch_result));
-    EXPECT_THAT(fetch_result, ::testing::HasSubstr("BODY: runMe"));
-  }
-}
-
-// This test doesn't cover desirable behavior, but rather highlights bugs in
-// implementation of HTML Imports:
-// 1. On one hand:
-//    - "/site_isolation/nosniff.json" is resolved relative to foo.com
-//    - request_initiator is set to foo.com
-// 2. But
-//    - CORB sees that the request was made from bar.com and blocks it.
-//
-// The test helps show that the bug above means that in XHR/fetch scenarios
-// request_initiator is accidentally compatible with
-// request_initiator_origin_lock and therefore the lock can be safely enforced.
-//
-// There are 2 almost identical tests here:
-// - HtmlImports_CompatibleLock1
-// - HtmlImports_CompatibleLock2
-// They differ in which document is HTML Imported (and how the fetch of
-// nosniff.json is triggered).
-//
-// TODO(lukasza, yoichio): https://crbug.com/766694: Remove this test once HTML
-// Imports are removed from the codebase.
-IN_PROC_BROWSER_TEST_P(CrossSiteDocumentBlockingTest,
-                       HtmlImports_CompatibleLock2) {
-  embedded_test_server()->StartAcceptingConnections();
-
-  // Prepare to intercept the network request at the IPC layer.
-  // This has to be done before the RenderFrameHostImpl is created.
-  //
-  // Note: we want to verify that the blocking prevents the data from being sent
-  // over IPC.  Testing later (e.g. via Response/Headers Web APIs) might give a
-  // false sense of security, since some sanitization happens inside the
-  // renderer (e.g. via FetchResponseData::CreateCorsFilteredResponse).
-  GURL json_url("http://foo.com/site_isolation/nosniff.json");
-  RequestInterceptor interceptor(json_url);
-
-  // Navigate to the test page.
-  GURL foo_url("http://foo.com/title1.html");
-  EXPECT_TRUE(NavigateToURL(shell(), foo_url));
-
-  // Trigger a HTML import from another site.  The imported document will
-  // perform a fetch of nosniff.json same-origin (bar.com).  CORB should
-  // allow all same-origin fetches.
-  GURL html_import_url(
-      "http://bar.com/cross_site_document_blocking/html_import3.html");
-  const char* html_import_injection_template = R"(
-          var link = document.createElement('link');
-          link.rel = 'import';
-          link.href = $1;
-          document.head.appendChild(link);
-          )";
-  {
-    DOMMessageQueue msg_queue;
-    base::HistogramTester histograms;
-    std::string script =
-        JsReplace(html_import_injection_template, html_import_url);
-    ExecuteScriptAsync(shell()->web_contents(), script);
-    interceptor.WaitForRequestCompletion();
-
-    // |request_initiator| is same-origin (foo.com), and so the fetch should not
-    // be blocked by CORB.
-    interceptor.Verify(CorbExpectations::kShouldBeAllowedWithoutSniffing,
-                       GetTestFileContents("site_isolation", "nosniff.json"));
-    std::string fetch_result;
-    EXPECT_TRUE(msg_queue.WaitForMessage(&fetch_result));
-    EXPECT_THAT(fetch_result, ::testing::HasSubstr("BODY: runMe"));
-  }
-}
-
 INSTANTIATE_TEST_SUITE_P(
     WithCORBProtectionSniffing,
     CrossSiteDocumentBlockingTest,
diff --git a/content/browser/loader/navigation_url_loader_impl.cc b/content/browser/loader/navigation_url_loader_impl.cc
index b2d3918..b4956a3 100644
--- a/content/browser/loader/navigation_url_loader_impl.cc
+++ b/content/browser/loader/navigation_url_loader_impl.cc
@@ -1171,7 +1171,6 @@
             frame_tree_node_id_,
             base::UkmSourceId::FromInt64(frame_tree_node->navigation_request()
                                              ->GetNextPageUkmSourceId()),
-            &non_network_uniquely_owned_factories_,
             &non_network_url_loader_factories_);
 
     // The embedder may want to proxy all network-bound URLLoaderFactory
@@ -1231,8 +1230,6 @@
                                             ContentURLLoaderFactory::Create());
 #endif
 
-  for (auto& iter : non_network_uniquely_owned_factories_)
-    known_schemes_.insert(iter.first);
   for (auto& iter : non_network_url_loader_factories_)
     known_schemes_.insert(iter.first);
 
@@ -1342,18 +1339,12 @@
 void NavigationURLLoaderImpl::BindNonNetworkURLLoaderFactoryReceiver(
     const GURL& url,
     mojo::PendingReceiver<network::mojom::URLLoaderFactory> factory_receiver) {
-  auto it = non_network_uniquely_owned_factories_.find(url.scheme());
-  if (it != non_network_uniquely_owned_factories_.end()) {
-    it->second->Clone(std::move(factory_receiver));
-    return;
-  }
-
-  auto it2 = non_network_url_loader_factories_.find(url.scheme());
-  if (it2 != non_network_url_loader_factories_.end()) {
+  auto it = non_network_url_loader_factories_.find(url.scheme());
+  if (it != non_network_url_loader_factories_.end()) {
     mojo::Remote<network::mojom::URLLoaderFactory> remote(
-        std::move(it2->second));
+        std::move(it->second));
     remote->Clone(std::move(factory_receiver));
-    non_network_url_loader_factories_.erase(it2);
+    non_network_url_loader_factories_.erase(it);
     return;
   }
 
diff --git a/content/browser/loader/navigation_url_loader_impl.h b/content/browser/loader/navigation_url_loader_impl.h
index 354f811..18710c67 100644
--- a/content/browser/loader/navigation_url_loader_impl.h
+++ b/content/browser/loader/navigation_url_loader_impl.h
@@ -297,12 +297,6 @@
   ContentBrowserClient::NonNetworkURLLoaderFactoryMap
       non_network_url_loader_factories_;
 
-  // Like |non_network_url_loader_factories_|, but with factories owned by
-  // |this| NavigationURLLoaderImpl. (This ownership mode is deprecated - see
-  // https://crbug.com/1106995)
-  ContentBrowserClient::NonNetworkURLLoaderFactoryDeprecatedMap
-      non_network_uniquely_owned_factories_;
-
   // Lazily initialized and used in the case of non-network resource
   // navigations. Keyed by URL scheme.
   // (These are cloned by entries populated in
diff --git a/content/browser/media/capture/web_contents_video_capture_device_browsertest.cc b/content/browser/media/capture/web_contents_video_capture_device_browsertest.cc
index 9c24566..0526620 100644
--- a/content/browser/media/capture/web_contents_video_capture_device_browsertest.cc
+++ b/content/browser/media/capture/web_contents_video_capture_device_browsertest.cc
@@ -402,8 +402,8 @@
 // compositing, whether the WebContents is visible/hidden or occluded/unoccluded
 // and whether the main document contains a cross-site iframe.
 
-// Fails on LACROS and linux. http://crbug.com/1108205
-#if BUILDFLAG(IS_LACROS) || defined(OS_LINUX)
+// Fails on LACROS for Chrome OS and linux. http://crbug.com/1108205
+#if BUILDFLAG(IS_LACROS) || defined(OS_LINUX) || defined(OS_CHROMEOS)
 #define MAYBE_CapturesContentChanges DISABLED_CapturesContentChanges
 #else
 #define MAYBE_CapturesContentChanges CapturesContentChanges
diff --git a/content/browser/navigation_browsertest.cc b/content/browser/navigation_browsertest.cc
index ed4a7d9..7fefdec1f 100644
--- a/content/browser/navigation_browsertest.cc
+++ b/content/browser/navigation_browsertest.cc
@@ -3266,18 +3266,20 @@
     void BrowserURLHandlerCreated(BrowserURLHandler* handler) override {
       handler->AddHandlerPair(RewriteUrl,
                               BrowserURLHandlerImpl::null_handler());
+      fake_url_loader_factory_ = std::make_unique<FakeNetworkURLLoaderFactory>(
+          "HTTP/1.1 200 OK\nContent-Type: text/html\n\n", "This is a test",
+          /* network_accessed */ true, net::OK);
     }
 
     void RegisterNonNetworkNavigationURLLoaderFactories(
         int frame_tree_node_id,
         base::UkmSourceId ukm_source_id,
-        NonNetworkURLLoaderFactoryDeprecatedMap* uniquely_owned_factories,
         NonNetworkURLLoaderFactoryMap* factories) override {
-      auto url_loader_factory = std::make_unique<FakeNetworkURLLoaderFactory>(
-          "HTTP/1.1 200 OK\nContent-Type: text/html\n\n", "This is a test",
-          /* network_accessed */ true, net::OK);
-      uniquely_owned_factories->emplace(std::string(kNoAccessScheme),
-                                        std::move(url_loader_factory));
+      mojo::PendingRemote<network::mojom::URLLoaderFactory> pending_remote;
+      fake_url_loader_factory_->Clone(
+          pending_remote.InitWithNewPipeAndPassReceiver());
+      factories->emplace(std::string(kNoAccessScheme),
+                         std::move(pending_remote));
     }
 
     bool ShouldAssignSiteForURL(const GURL& url) override {
@@ -3291,6 +3293,9 @@
       }
       return false;
     }
+
+   private:
+    std::unique_ptr<FakeNetworkURLLoaderFactory> fake_url_loader_factory_;
   };
 
   NavigationUrlRewriteBrowserTest() {
diff --git a/content/browser/renderer_host/render_frame_host_impl.cc b/content/browser/renderer_host/render_frame_host_impl.cc
index dd3297ede..c337648e 100644
--- a/content/browser/renderer_host/render_frame_host_impl.cc
+++ b/content/browser/renderer_host/render_frame_host_impl.cc
@@ -6140,7 +6140,6 @@
           appcache_remote.Unbind();
     }
 
-    non_network_uniquely_owned_factories_.clear();
     ContentBrowserClient::NonNetworkURLLoaderFactoryMap non_network_factories;
 
     // Set up the default factory.
@@ -6281,20 +6280,7 @@
     GetContentClient()
         ->browser()
         ->RegisterNonNetworkSubresourceURLLoaderFactories(
-            GetProcess()->GetID(), routing_id_,
-            &non_network_uniquely_owned_factories_, &non_network_factories);
-
-    for (auto& factory : non_network_uniquely_owned_factories_) {
-      mojo::PendingRemote<network::mojom::URLLoaderFactory>
-          pending_factory_proxy;
-      mojo::PendingReceiver<network::mojom::URLLoaderFactory> factory_receiver =
-          pending_factory_proxy.InitWithNewPipeAndPassReceiver();
-      WillCreateURLLoaderFactory(main_world_origin_for_url_loader_factory,
-                                 &factory_receiver, next_page_ukm_source_id);
-      factory.second->Clone(std::move(factory_receiver));
-      subresource_loader_factories->pending_scheme_specific_factories().emplace(
-          factory.first, std::move(pending_factory_proxy));
-    }
+            GetProcess()->GetID(), routing_id_, &non_network_factories);
 
     for (auto& factory : non_network_factories) {
       mojo::PendingRemote<network::mojom::URLLoaderFactory>
diff --git a/content/browser/renderer_host/render_frame_host_impl.h b/content/browser/renderer_host/render_frame_host_impl.h
index bc353236..5f26ae8 100644
--- a/content/browser/renderer_host/render_frame_host_impl.h
+++ b/content/browser/renderer_host/render_frame_host_impl.h
@@ -2865,12 +2865,6 @@
 
   std::unique_ptr<PendingNavigation> pending_navigate_;
 
-  // A collection of non-network URLLoaderFactory implementations which are used
-  // to service any supported non-network subresource requests for the currently
-  // committed navigation.
-  ContentBrowserClient::NonNetworkURLLoaderFactoryDeprecatedMap
-      non_network_uniquely_owned_factories_;
-
   // Renderer-side states that blocks fast shutdown of the frame.
   bool has_before_unload_handler_ = false;
   bool has_unload_handler_ = false;
diff --git a/content/browser/renderer_host/render_frame_host_impl_browsertest.cc b/content/browser/renderer_host/render_frame_host_impl_browsertest.cc
index 8e4ac3a..bc1e66a 100644
--- a/content/browser/renderer_host/render_frame_host_impl_browsertest.cc
+++ b/content/browser/renderer_host/render_frame_host_impl_browsertest.cc
@@ -130,7 +130,16 @@
 class FirstPartySchemeContentBrowserClient : public TestContentBrowserClient {
  public:
   explicit FirstPartySchemeContentBrowserClient(const GURL& iframe_url)
-      : iframe_url_(iframe_url) {}
+      : iframe_url_(iframe_url) {
+    trustme_factory_ = std::make_unique<network::TestURLLoaderFactory>();
+    trustmeifembeddingsecure_factory_ =
+        std::make_unique<network::TestURLLoaderFactory>();
+    std::string response_body =
+        base::StrCat({"<iframe src=\"", iframe_url_.spec(), "\"></iframe>"});
+    trustme_factory_->AddResponse(kTrustMeUrl, response_body);
+    trustmeifembeddingsecure_factory_->AddResponse(kTrustMeIfEmbeddingSecureUrl,
+                                                   response_body);
+  }
 
   ~FirstPartySchemeContentBrowserClient() override = default;
 
@@ -145,24 +154,24 @@
   void RegisterNonNetworkNavigationURLLoaderFactories(
       int frame_tree_node_id,
       base::UkmSourceId ukm_source_id,
-      NonNetworkURLLoaderFactoryDeprecatedMap* uniquely_owned_factories,
       NonNetworkURLLoaderFactoryMap* factories) override {
-    auto trustme_factory = std::make_unique<network::TestURLLoaderFactory>();
-    auto trustmeifembeddingsecure_factory =
-        std::make_unique<network::TestURLLoaderFactory>();
-    std::string response_body =
-        base::StrCat({"<iframe src=\"", iframe_url_.spec(), "\"></iframe>"});
-    trustme_factory->AddResponse(kTrustMeUrl, response_body);
-    trustmeifembeddingsecure_factory->AddResponse(kTrustMeIfEmbeddingSecureUrl,
-                                                  response_body);
-    uniquely_owned_factories->emplace("trustme", std::move(trustme_factory));
-    uniquely_owned_factories->emplace(
-        "trustmeifembeddingsecure",
-        std::move(trustmeifembeddingsecure_factory));
+    mojo::PendingRemote<network::mojom::URLLoaderFactory> trustme_remote;
+    trustme_factory_->Clone(trustme_remote.InitWithNewPipeAndPassReceiver());
+    factories->emplace("trustme", std::move(trustme_remote));
+
+    mojo::PendingRemote<network::mojom::URLLoaderFactory>
+        trustmeifembeddingsecure_remote;
+    trustmeifembeddingsecure_factory_->Clone(
+        trustmeifembeddingsecure_remote.InitWithNewPipeAndPassReceiver());
+    factories->emplace("trustmeifembeddingsecure",
+                       std::move(trustmeifembeddingsecure_remote));
   }
 
  private:
   GURL iframe_url_;
+  std::unique_ptr<network::TestURLLoaderFactory> trustme_factory_;
+  std::unique_ptr<network::TestURLLoaderFactory>
+      trustmeifembeddingsecure_factory_;
 
   DISALLOW_COPY_AND_ASSIGN(FirstPartySchemeContentBrowserClient);
 };
diff --git a/content/browser/renderer_host/render_widget_host_view_aura.cc b/content/browser/renderer_host/render_widget_host_view_aura.cc
index f6cd4515..1fb371bc 100644
--- a/content/browser/renderer_host/render_widget_host_view_aura.cc
+++ b/content/browser/renderer_host/render_widget_host_view_aura.cc
@@ -1238,10 +1238,8 @@
     return rect;
   screen_position_client->ConvertPointToScreen(window_, &origin);
   screen_position_client->ConvertPointToScreen(window_, &end);
-  return gfx::Rect(origin.x(),
-                   origin.y(),
-                   end.x() - origin.x(),
-                   end.y() - origin.y());
+  return gfx::Rect(origin.x(), origin.y(), base::ClampSub(end.x(), origin.x()),
+                   base::ClampSub(end.y(), origin.y()));
 }
 
 gfx::Rect RenderWidgetHostViewAura::ConvertRectFromScreen(
diff --git a/content/browser/security_exploit_browsertest.cc b/content/browser/security_exploit_browsertest.cc
index b900692f..9ff535e 100644
--- a/content/browser/security_exploit_browsertest.cc
+++ b/content/browser/security_exploit_browsertest.cc
@@ -436,15 +436,6 @@
  public:
   CorsExploitBrowserTest() = default;
 
-  void SetUpCommandLine(base::CommandLine* command_line) override {
-    // TODO(yoichio): This is temporary switch to support chrome internal
-    // components migration from the old web APIs.
-    // After completion of the migration, we should remove this.
-    // See https://crbug.com/911943 for detail.
-    command_line->AppendSwitchASCII(switches::kEnableBlinkFeatures,
-                                    "HTMLImports");
-  }
-
   void SetUpOnMainThread() override {
     host_resolver()->AddRule("*", "127.0.0.1");
     SetupCrossSiteRedirector(embedded_test_server());
@@ -454,59 +445,6 @@
   DISALLOW_COPY_AND_ASSIGN(CorsExploitBrowserTest);
 };
 
-// This is a regression test for https://crbug.com/961614 - it makes sure that
-// the trustworthy |request_initiator_origin_lock| takes precedent over
-// the untrustworthy |request.request_initiator|.
-//
-// For spoofing a |request.request_initiator| that doesn't match
-// |request_initiator_origin_lock|, the test relies on a misfeature of HTML
-// Imports.  It is unclear how to replicate such spoofing once HTML imports are
-// deprecated.
-IN_PROC_BROWSER_TEST_F(CorsExploitBrowserTest,
-                       OriginHeaderSpoofViaHtmlImports) {
-  std::string victim_path = "/victim/secret.json";
-  net::test_server::ControllableHttpResponse victim_response(
-      embedded_test_server(), victim_path, false);
-
-  ASSERT_TRUE(embedded_test_server()->Start());
-  GURL attacker_url(
-      embedded_test_server()->GetURL("attacker.com", "/title1.html"));
-  GURL module_url(embedded_test_server()->GetURL(
-      "module.com", "/cross_site_document_blocking/html_import3.html"));
-  GURL victim_url(embedded_test_server()->GetURL("victim.com", victim_path));
-
-  EXPECT_TRUE(NavigateToURL(shell(), attacker_url));
-
-  // From a renderer process locked to attacker.com, load a HTML Import from
-  // module.com.  HTML Imports implementation allows attacker.com to issue
-  // requests on behalf of the module.com module - here attacker.com initiates a
-  // request for a victim.com resource.
-  const char kScriptTemplate[] = R"(
-      link = document.createElement('link');
-      link.rel = 'import';
-      link.href = $1;
-      link.onload = () => {
-          with(link.import.documentElement.appendChild(
-              link.import.createElement('script'))) {
-            crossOrigin = 'use-credentials';
-            src = $2
-          }
-      };
-      document.documentElement.appendChild(link);
-  )";
-  std::string script = JsReplace(kScriptTemplate, module_url, victim_url);
-  ASSERT_TRUE(ExecJs(shell(), script));
-
-  // Verify that attacker.com-controlled request for a victim.com resource uses
-  // CORS and has `Origin: http://attacker.com` request header (rather than
-  // `Origin: http://module.com`).
-  victim_response.WaitForRequest();
-  net::test_server::HttpRequest::HeaderMap headers =
-      victim_response.http_request()->headers;
-  ASSERT_TRUE(base::Contains(headers, "Origin"));
-  EXPECT_EQ(url::Origin::Create(attacker_url).Serialize(), headers["Origin"]);
-}
-
 // Test that receiving a commit with incorrect origin properly terminates the
 // renderer process.
 IN_PROC_BROWSER_TEST_F(SecurityExploitBrowserTest, MismatchedOriginOnCommit) {
diff --git a/content/browser/service_worker/embedded_worker_instance.cc b/content/browser/service_worker/embedded_worker_instance.cc
index 1247e54..0c7be3a9 100644
--- a/content/browser/service_worker/embedded_worker_instance.cc
+++ b/content/browser/service_worker/embedded_worker_instance.cc
@@ -1257,32 +1257,12 @@
 
   factory_bundle->set_bypass_redirect_checks(bypass_redirect_checks);
 
-  ContentBrowserClient::NonNetworkURLLoaderFactoryDeprecatedMap
-      non_network_uniquely_owned_factories;
   ContentBrowserClient::NonNetworkURLLoaderFactoryMap non_network_factories;
   non_network_factories[url::kDataScheme] = DataURLLoaderFactory::Create();
   GetContentClient()
       ->browser()
       ->RegisterNonNetworkSubresourceURLLoaderFactories(
-          rph->GetID(), MSG_ROUTING_NONE, &non_network_uniquely_owned_factories,
-          &non_network_factories);
-
-  for (auto& pair : non_network_uniquely_owned_factories) {
-    const std::string& scheme = pair.first;
-    std::unique_ptr<network::mojom::URLLoaderFactory> factory =
-        std::move(pair.second);
-
-    // To be safe, ignore schemes that aren't allowed to register service
-    // workers. We assume that importScripts and fetch() should fail on such
-    // schemes.
-    if (!base::Contains(GetServiceWorkerSchemes(), scheme))
-      continue;
-    mojo::PendingRemote<network::mojom::URLLoaderFactory> factory_remote;
-    mojo::MakeSelfOwnedReceiver(
-        std::move(factory), factory_remote.InitWithNewPipeAndPassReceiver());
-    factory_bundle->pending_scheme_specific_factories().emplace(
-        scheme, std::move(factory_remote));
-  }
+          rph->GetID(), MSG_ROUTING_NONE, &non_network_factories);
 
   for (auto& pair : non_network_factories) {
     const std::string& scheme = pair.first;
diff --git a/content/browser/web_package/signed_exchange_handler.cc b/content/browser/web_package/signed_exchange_handler.cc
index debde4c..66ab29d 100644
--- a/content/browser/web_package/signed_exchange_handler.cc
+++ b/content/browser/web_package/signed_exchange_handler.cc
@@ -80,9 +80,8 @@
   return version == SignedExchangeVersion::kB3;
 }
 
-using VerifyCallback = base::OnceCallback<void(int32_t,
-                                               const net::CertVerifyResult&,
-                                               const net::ct::CTVerifyResult&)>;
+using VerifyCallback =
+    base::OnceCallback<void(int32_t, const net::CertVerifyResult&)>;
 
 void VerifyCert(const scoped_refptr<net::X509Certificate>& certificate,
                 const GURL& url,
@@ -91,8 +90,7 @@
                 int frame_tree_node_id,
                 VerifyCallback callback) {
   VerifyCallback wrapped_callback = mojo::WrapCallbackWithDefaultInvokeIfNotRun(
-      std::move(callback), net::ERR_FAILED, net::CertVerifyResult(),
-      net::ct::CTVerifyResult());
+      std::move(callback), net::ERR_FAILED, net::CertVerifyResult());
 
   network::mojom::NetworkContext* network_context =
       g_network_context_for_testing;
@@ -597,14 +595,13 @@
 
 void SignedExchangeHandler::OnVerifyCert(
     int32_t error_code,
-    const net::CertVerifyResult& cv_result,
-    const net::ct::CTVerifyResult& ct_result) {
+    const net::CertVerifyResult& cv_result) {
   TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("loading"),
                "SignedExchangeHandler::OnCertVerifyComplete");
   // net::Error codes are negative, so we put - in front of it.
   base::UmaHistogramSparse(kHistogramCertVerificationResult, -error_code);
   UMA_HISTOGRAM_ENUMERATION(kHistogramCTVerificationResult,
-                            ct_result.policy_compliance,
+                            cv_result.policy_compliance,
                             net::ct::CTPolicyCompliance::CT_POLICY_COUNT);
 
   if (error_code != net::OK) {
@@ -614,7 +611,7 @@
       error_message = base::StringPrintf(
           "CT verification failed. result: %s, policy compliance: %d",
           net::ErrorToShortString(error_code).c_str(),
-          ct_result.policy_compliance);
+          cv_result.policy_compliance);
       result = SignedExchangeLoadResult::kCTVerificationError;
     } else {
       error_message =
@@ -690,7 +687,8 @@
   ssl_info.public_key_hashes = cv_result.public_key_hashes;
   ssl_info.ocsp_result = cv_result.ocsp_result;
   ssl_info.is_fatal_cert_error = net::IsCertStatusError(ssl_info.cert_status);
-  ssl_info.UpdateCertificateTransparencyInfo(ct_result);
+  ssl_info.signed_certificate_timestamps = cv_result.scts;
+  ssl_info.ct_policy_compliance = cv_result.policy_compliance;
 
   if (devtools_proxy_) {
     devtools_proxy_->OnSignedExchangeReceived(
diff --git a/content/browser/web_package/signed_exchange_handler.h b/content/browser/web_package/signed_exchange_handler.h
index d0fd6571..89d9340 100644
--- a/content/browser/web_package/signed_exchange_handler.h
+++ b/content/browser/web_package/signed_exchange_handler.h
@@ -143,9 +143,7 @@
       const net::X509Certificate* verified_cert);
   bool CheckOCSPStatus(const net::OCSPVerifyResult& ocsp_result);
 
-  void OnVerifyCert(int32_t error_code,
-                    const net::CertVerifyResult& cv_result,
-                    const net::ct::CTVerifyResult& ct_result);
+  void OnVerifyCert(int32_t error_code, const net::CertVerifyResult& cv_result);
   std::unique_ptr<net::SourceStream> CreateResponseBodyStream();
 
   const bool is_secure_transport_;
diff --git a/content/browser/web_package/signed_exchange_handler_unittest.cc b/content/browser/web_package/signed_exchange_handler_unittest.cc
index 4082c0c..36b72d9a 100644
--- a/content/browser/web_package/signed_exchange_handler_unittest.cc
+++ b/content/browser/web_package/signed_exchange_handler_unittest.cc
@@ -931,7 +931,6 @@
               net::CERT_STATUS_IS_EV);
   EXPECT_FALSE(resource_response().ssl_info->cert_status &
                net::CERT_STATUS_CT_COMPLIANCE_FAILED);
-  EXPECT_TRUE(resource_response().ssl_info->ct_policy_compliance_required);
   EXPECT_EQ(net::ct::CTPolicyCompliance::CT_POLICY_COMPLIES_VIA_SCTS,
             resource_response().ssl_info->ct_policy_compliance);
   ExpectHistogramValues(
@@ -973,7 +972,6 @@
                net::CERT_STATUS_IS_EV);
   EXPECT_TRUE(resource_response().ssl_info->cert_status &
               net::CERT_STATUS_CT_COMPLIANCE_FAILED);
-  EXPECT_FALSE(resource_response().ssl_info->ct_policy_compliance_required);
   EXPECT_EQ(net::ct::CTPolicyCompliance::CT_POLICY_NOT_ENOUGH_SCTS,
             resource_response().ssl_info->ct_policy_compliance);
   ExpectHistogramValues(
diff --git a/content/browser/worker_host/worker_script_fetch_initiator.cc b/content/browser/worker_host/worker_script_fetch_initiator.cc
index 79ca565..65ce7d7c 100644
--- a/content/browser/worker_host/worker_script_fetch_initiator.cc
+++ b/content/browser/worker_host/worker_script_fetch_initiator.cc
@@ -194,8 +194,6 @@
     RenderFrameHost* creator_render_frame_host) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
 
-  ContentBrowserClient::NonNetworkURLLoaderFactoryDeprecatedMap
-      non_network_uniquely_owned_factories;
   ContentBrowserClient::NonNetworkURLLoaderFactoryMap non_network_factories;
   non_network_factories.emplace(url::kDataScheme,
                                 DataURLLoaderFactory::Create());
@@ -231,8 +229,7 @@
       GetContentClient()
           ->browser()
           ->RegisterNonNetworkSubresourceURLLoaderFactories(
-              worker_process_id, MSG_ROUTING_NONE,
-              &non_network_uniquely_owned_factories, &non_network_factories);
+              worker_process_id, MSG_ROUTING_NONE, &non_network_factories);
       break;
   }
 
@@ -254,17 +251,6 @@
 
   auto factory_bundle =
       std::make_unique<blink::PendingURLLoaderFactoryBundle>();
-  for (auto& pair : non_network_uniquely_owned_factories) {
-    const std::string& scheme = pair.first;
-    std::unique_ptr<network::mojom::URLLoaderFactory> factory =
-        std::move(pair.second);
-
-    mojo::PendingRemote<network::mojom::URLLoaderFactory> factory_remote;
-    mojo::MakeSelfOwnedReceiver(
-        std::move(factory), factory_remote.InitWithNewPipeAndPassReceiver());
-    factory_bundle->pending_scheme_specific_factories().emplace(
-        scheme, std::move(factory_remote));
-  }
   for (auto& pair : non_network_factories) {
     const std::string& scheme = pair.first;
     mojo::PendingRemote<network::mojom::URLLoaderFactory>& pending_remote =
diff --git a/content/child/BUILD.gn b/content/child/BUILD.gn
index cbb83a2..4e36508 100644
--- a/content/child/BUILD.gn
+++ b/content/child/BUILD.gn
@@ -67,6 +67,7 @@
 
   deps = [
     "//base",
+    "//build/config/compiler:compiler_buildflags",
     "//cc/paint",
     "//components/discardable_memory/client",
     "//components/discardable_memory/public/mojom",
diff --git a/content/child/child_process.cc b/content/child/child_process.cc
index dbfebe1..3f43f0efd 100644
--- a/content/child/child_process.cc
+++ b/content/child/child_process.cc
@@ -16,6 +16,7 @@
 #include "base/threading/thread.h"
 #include "base/threading/thread_local.h"
 #include "build/build_config.h"
+#include "build/config/compiler/compiler_buildflags.h"
 #include "content/child/child_thread_impl.h"
 #include "content/common/android/cpu_time_metrics.h"
 #include "content/common/mojo_core_library_support.h"
@@ -135,7 +136,7 @@
     base::ThreadPoolInstance::Get()->Shutdown();
   }
 
-#if BUILDFLAG(CLANG_PROFILING_INSIDE_SANDBOX)
+#if BUILDFLAG(CLANG_PROFILING_INSIDE_SANDBOX) && BUILDFLAG(CLANG_PGO)
   // Flush the profiling data to disk. Doing this manually (vs relying on this
   // being done automatically when the process exits) will ensure that this data
   // doesn't get lost if the process is fast killed.
diff --git a/content/common/page_state_serialization.cc b/content/common/page_state_serialization.cc
index f88b601..0aca12c4e 100644
--- a/content/common/page_state_serialization.cc
+++ b/content/common/page_state_serialization.cc
@@ -54,12 +54,6 @@
       file_modification_time);
 }
 
-void AppendBlobToRequestBody(
-    const scoped_refptr<network::ResourceRequestBody>& request_body,
-    const std::string& uuid) {
-  request_body->AppendBlob(uuid);
-}
-
 //----------------------------------------------------------------------------
 
 void AppendReferencedFilesFromHttpBody(
@@ -290,10 +284,6 @@
   return GURL();
 }
 
-void WriteStdString(const std::string& s, SerializeObject* obj) {
-  obj->pickle.WriteString(s);
-}
-
 std::string ReadStdString(SerializeObject* obj) {
   std::string s;
   if (obj->iter.ReadString(&s))
@@ -416,10 +406,6 @@
         WriteInteger64(static_cast<int64_t>(element.length()), obj);
         WriteReal(element.expected_modification_time().ToDoubleT(), obj);
         break;
-      case network::mojom::DataElementType::kBlob:
-        WriteInteger(blink::WebHTTPBody::Element::kTypeBlob, obj);
-        WriteStdString(element.blob_uuid(), obj);
-        break;
       default:
         NOTREACHED();
         continue;
@@ -451,11 +437,11 @@
           request_body, file_path, file_start, file_length,
           base::Time::FromDoubleT(file_modification_time));
     } else if (type == blink::WebHTTPBody::Element::kTypeBlob) {
+      // Skip obsolete blob values.
       if (obj->version >= 16) {
-        std::string blob_uuid = ReadStdString(obj);
-        AppendBlobToRequestBody(request_body, blob_uuid);
+        ReadStdString(obj);
       } else {
-        ReadGURL(obj);  // Skip the obsolete blob url value.
+        ReadGURL(obj);
       }
     }
   }
@@ -691,9 +677,6 @@
         data_element->set_file(std::move(file));
         break;
       }
-      case network::mojom::DataElementType::kBlob:
-        data_element->set_blob_uuid(element.blob_uuid());
-        break;
       case network::mojom::DataElementType::kDataPipe:
         NOTIMPLEMENTED();
         break;
@@ -727,7 +710,7 @@
         break;
       }
       case blink::mojom::Element::Tag::BLOB_UUID:
-        AppendBlobToRequestBody(request_body, element->get_blob_uuid());
+        // No longer supported.
         break;
       case blink::mojom::Element::Tag::DEPRECATED_FILE_SYSTEM_FILE:
         // No longer supported.
diff --git a/content/common/page_state_serialization_unittest.cc b/content/common/page_state_serialization_unittest.cc
index 849f85f..d79ea9c8 100644
--- a/content/common/page_state_serialization_unittest.cc
+++ b/content/common/page_state_serialization_unittest.cc
@@ -50,7 +50,6 @@
   EXPECT_EQ(expected.length(), actual.length());
   EXPECT_EQ(expected.expected_modification_time(),
             actual.expected_modification_time());
-  EXPECT_EQ(expected.blob_uuid(), actual.blob_uuid());
 }
 
 template <>
@@ -686,8 +685,6 @@
   std::string test_body("foo");
   http_body.request_body->AppendBytes(test_body.data(), test_body.size());
 
-  http_body.request_body->AppendBlob("some_uuid");
-
   base::FilePath path(FILE_PATH_LITERAL("file.txt"));
   http_body.request_body->AppendFileRange(base::FilePath(path), 100, 1024,
                                           base::Time::FromDoubleT(9999.0));
diff --git a/content/public/browser/accessibility_tree_formatter.h b/content/public/browser/accessibility_tree_formatter.h
index 5094e23..b772b16 100644
--- a/content/public/browser/accessibility_tree_formatter.h
+++ b/content/public/browser/accessibility_tree_formatter.h
@@ -18,6 +18,7 @@
 #include "base/strings/utf_string_conversions.h"
 #include "base/values.h"
 #include "content/common/content_export.h"
+#include "ui/accessibility/platform/inspect/inspect.h"
 #include "ui/gfx/native_widget_types.h"
 
 namespace base {
@@ -55,6 +56,8 @@
 class CONTENT_EXPORT AccessibilityTreeFormatter
     : public AccessibilityTestExpectationsLocator {
  public:
+  using AXTreeSelector = ui::AXTreeSelector;
+
   // A single property filter specification. Represents a parsed string of the
   // filter_str;match_str format, where `filter_str` has
   // :line_num_0,...:line_num_N format, `match_str` has format of
@@ -97,29 +100,6 @@
         : property(property), pattern(pattern) {}
   };
 
-  // Tree selector used to identify an accessible tree to traverse, it can be
-  // built by a pre-defined tree type like Chromium to indicate that Chromium
-  // browser tree should be traversed and/or by a string pattern which matches
-  // an accessible name of a root of some accessible subtree.
-  struct TreeSelector {
-    enum Type {
-      None = 0,
-      ActiveTab = 1 << 0,
-      Chrome = 1 << 1,
-      Chromium = 1 << 2,
-      Firefox = 1 << 3,
-      Safari = 1 << 4,
-    };
-    int types;
-    std::string pattern;
-
-    TreeSelector() : types(None) {}
-    TreeSelector(int types, const std::string& pattern)
-        : types(types), pattern(pattern) {}
-
-    bool empty() const { return types == None && pattern.empty(); }
-  };
-
   // Create the appropriate native subclass of AccessibilityTreeFormatter.
   static std::unique_ptr<AccessibilityTreeFormatter> Create();
 
@@ -156,7 +136,7 @@
   // Build an accessibility tree for an application with a name matching the
   // given pattern.
   virtual std::unique_ptr<base::DictionaryValue>
-  BuildAccessibilityTreeForSelector(const TreeSelector&) = 0;
+  BuildAccessibilityTreeForSelector(const AXTreeSelector&) = 0;
 
   // Returns a filtered accesibility tree using the current property and node
   // filters.
diff --git a/content/public/browser/content_browser_client.cc b/content/public/browser/content_browser_client.cc
index a70c8d23..c5620c9a 100644
--- a/content/public/browser/content_browser_client.cc
+++ b/content/public/browser/content_browser_client.cc
@@ -755,7 +755,6 @@
 void ContentBrowserClient::RegisterNonNetworkNavigationURLLoaderFactories(
     int frame_tree_node_id,
     base::UkmSourceId ukm_source_id,
-    NonNetworkURLLoaderFactoryDeprecatedMap* uniquely_owned_factories,
     NonNetworkURLLoaderFactoryMap* factories) {}
 
 void ContentBrowserClient::
@@ -771,7 +770,6 @@
 void ContentBrowserClient::RegisterNonNetworkSubresourceURLLoaderFactories(
     int render_process_id,
     int render_frame_id,
-    NonNetworkURLLoaderFactoryDeprecatedMap* uniquely_owned_factories,
     NonNetworkURLLoaderFactoryMap* factories) {}
 
 bool ContentBrowserClient::WillCreateURLLoaderFactory(
diff --git a/content/public/browser/content_browser_client.h b/content/public/browser/content_browser_client.h
index e6f8592..56e30e0 100644
--- a/content/public/browser/content_browser_client.h
+++ b/content/public/browser/content_browser_client.h
@@ -1241,21 +1241,12 @@
   //
   // |ukm_source_id| can be used to record UKM events associated with the
   // navigation.
-  //
-  // TODO(lukasza): https://crbug.com/1106995: Remove
-  // NonNetworkURLLoaderFactoryDeprecatedMap type alias (and parameters in
-  // methods below that use this type).  This type encourages incorrect lifetime
-  // of factories (the factories and their clones need to be fully owned by
-  // their receivers).
-  using NonNetworkURLLoaderFactoryDeprecatedMap =
-      std::map<std::string, std::unique_ptr<network::mojom::URLLoaderFactory>>;
   using NonNetworkURLLoaderFactoryMap =
       std::map<std::string,
                mojo::PendingRemote<network::mojom::URLLoaderFactory>>;
   virtual void RegisterNonNetworkNavigationURLLoaderFactories(
       int frame_tree_node_id,
       base::UkmSourceId ukm_source_id,
-      NonNetworkURLLoaderFactoryDeprecatedMap* uniquely_owned_factories,
       NonNetworkURLLoaderFactoryMap* factories);
 
   // Allows the embedder to register per-scheme URLLoaderFactory
@@ -1285,14 +1276,9 @@
   //   -downloads
   //   -service worker script when starting a service worker. In that case, the
   //    frame id will be MSG_ROUTING_NONE
-  //
-  // TODO(lukasza): https://crbug.com/1106995: Deprecate and remove the
-  // |uniquely_owned_factories| parameter - it results in incorrect factory
-  // lifetimes.
   virtual void RegisterNonNetworkSubresourceURLLoaderFactories(
       int render_process_id,
       int render_frame_id,
-      NonNetworkURLLoaderFactoryDeprecatedMap* uniquely_owned_factories,
       NonNetworkURLLoaderFactoryMap* factories);
 
   // Describes the purpose of the factory in WillCreateURLLoaderFactory().
diff --git a/content/public/common/content_features.cc b/content/public/common/content_features.cc
index ce6dd47f..0247ea6 100644
--- a/content/public/common/content_features.cc
+++ b/content/public/common/content_features.cc
@@ -852,11 +852,6 @@
 const base::Feature kWebPaymentsMinimalUI{"WebPaymentsMinimalUI",
                                           base::FEATURE_DISABLED_BY_DEFAULT};
 
-// Makes WebRTC use ECDSA certs by default (i.e., when no cert type was
-// specified in JS).
-const base::Feature kWebRtcEcdsaDefault{"WebRTC-EnableWebRtcEcdsa",
-                                        base::FEATURE_ENABLED_BY_DEFAULT};
-
 // Use GpuMemoryBuffer backed VideoFrames in media streams.
 const base::Feature kWebRtcUseGpuMemoryBufferVideoFrames{
     "WebRTC-UseGpuMemoryBufferVideoFrames", base::FEATURE_ENABLED_BY_DEFAULT};
diff --git a/content/public/common/content_features.h b/content/public/common/content_features.h
index 8a6d4cb..6b63a6e 100644
--- a/content/public/common/content_features.h
+++ b/content/public/common/content_features.h
@@ -172,7 +172,6 @@
 CONTENT_EXPORT extern const base::Feature kWebOtpBackend;
 CONTENT_EXPORT extern const base::Feature kWebPayments;
 CONTENT_EXPORT extern const base::Feature kWebPaymentsMinimalUI;
-CONTENT_EXPORT extern const base::Feature kWebRtcEcdsaDefault;
 CONTENT_EXPORT extern const base::Feature kWebRtcUseGpuMemoryBufferVideoFrames;
 CONTENT_EXPORT extern const base::Feature kWebUIReportOnlyTrustedTypes;
 CONTENT_EXPORT extern const base::Feature kWebUsb;
diff --git a/content/renderer/loader/web_url_request_util.cc b/content/renderer/loader/web_url_request_util.cc
index 7d0c124f..7c3a327 100644
--- a/content/renderer/loader/web_url_request_util.cc
+++ b/content/renderer/loader/web_url_request_util.cc
@@ -137,9 +137,6 @@
             modification_time);
         break;
       }
-      case network::mojom::DataElementType::kBlob:
-          http_body.AppendBlob(WebString::FromASCII(element.blob_uuid()));
-        break;
       case network::mojom::DataElementType::kDataPipe: {
         http_body.AppendDataPipe(element.CloneDataPipeGetter());
         break;
diff --git a/content/test/data/accessibility/event/style-changed-expected-uia-win.txt b/content/test/data/accessibility/event/style-changed-expected-uia-win.txt
index d10c369..93f1385 100644
--- a/content/test/data/accessibility/event/style-changed-expected-uia-win.txt
+++ b/content/test/data/accessibility/event/style-changed-expected-uia-win.txt
@@ -1,10 +1 @@
 Text_TextChanged on role=document
-Text_TextChanged on role=document
-Text_TextChanged on role=document
-Text_TextChanged on role=document
-Text_TextChanged on role=document
-Text_TextChanged on role=document
-Text_TextChanged on role=document
-Text_TextChanged on role=document
-Text_TextChanged on role=document
-Text_TextChanged on role=document
diff --git a/content/test/gpu/gpu_tests/webgl_conformance_integration_test.py b/content/test/gpu/gpu_tests/webgl_conformance_integration_test.py
index 3f8180f..6de2eef 100644
--- a/content/test/gpu/gpu_tests/webgl_conformance_integration_test.py
+++ b/content/test/gpu/gpu_tests/webgl_conformance_integration_test.py
@@ -359,9 +359,6 @@
         # TODO(http://crbug.com/832952): Remove this when WebXR spec is more
         # stable and setCompatibleXRDevice is part of the conformance test.
         '--disable-blink-features=WebXR',
-        # TODO(crbug.com/830901): see whether disabling this feature
-        # makes the WebGL video upload tests reliable again.
-        '--disable-features=UseSurfaceLayerForVideo',
     ])
     # Note that the overriding of the default --js-flags probably
     # won't interact well with RestartBrowserIfNecessaryWithArgs, but
diff --git a/content/test/gpu/measure_power_intel.py b/content/test/gpu/measure_power_intel.py
index 03288636..e4e4abda 100644
--- a/content/test/gpu/measure_power_intel.py
+++ b/content/test/gpu/measure_power_intel.py
@@ -22,7 +22,7 @@
 
 python measure_power_intel.py --browser=canary --duration=10 --delay=5
   --verbose --url="https://www.youtube.com/watch?v=0XdS37Re1XQ"
-  --extra-browser-args="--no-sandbox --disable-features=UseSurfaceLayerForVideo"
+  --extra-browser-args="--no-sandbox"
 
 It is recommended to test with optimized builds of Chromium e.g. these GN args:
 
diff --git a/device/fido/cable/v2_constants.h b/device/fido/cable/v2_constants.h
index 3d2dddf..733b93d 100644
--- a/device/fido/cable/v2_constants.h
+++ b/device/fido/cable/v2_constants.h
@@ -34,9 +34,6 @@
 // kCompressedPublicKeySize is the size of a compressed X9.62 public key.
 constexpr size_t kCompressedPublicKeySize =
     /* type byte */ 1 + /* field element */ (256 / 8);
-// kQRDataSize is the size of the (unencoded) QR payload. It's a compressed
-// public key followed by the QR secret.
-constexpr size_t kQRDataSize = kCompressedPublicKeySize + kQRSecretSize;
 
 }  // namespace cablev2
 }  // namespace device
diff --git a/device/fido/cable/v2_handshake.cc b/device/fido/cable/v2_handshake.cc
index b2be4ff..b9946af 100644
--- a/device/fido/cable/v2_handshake.cc
+++ b/device/fido/cable/v2_handshake.cc
@@ -183,6 +183,126 @@
 
 }  // namespace eid
 
+namespace qr {
+
+constexpr char kPrefix[] = "fido://";
+
+// DecompressPublicKey converts a compressed public key (from a scanned QR
+// code) into a standard, uncompressed one.
+static base::Optional<std::array<uint8_t, device::kP256X962Length>>
+DecompressPublicKey(base::span<const uint8_t> compressed_public_key) {
+  if (compressed_public_key.size() !=
+      device::cablev2::kCompressedPublicKeySize) {
+    return base::nullopt;
+  }
+
+  bssl::UniquePtr<EC_GROUP> p256(
+      EC_GROUP_new_by_curve_name(NID_X9_62_prime256v1));
+  bssl::UniquePtr<EC_POINT> point(EC_POINT_new(p256.get()));
+  if (!EC_POINT_oct2point(p256.get(), point.get(), compressed_public_key.data(),
+                          compressed_public_key.size(), /*ctx=*/nullptr)) {
+    return base::nullopt;
+  }
+  std::array<uint8_t, device::kP256X962Length> ret;
+  CHECK_EQ(
+      ret.size(),
+      EC_POINT_point2oct(p256.get(), point.get(), POINT_CONVERSION_UNCOMPRESSED,
+                         ret.data(), ret.size(), /*ctx=*/nullptr));
+  return ret;
+}
+
+static std::array<uint8_t, device::cablev2::kCompressedPublicKeySize>
+SeedToCompressedPublicKey(base::span<const uint8_t, 32> seed) {
+  bssl::UniquePtr<EC_GROUP> p256(
+      EC_GROUP_new_by_curve_name(NID_X9_62_prime256v1));
+  bssl::UniquePtr<EC_KEY> key(
+      EC_KEY_derive_from_secret(p256.get(), seed.data(), seed.size()));
+  const EC_POINT* public_key = EC_KEY_get0_public_key(key.get());
+
+  std::array<uint8_t, device::cablev2::kCompressedPublicKeySize> ret;
+  CHECK_EQ(ret.size(), EC_POINT_point2oct(
+                           p256.get(), public_key, POINT_CONVERSION_COMPRESSED,
+                           ret.data(), ret.size(), /*ctx=*/nullptr));
+  return ret;
+}
+
+// static
+base::Optional<Components> Parse(const std::string& qr_url) {
+  if (qr_url.find(kPrefix) != 0) {
+    return base::nullopt;
+  }
+
+  base::StringPiece qr_url_base64(qr_url);
+  qr_url_base64 = qr_url_base64.substr(sizeof(kPrefix) - 1);
+  std::string qr_data_str;
+  if (!base::Base64UrlDecode(qr_url_base64,
+                             base::Base64UrlDecodePolicy::DISALLOW_PADDING,
+                             &qr_data_str)) {
+    return base::nullopt;
+  }
+
+  base::Optional<cbor::Value> qr_contents =
+      cbor::Reader::Read(base::span<const uint8_t>(
+          reinterpret_cast<const uint8_t*>(qr_data_str.data()),
+          qr_data_str.size()));
+  if (!qr_contents || !qr_contents->is_map()) {
+    return base::nullopt;
+  }
+  const cbor::Value::MapValue& qr_contents_map(qr_contents->GetMap());
+
+  base::span<const uint8_t> values[2];
+  for (size_t i = 0; i < base::size(values); i++) {
+    const cbor::Value::MapValue::const_iterator it =
+        qr_contents_map.find(cbor::Value(static_cast<int>(i)));
+    if (it == qr_contents_map.end() || !it->second.is_bytestring()) {
+      return base::nullopt;
+    }
+    values[i] = it->second.GetBytestring();
+  }
+
+  base::span<const uint8_t> compressed_public_key = values[0];
+  base::span<const uint8_t> qr_secret = values[1];
+
+  Components ret;
+  if (qr_secret.size() != ret.secret.size()) {
+    return base::nullopt;
+  }
+  std::copy(qr_secret.begin(), qr_secret.end(), ret.secret.begin());
+
+  base::Optional<std::array<uint8_t, device::kP256X962Length>> peer_identity =
+      DecompressPublicKey(compressed_public_key);
+  if (!peer_identity) {
+    FIDO_LOG(ERROR) << "Invalid compressed public key in QR data";
+    return base::nullopt;
+  }
+
+  ret.peer_identity = *peer_identity;
+  return ret;
+}
+
+std::string Encode(base::span<const uint8_t, kQRKeySize> qr_key) {
+  cbor::Value::MapValue qr_contents;
+  qr_contents.emplace(
+      0, SeedToCompressedPublicKey(
+             base::span<const uint8_t, device::cablev2::kQRSeedSize>(
+                 qr_key.data(), device::cablev2::kQRSeedSize)));
+
+  qr_contents.emplace(1, qr_key.subspan(device::cablev2::kQRSeedSize));
+
+  const base::Optional<std::vector<uint8_t>> qr_data =
+      cbor::Writer::Write(cbor::Value(std::move(qr_contents)));
+
+  std::string base64_qr_data;
+  base::Base64UrlEncode(
+      base::StringPiece(reinterpret_cast<const char*>(qr_data->data()),
+                        qr_data->size()),
+      base::Base64UrlEncodePolicy::OMIT_PADDING, &base64_qr_data);
+
+  return std::string(kPrefix) + base64_qr_data;
+}
+
+}  // namespace qr
+
 namespace internal {
 
 void Derive(uint8_t* out,
diff --git a/device/fido/cable/v2_handshake.h b/device/fido/cable/v2_handshake.h
index 3e66a497..1bdbe1fb 100644
--- a/device/fido/cable/v2_handshake.h
+++ b/device/fido/cable/v2_handshake.h
@@ -116,6 +116,23 @@
 
 }  // namespace eid
 
+namespace qr {
+
+// Components contains the parsed elements of a QR code.
+struct COMPONENT_EXPORT(DEVICE_FIDO) Components {
+  std::array<uint8_t, device::kP256X962Length> peer_identity;
+  std::array<uint8_t, 16> secret;
+};
+
+COMPONENT_EXPORT(DEVICE_FIDO)
+base::Optional<Components> Parse(const std::string& qr_url);
+
+// Encode returns the contents of a QR code that represents |qr_key|.
+COMPONENT_EXPORT(DEVICE_FIDO)
+std::string Encode(base::span<const uint8_t, kQRKeySize> qr_key);
+
+}  // namespace qr
+
 // DerivedValueType enumerates the different types of values that might be
 // derived in caBLEv2 from some secret. The values this this enum are protocol
 // constants and thus must not change over time.
diff --git a/device/fido/cable/v2_handshake_unittest.cc b/device/fido/cable/v2_handshake_unittest.cc
index 6a146a0..75c2e38f 100644
--- a/device/fido/cable/v2_handshake_unittest.cc
+++ b/device/fido/cable/v2_handshake_unittest.cc
@@ -46,6 +46,24 @@
   EXPECT_FALSE(eid::IsValid(eid));
 }
 
+TEST(CableV2Encoding, QRs) {
+  std::array<uint8_t, kQRKeySize> qr_key;
+  crypto::RandBytes(qr_key);
+  std::string url = qr::Encode(qr_key);
+  EXPECT_LE(url.size(), 81u) << "QR code doesn't fit into version five";
+  const base::Optional<qr::Components> decoded = qr::Parse(url);
+  ASSERT_TRUE(decoded.has_value());
+  static_assert(EXTENT(qr_key) >= EXTENT(decoded->secret), "");
+  EXPECT_EQ(memcmp(decoded->secret.data(),
+                   &qr_key[qr_key.size() - decoded->secret.size()],
+                   decoded->secret.size()),
+            0);
+
+  url[0] ^= 4;
+  EXPECT_FALSE(qr::Parse(url));
+  EXPECT_FALSE(qr::Parse("nonsense"));
+}
+
 TEST(CableV2Encoding, PaddedCBOR) {
   cbor::Value::MapValue map;
   base::Optional<std::vector<uint8_t>> encoded =
diff --git a/docs/README.md b/docs/README.md
index effb7d8b..133d37e3 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -253,6 +253,11 @@
     on top of DirectX
 *   [Windows Split DLLs](windows_split_dll.md) - Splitting `chrome.dll` into
     multiple dlls to work around toolchain limitations on Windows.
+*   [Windows Native Window Occlusion Tracking](windows_native_window_occlusion_tracking.md)
+*   [Windows PWA Integration](windows_pwa_integration.md) - Integration with 
+    Progressive Web Apps on Windows
+*   [Windows Shortcut and Taskbar Handling](windows_shortcut_and_taskbar_handling.md)
+*   [Windows Virtual Desktop Integration](windows_virtual_desktop_handling.md)
 
 ### Misc Android-Specific Docs
 *   [Google Play Services in Chrome for Android](google_play_services.md)
diff --git a/extensions/common/file_util.cc b/extensions/common/file_util.cc
index 2e5410b..d4b82325 100644
--- a/extensions/common/file_util.cc
+++ b/extensions/common/file_util.cc
@@ -266,7 +266,7 @@
   std::unique_ptr<base::Value> root(deserializer.Deserialize(nullptr, error));
   if (!root.get()) {
     if (error->empty()) {
-      // If |error| is empty, than the file could not be read.
+      // If |error| is empty, then the file could not be read.
       // It would be cleaner to have the JSON reader give a specific error
       // in this case, but other code tests for a file error with
       // error->empty().  For now, be consistent.
diff --git a/extensions/shell/browser/shell_content_browser_client.cc b/extensions/shell/browser/shell_content_browser_client.cc
index a821487..aafab93 100644
--- a/extensions/shell/browser/shell_content_browser_client.cc
+++ b/extensions/shell/browser/shell_content_browser_client.cc
@@ -238,9 +238,7 @@
 void ShellContentBrowserClient::RegisterNonNetworkNavigationURLLoaderFactories(
     int frame_tree_node_id,
     base::UkmSourceId ukm_source_id,
-    NonNetworkURLLoaderFactoryDeprecatedMap* uniquely_owned_factories,
     NonNetworkURLLoaderFactoryMap* factories) {
-  DCHECK(uniquely_owned_factories);
   DCHECK(factories);
 
   content::WebContents* web_contents =
@@ -281,9 +279,7 @@
 void ShellContentBrowserClient::RegisterNonNetworkSubresourceURLLoaderFactories(
     int render_process_id,
     int render_frame_id,
-    NonNetworkURLLoaderFactoryDeprecatedMap* uniquely_owned_factories,
     NonNetworkURLLoaderFactoryMap* factories) {
-  DCHECK(uniquely_owned_factories);
   DCHECK(factories);
 
   factories->emplace(extensions::kExtensionScheme,
diff --git a/extensions/shell/browser/shell_content_browser_client.h b/extensions/shell/browser/shell_content_browser_client.h
index 30a3bc4..3eb41a08 100644
--- a/extensions/shell/browser/shell_content_browser_client.h
+++ b/extensions/shell/browser/shell_content_browser_client.h
@@ -68,7 +68,6 @@
   void RegisterNonNetworkNavigationURLLoaderFactories(
       int frame_tree_node_id,
       base::UkmSourceId ukm_source_id,
-      NonNetworkURLLoaderFactoryDeprecatedMap* uniquely_owned_factories,
       NonNetworkURLLoaderFactoryMap* factories) override;
   void RegisterNonNetworkWorkerMainResourceURLLoaderFactories(
       content::BrowserContext* browser_context,
@@ -79,7 +78,6 @@
   void RegisterNonNetworkSubresourceURLLoaderFactories(
       int render_process_id,
       int render_frame_id,
-      NonNetworkURLLoaderFactoryDeprecatedMap* uniquely_owned_factories,
       NonNetworkURLLoaderFactoryMap* factories) override;
   bool WillCreateURLLoaderFactory(
       content::BrowserContext* browser_context,
diff --git a/fuchsia/engine/browser/accessibility_bridge.cc b/fuchsia/engine/browser/accessibility_bridge.cc
index 16bd613f..c4c5d1e 100644
--- a/fuchsia/engine/browser/accessibility_bridge.cc
+++ b/fuchsia/engine/browser/accessibility_bridge.cc
@@ -47,13 +47,7 @@
 }
 
 AccessibilityBridge::~AccessibilityBridge() {
-  // Acknowledge to the SemanticsManager if any actions have not been handled
-  // upon destruction time.
-  for (auto& callback : pending_hit_test_callbacks_) {
-    fuchsia::accessibility::semantics::Hit hit;
-    hit.set_node_id(kSemanticNodeRootId);
-    callback.second(std::move(hit));
-  }
+  InterruptPendingActions();
 }
 
 void AccessibilityBridge::TryCommit() {
@@ -117,6 +111,11 @@
 
 void AccessibilityBridge::AccessibilityEventReceived(
     const content::AXEventNotificationDetails& details) {
+  if (!enable_semantic_updates_) {
+    // No need to process events if Fuchsia is not receiving them.
+    return;
+  }
+
   // Updates to AXTree must be applied first.
   for (const ui::AXTreeUpdate& update : details.updates) {
     if (!ax_tree_.Unserialize(update)) {
@@ -201,18 +200,29 @@
 void AccessibilityBridge::OnSemanticsModeChanged(
     bool updates_enabled,
     OnSemanticsModeChangedCallback callback) {
+  // TODO(https://crbug.com/1134591): Enabling / disabling semantics can lead to
+  // race conditions.
+  if (enable_semantic_updates_ == updates_enabled)
+    return callback();
+
+  enable_semantic_updates_ = updates_enabled;
   if (updates_enabled) {
-    // The first call to AccessibilityEventReceived after this call will be the
-    // entire semantic tree.
+    // The first call to AccessibilityEventReceived after this call will be
+    // the entire semantic tree.
     web_contents_->EnableWebContentsOnlyAccessibilityMode();
   } else {
-    // The SemanticsManager will clear all state in this case, which is mirrored
-    // here.
+    // The SemanticsManager will clear all state in this case, which is
+    // mirrored here.
+    ui::AXMode mode = web_contents_->GetAccessibilityMode();
+    mode.set_mode(ui::AXMode::kWebContents, false);
+    web_contents_->SetAccessibilityMode(mode);
     to_send_.clear();
     commit_inflight_ = false;
+    ax_tree_.Destroy();
+    InterruptPendingActions();
   }
 
-  // Notify the SemanticsManager that semantics mode has been updated.
+  // Notify the SemanticsManager that this request was handled.
   callback();
 }
 
@@ -269,3 +279,13 @@
   }
   TryCommit();
 }
+
+void AccessibilityBridge::InterruptPendingActions() {
+  // Acknowledge to the SemanticsManager if any actions have not been handled
+  // upon destruction time or when semantic updates have been disabled.
+  for (auto& callback : pending_hit_test_callbacks_) {
+    fuchsia::accessibility::semantics::Hit hit;
+    callback.second(std::move(hit));
+  }
+  pending_hit_test_callbacks_.clear();
+}
diff --git a/fuchsia/engine/browser/accessibility_bridge.h b/fuchsia/engine/browser/accessibility_bridge.h
index 35669c5..7acebb9 100644
--- a/fuchsia/engine/browser/accessibility_bridge.h
+++ b/fuchsia/engine/browser/accessibility_bridge.h
@@ -91,6 +91,10 @@
   // accessibility bridge.
   void DeleteSubtree(ui::AXNode* node);
 
+  // Interrupts actions that are waiting for a response. This is invoked during
+  // destruction time or when semantic updates have been disabled.
+  void InterruptPendingActions();
+
   // content::WebContentsObserver implementation.
   void AccessibilityEventReceived(
       const content::AXEventNotificationDetails& details) override;
@@ -118,6 +122,9 @@
   content::WebContents* web_contents_;
   ui::AXSerializableTree ax_tree_;
 
+  // Whether semantic updates are enabled.
+  bool enable_semantic_updates_ = false;
+
   // Cache for pending data to be sent to the Semantic Tree between commits.
   std::vector<SemanticUpdateOrDelete> to_send_;
   bool commit_inflight_ = false;
diff --git a/fuchsia/engine/browser/accessibility_bridge_browsertest.cc b/fuchsia/engine/browser/accessibility_bridge_browsertest.cc
index 87d73b8..ff7bb11 100644
--- a/fuchsia/engine/browser/accessibility_bridge_browsertest.cc
+++ b/fuchsia/engine/browser/accessibility_bridge_browsertest.cc
@@ -31,7 +31,7 @@
 const char kNodeName[] = "last node";
 const char kParagraphName[] = "a third paragraph";
 const char kOffscreenNodeName[] = "offscreen node";
-const size_t kPage1NodeCount = 9;
+const size_t kPage1NodeCount = 29;
 const size_t kPage2NodeCount = 190;
 const size_t kInitialRangeValue = 51;
 const size_t kStepSize = 3;
@@ -81,6 +81,14 @@
     semantics_manager_.SetSemanticsModeEnabled(true);
   }
 
+  void LoadPage(base::StringPiece url, base::StringPiece page_title) {
+    GURL page_url(embedded_test_server()->GetURL(std::string(url)));
+    ASSERT_TRUE(cr_fuchsia::LoadUrlAndExpectResponse(
+        navigation_controller_.get(), fuchsia::web::LoadUrlParams(),
+        page_url.spec()));
+    navigation_listener_.RunUntilUrlAndTitleEquals(page_url, page_title);
+  }
+
  protected:
   fuchsia::web::FramePtr frame_ptr_;
   FrameImpl* frame_impl_;
@@ -106,11 +114,7 @@
 }
 
 IN_PROC_BROWSER_TEST_F(AccessibilityBridgeTest, CorrectDataSent) {
-  GURL page_url(embedded_test_server()->GetURL(kPage1Path));
-  ASSERT_TRUE(cr_fuchsia::LoadUrlAndExpectResponse(
-      navigation_controller_.get(), fuchsia::web::LoadUrlParams(),
-      page_url.spec()));
-  navigation_listener_.RunUntilUrlAndTitleEquals(page_url, kPage1Title);
+  LoadPage(kPage1Path, kPage1Title);
 
   // Check that the data values are correct in the FakeSemanticTree.
   // TODO(fxb/18796): Test more fields once Chrome to Fuchsia conversions are
@@ -128,11 +132,7 @@
 // maximum, as set on the Fuchsia side. Check that all nodes are received by the
 // Semantic Tree when batching is performed.
 IN_PROC_BROWSER_TEST_F(AccessibilityBridgeTest, DataSentWithBatching) {
-  GURL page_url(embedded_test_server()->GetURL(kPage2Path));
-  ASSERT_TRUE(cr_fuchsia::LoadUrlAndExpectResponse(
-      navigation_controller_.get(), fuchsia::web::LoadUrlParams(),
-      page_url.spec()));
-  navigation_listener_.RunUntilUrlAndTitleEquals(page_url, kPage2Title);
+  LoadPage(kPage2Path, kPage2Title);
 
   // Run until we expect more than a batch's worth of nodes to be present.
   semantics_manager_.semantic_tree()->RunUntilNodeCountAtLeast(kPage2NodeCount);
@@ -142,11 +142,7 @@
 // Check that semantics information is correctly sent when navigating from page
 // to page.
 IN_PROC_BROWSER_TEST_F(AccessibilityBridgeTest, TestNavigation) {
-  GURL page_url1(embedded_test_server()->GetURL(kPage1Path));
-  ASSERT_TRUE(cr_fuchsia::LoadUrlAndExpectResponse(
-      navigation_controller_.get(), fuchsia::web::LoadUrlParams(),
-      page_url1.spec()));
-  navigation_listener_.RunUntilUrlAndTitleEquals(page_url1, kPage1Title);
+  LoadPage(kPage1Path, kPage1Title);
 
   semantics_manager_.semantic_tree()->RunUntilNodeCountAtLeast(kPage1NodeCount);
   EXPECT_TRUE(
@@ -156,10 +152,7 @@
   EXPECT_TRUE(
       semantics_manager_.semantic_tree()->GetNodeFromLabel(kParagraphName));
 
-  GURL page_url2(embedded_test_server()->GetURL(kPage2Path));
-  ASSERT_TRUE(cr_fuchsia::LoadUrlAndExpectResponse(
-      navigation_controller_.get(), fuchsia::web::LoadUrlParams(),
-      page_url2.spec()));
+  LoadPage(kPage2Path, kPage2Title);
 
   semantics_manager_.semantic_tree()->RunUntilNodeCountAtLeast(kPage2NodeCount);
   EXPECT_TRUE(
@@ -176,11 +169,7 @@
 // Checks that the correct node ID is returned when performing hit testing.
 // TODO(https://crbug.com/1050049): Re-enable once flake is fixed.
 IN_PROC_BROWSER_TEST_F(AccessibilityBridgeTest, DISABLED_HitTest) {
-  GURL page_url(embedded_test_server()->GetURL(kPage1Path));
-  ASSERT_TRUE(cr_fuchsia::LoadUrlAndExpectResponse(
-      navigation_controller_.get(), fuchsia::web::LoadUrlParams(),
-      page_url.spec()));
-  navigation_listener_.RunUntilUrlAndTitleEquals(page_url, kPage1Title);
+  LoadPage(kPage1Path, kPage1Title);
 
   fuchsia::accessibility::semantics::Node* hit_test_node =
       semantics_manager_.semantic_tree()->GetNodeFromLabel(kParagraphName);
@@ -203,11 +192,8 @@
 }
 
 IN_PROC_BROWSER_TEST_F(AccessibilityBridgeTest, PerformDefaultAction) {
-  GURL page_url(embedded_test_server()->GetURL(kPage1Path));
-  ASSERT_TRUE(cr_fuchsia::LoadUrlAndExpectResponse(
-      navigation_controller_.get(), fuchsia::web::LoadUrlParams(),
-      page_url.spec()));
-  navigation_listener_.RunUntilUrlAndTitleEquals(page_url, kPage1Title);
+  LoadPage(kPage1Path, kPage1Title);
+
   semantics_manager_.semantic_tree()->RunUntilNodeCountAtLeast(kPage1NodeCount);
 
   fuchsia::accessibility::semantics::Node* button1 =
@@ -229,11 +215,8 @@
 }
 
 IN_PROC_BROWSER_TEST_F(AccessibilityBridgeTest, PerformUnsupportedAction) {
-  GURL page_url(embedded_test_server()->GetURL(kPage1Path));
-  ASSERT_TRUE(cr_fuchsia::LoadUrlAndExpectResponse(
-      navigation_controller_.get(), fuchsia::web::LoadUrlParams(),
-      page_url.spec()));
-  navigation_listener_.RunUntilUrlAndTitleEquals(page_url, kPage1Title);
+  LoadPage(kPage1Path, kPage1Title);
+
   semantics_manager_.semantic_tree()->RunUntilNodeCountAtLeast(kPage1NodeCount);
 
   fuchsia::accessibility::semantics::Node* button1 =
@@ -271,11 +254,8 @@
   constexpr int kScreenHeight = 640;
   gfx::Rect screen_bounds(kScreenWidth, kScreenHeight);
 
-  GURL page_url(embedded_test_server()->GetURL(kPage1Path));
-  ASSERT_TRUE(cr_fuchsia::LoadUrlAndExpectResponse(
-      navigation_controller_.get(), fuchsia::web::LoadUrlParams(),
-      page_url.spec()));
-  navigation_listener_.RunUntilUrlAndTitleEquals(page_url, kPage1Title);
+  LoadPage(kPage1Path, kPage1Title);
+
   semantics_manager_.semantic_tree()->RunUntilNodeCountAtLeast(kPage1NodeCount);
 
   auto* content_view =
@@ -311,11 +291,8 @@
 }
 
 IN_PROC_BROWSER_TEST_F(AccessibilityBridgeTest, Slider) {
-  GURL page_url(embedded_test_server()->GetURL(kPage1Path));
-  ASSERT_TRUE(cr_fuchsia::LoadUrlAndExpectResponse(
-      navigation_controller_.get(), fuchsia::web::LoadUrlParams(),
-      page_url.spec()));
-  navigation_listener_.RunUntilUrlAndTitleEquals(page_url, kPage1Title);
+  LoadPage(kPage1Path, kPage1Title);
+
   semantics_manager_.semantic_tree()->RunUntilNodeCountAtLeast(kPage1NodeCount);
 
   fuchsia::accessibility::semantics::Node* node =
@@ -343,3 +320,26 @@
   EXPECT_TRUE(node->has_states() && node->states().has_range_value());
   EXPECT_EQ(node->states().range_value(), kInitialRangeValue + kStepSize);
 }
+
+// This test makes sure that when semantic updates toggle on / off / on, the
+// full semantic tree is sent in the first update when back on.
+IN_PROC_BROWSER_TEST_F(AccessibilityBridgeTest, TogglesSemanticsUpdates) {
+  LoadPage(kPage1Path, kPage1Title);
+
+  semantics_manager_.semantic_tree()->RunUntilNodeCountAtLeast(kPage1NodeCount);
+
+  semantics_manager_.SetSemanticsModeEnabled(false);
+  base::RunLoop().RunUntilIdle();
+
+  ASSERT_FALSE(frame_impl_->web_contents_for_test()
+                   ->IsWebContentsOnlyAccessibilityModeForTesting());
+
+  // The tree gets cleared when semantic updates are off.
+  EXPECT_EQ(semantics_manager_.semantic_tree()->tree_size(), 0u);
+  semantics_manager_.SetSemanticsModeEnabled(true);
+  base::RunLoop().RunUntilIdle();
+  semantics_manager_.semantic_tree()->RunUntilNodeCountAtLeast(kPage1NodeCount);
+
+  ASSERT_TRUE(frame_impl_->web_contents_for_test()
+                  ->IsWebContentsOnlyAccessibilityModeForTesting());
+}
diff --git a/fuchsia/engine/browser/fake_semantic_tree.cc b/fuchsia/engine/browser/fake_semantic_tree.cc
index 5bb8d1c5..e4f588f 100644
--- a/fuchsia/engine/browser/fake_semantic_tree.cc
+++ b/fuchsia/engine/browser/fake_semantic_tree.cc
@@ -139,3 +139,7 @@
 void FakeSemanticTree::NotImplemented_(const std::string& name) {
   NOTIMPLEMENTED() << name;
 }
+
+void FakeSemanticTree::Clear() {
+  nodes_.clear();
+}
diff --git a/fuchsia/engine/browser/fake_semantic_tree.h b/fuchsia/engine/browser/fake_semantic_tree.h
index 981f6619..88c7892 100644
--- a/fuchsia/engine/browser/fake_semantic_tree.h
+++ b/fuchsia/engine/browser/fake_semantic_tree.h
@@ -47,6 +47,9 @@
   fuchsia::accessibility::semantics::Node* GetNodeFromRole(
       fuchsia::accessibility::semantics::Role role);
 
+  size_t tree_size() const { return nodes_.size(); }
+  void Clear();
+
   // fuchsia::accessibility::semantics::SemanticTree implementation.
   void UpdateSemanticNodes(
       std::vector<fuchsia::accessibility::semantics::Node> nodes) final;
diff --git a/fuchsia/engine/browser/fake_semantics_manager.cc b/fuchsia/engine/browser/fake_semantics_manager.cc
index 5432d9f..69dbab9d 100644
--- a/fuchsia/engine/browser/fake_semantics_manager.cc
+++ b/fuchsia/engine/browser/fake_semantics_manager.cc
@@ -13,6 +13,9 @@
 FakeSemanticsManager::~FakeSemanticsManager() = default;
 
 void FakeSemanticsManager::SetSemanticsModeEnabled(bool is_enabled) {
+  if (!is_enabled)
+    semantic_tree_.Clear();
+
   listener_->OnSemanticsModeChanged(is_enabled, []() {});
 }
 
diff --git a/fuchsia/engine/browser/web_engine_content_browser_client.cc b/fuchsia/engine/browser/web_engine_content_browser_client.cc
index 1033d9b..840f23d 100644
--- a/fuchsia/engine/browser/web_engine_content_browser_client.cc
+++ b/fuchsia/engine/browser/web_engine_content_browser_client.cc
@@ -132,7 +132,6 @@
     RegisterNonNetworkNavigationURLLoaderFactories(
         int frame_tree_node_id,
         base::UkmSourceId ukm_source_id,
-        NonNetworkURLLoaderFactoryDeprecatedMap* uniquely_owned_factories,
         NonNetworkURLLoaderFactoryMap* factories) {
   if (base::CommandLine::ForCurrentProcess()->HasSwitch(
           switches::kContentDirectories)) {
@@ -145,7 +144,6 @@
     RegisterNonNetworkSubresourceURLLoaderFactories(
         int render_process_id,
         int render_frame_id,
-        NonNetworkURLLoaderFactoryDeprecatedMap* uniquely_owned_factories,
         NonNetworkURLLoaderFactoryMap* factories) {
   if (base::CommandLine::ForCurrentProcess()->HasSwitch(
           switches::kContentDirectories)) {
diff --git a/fuchsia/engine/browser/web_engine_content_browser_client.h b/fuchsia/engine/browser/web_engine_content_browser_client.h
index ca2a89f..ee9f627 100644
--- a/fuchsia/engine/browser/web_engine_content_browser_client.h
+++ b/fuchsia/engine/browser/web_engine_content_browser_client.h
@@ -42,12 +42,10 @@
   void RegisterNonNetworkNavigationURLLoaderFactories(
       int frame_tree_node_id,
       base::UkmSourceId ukm_source_id,
-      NonNetworkURLLoaderFactoryDeprecatedMap* uniquely_owned_factories,
       NonNetworkURLLoaderFactoryMap* factories) final;
   void RegisterNonNetworkSubresourceURLLoaderFactories(
       int render_process_id,
       int render_frame_id,
-      NonNetworkURLLoaderFactoryDeprecatedMap* uniquely_owned_factories,
       NonNetworkURLLoaderFactoryMap* factories) final;
   void AppendExtraCommandLineSwitches(base::CommandLine* command_line,
                                       int child_process_id) final;
diff --git a/gpu/command_buffer/service/external_vk_image_dawn_representation.cc b/gpu/command_buffer/service/external_vk_image_dawn_representation.cc
index 246989e..3a9b690 100644
--- a/gpu/command_buffer/service/external_vk_image_dawn_representation.cc
+++ b/gpu/command_buffer/service/external_vk_image_dawn_representation.cc
@@ -71,13 +71,6 @@
   }
 
   texture_ = dawn_native::vulkan::WrapVulkanImage(device_, &descriptor);
-
-  if (texture_) {
-    // Keep a reference to the texture so that it stays valid (its content
-    // might be destroyed).
-    dawn_procs_.textureReference(texture_);
-  }
-
   return texture_;
 }
 
diff --git a/gpu/command_buffer/service/shared_image_backing_factory_d3d_unittest.cc b/gpu/command_buffer/service/shared_image_backing_factory_d3d_unittest.cc
index 82025f30..d672d3c 100644
--- a/gpu/command_buffer/service/shared_image_backing_factory_d3d_unittest.cc
+++ b/gpu/command_buffer/service/shared_image_backing_factory_d3d_unittest.cc
@@ -569,7 +569,7 @@
         SharedImageRepresentation::AllowUnclearedAccess::kYes);
     ASSERT_TRUE(scoped_access);
 
-    wgpu::Texture texture = wgpu::Texture::Acquire(scoped_access->texture());
+    wgpu::Texture texture(scoped_access->texture());
 
     wgpu::RenderPassColorAttachmentDescriptor color_desc;
     color_desc.attachment = texture.CreateView();
@@ -686,8 +686,7 @@
         SharedImageRepresentation::AllowUnclearedAccess::kYes);
     ASSERT_TRUE(dawn_scoped_access);
 
-    wgpu::Texture texture =
-        wgpu::Texture::Acquire(dawn_scoped_access->texture());
+    wgpu::Texture texture(dawn_scoped_access->texture());
     wgpu::RenderPassColorAttachmentDescriptor color_desc;
     color_desc.attachment = texture.CreateView();
     color_desc.resolveTarget = nullptr;
@@ -771,8 +770,7 @@
         SharedImageRepresentation::AllowUnclearedAccess::kYes);
     ASSERT_TRUE(dawn_scoped_access);
 
-    wgpu::Texture texture =
-        wgpu::Texture::Acquire(dawn_scoped_access->texture());
+    wgpu::Texture texture(dawn_scoped_access->texture());
     wgpu::RenderPassColorAttachmentDescriptor color_desc;
     color_desc.attachment = texture.CreateView();
     color_desc.resolveTarget = nullptr;
diff --git a/gpu/command_buffer/service/shared_image_backing_factory_iosurface.mm b/gpu/command_buffer/service/shared_image_backing_factory_iosurface.mm
index 78ebc2f..98c8f289 100644
--- a/gpu/command_buffer/service/shared_image_backing_factory_iosurface.mm
+++ b/gpu/command_buffer/service/shared_image_backing_factory_iosurface.mm
@@ -127,13 +127,6 @@
     descriptor.plane = 0;
 
     texture_ = dawn_native::metal::WrapIOSurface(device_, &descriptor);
-
-    if (texture_) {
-      // Keep a reference to the texture so that it stays valid (its content
-      // might be destroyed).
-      dawn_procs_.textureReference(texture_);
-    }
-
     return texture_;
   }
 
diff --git a/gpu/command_buffer/service/shared_image_backing_factory_iosurface_unittest.cc b/gpu/command_buffer/service/shared_image_backing_factory_iosurface_unittest.cc
index 8fc0c73f8..36a65ea9 100644
--- a/gpu/command_buffer/service/shared_image_backing_factory_iosurface_unittest.cc
+++ b/gpu/command_buffer/service/shared_image_backing_factory_iosurface_unittest.cc
@@ -416,7 +416,7 @@
         WGPUTextureUsage_OutputAttachment,
         SharedImageRepresentation::AllowUnclearedAccess::kYes);
     ASSERT_TRUE(scoped_access);
-    wgpu::Texture texture = wgpu::Texture::Acquire(scoped_access->texture());
+    wgpu::Texture texture(scoped_access->texture());
 
     wgpu::RenderPassColorAttachmentDescriptor color_desc;
     color_desc.attachment = texture.CreateView();
@@ -540,8 +540,7 @@
         SharedImageRepresentation::AllowUnclearedAccess::kYes);
     ASSERT_TRUE(dawn_scoped_access);
 
-    wgpu::Texture texture =
-        wgpu::Texture::Acquire(dawn_scoped_access->texture());
+    wgpu::Texture texture(dawn_scoped_access->texture());
     wgpu::RenderPassColorAttachmentDescriptor color_desc;
     color_desc.attachment = texture.CreateView();
     color_desc.resolveTarget = nullptr;
@@ -623,8 +622,7 @@
         SharedImageRepresentation::AllowUnclearedAccess::kYes);
     ASSERT_TRUE(dawn_scoped_access);
 
-    wgpu::Texture texture =
-        wgpu::Texture::Acquire(dawn_scoped_access->texture());
+    wgpu::Texture texture(dawn_scoped_access->texture());
     wgpu::RenderPassColorAttachmentDescriptor color_desc;
     color_desc.attachment = texture.CreateView();
     color_desc.resolveTarget = nullptr;
diff --git a/gpu/command_buffer/service/shared_image_representation.h b/gpu/command_buffer/service/shared_image_representation.h
index 2ca5a05..bc7c0cc95 100644
--- a/gpu/command_buffer/service/shared_image_representation.h
+++ b/gpu/command_buffer/service/shared_image_representation.h
@@ -364,6 +364,8 @@
                  WGPUTexture texture);
     ~ScopedAccess();
 
+    // Get the unowned texture handle. The caller should take a reference
+    // if necessary by doing wgpu::Texture texture(access->texture());
     WGPUTexture texture() const { return texture_; }
 
    private:
diff --git a/gpu/command_buffer/service/shared_image_representation_d3d.cc b/gpu/command_buffer/service/shared_image_representation_d3d.cc
index afde8952..ff18e28 100644
--- a/gpu/command_buffer/service/shared_image_representation_d3d.cc
+++ b/gpu/command_buffer/service/shared_image_representation_d3d.cc
@@ -98,11 +98,7 @@
        SHARED_IMAGE_USAGE_WEBGPU_SWAP_CHAIN_TEXTURE);
 
   texture_ = dawn_native::d3d12::WrapSharedHandle(device_, &descriptor);
-  if (texture_) {
-    // Keep a reference to the texture so that it stays valid (its content
-    // might be destroyed).
-    dawn_procs_.textureReference(texture_);
-  } else {
+  if (!texture_) {
     d3d_image_backing->EndAccessD3D12();
   }
 
diff --git a/gpu/command_buffer/service/shared_image_representation_dawn_ozone.cc b/gpu/command_buffer/service/shared_image_representation_dawn_ozone.cc
index 101b41e..28856a4 100644
--- a/gpu/command_buffer/service/shared_image_representation_dawn_ozone.cc
+++ b/gpu/command_buffer/service/shared_image_representation_dawn_ozone.cc
@@ -82,11 +82,7 @@
   descriptor.waitFDs = {};
 
   texture_ = dawn_native::vulkan::WrapVulkanImage(device_, &descriptor);
-  if (texture_) {
-    // Keep a reference to the texture so that it stays valid (its content
-    // might be destroyed).
-    dawn_procs_->data.textureReference(texture_);
-  } else {
+  if (!texture_) {
     close(fd);
   }
 
diff --git a/gpu/command_buffer/service/webgpu_decoder_unittest.cc b/gpu/command_buffer/service/webgpu_decoder_unittest.cc
index e2dcad9..9072d38f 100644
--- a/gpu/command_buffer/service/webgpu_decoder_unittest.cc
+++ b/gpu/command_buffer/service/webgpu_decoder_unittest.cc
@@ -6,24 +6,13 @@
 
 #include "build/build_config.h"
 #include "gpu/command_buffer/client/client_test_helper.h"
-#include "gpu/command_buffer/common/shared_image_usage.h"
 #include "gpu/command_buffer/common/webgpu_cmd_format.h"
 #include "gpu/command_buffer/service/context_group.h"
 #include "gpu/command_buffer/service/decoder_client.h"
 #include "gpu/command_buffer/service/gpu_tracer.h"
-#include "gpu/command_buffer/service/mailbox_manager_impl.h"
-#include "gpu/command_buffer/service/shared_image_factory.h"
-#include "gpu/command_buffer/service/shared_image_manager.h"
 #include "gpu/command_buffer/service/test_helper.h"
 #include "gpu/config/gpu_test_config.h"
 #include "testing/gtest/include/gtest/gtest.h"
-#include "ui/gl/gl_context.h"
-#include "ui/gl/gl_surface.h"
-#include "ui/gl/init/gl_factory.h"
-
-#if defined(OS_MAC)
-#include "gpu/ipc/service/gpu_memory_buffer_factory_io_surface.h"
-#endif
 
 using ::testing::_;
 using ::testing::Return;
@@ -40,34 +29,11 @@
     if (!WebGPUSupported()) {
       return;
     }
-    // Shared image factories for some backends take a dependency on GL.
-    // Failure to create a test context with a surface and making it current
-    // will result in a "NoContext" context being current that asserts on all
-    // GL calls.
-    gl_surface_ = gl::init::CreateOffscreenGLSurface(gfx::Size(1, 1));
-    ASSERT_NE(gl_surface_, nullptr);
-
-    gl_context_ = gl::init::CreateGLContext(nullptr, gl_surface_.get(),
-                                            gl::GLContextAttribs());
-    ASSERT_NE(gl_context_, nullptr);
-
-    gl_context_->MakeCurrent(gl_surface_.get());
-
-#if defined(OS_WIN)
-    // D3D shared images are only supported with passthrough command decoder.
-    gpu_preferences_.use_passthrough_cmd_decoder = true;
-#endif  // OS_WIN
-
-    ImageFactory* image_factory = nullptr;
-#if defined(OS_MAC)
-    image_factory = &image_factory_;
-#endif
-
     decoder_client_.reset(new FakeDecoderClient());
     command_buffer_service_.reset(new FakeCommandBufferServiceBase());
     decoder_.reset(WebGPUDecoder::Create(
-        decoder_client_.get(), command_buffer_service_.get(),
-        &shared_image_manager_, nullptr, &outputter_, gpu_preferences_));
+        decoder_client_.get(), command_buffer_service_.get(), nullptr, nullptr,
+        &outputter_, GpuPreferences()));
     ASSERT_EQ(decoder_->Initialize(), ContextResult::kSuccess);
 
     constexpr uint32_t kAdapterClientID = 0;
@@ -81,30 +47,11 @@
     cmds::RequestDevice requestDeviceCmd;
     requestDeviceCmd.Init(kDeviceClientID, kAdapterServiceID, 0, 0, 0);
     ASSERT_EQ(error::kNoError, ExecuteCmd(requestDeviceCmd));
-
-    factory_ = std::make_unique<SharedImageFactory>(
-        gpu_preferences_, GpuDriverBugWorkarounds(), GpuFeatureInfo(),
-        /*context_state=*/nullptr, &mailbox_manager_, &shared_image_manager_,
-        image_factory, /*tracker=*/nullptr,
-        /*enable_wrapped_sk_image=*/false);
-  }
-
-  void TearDown() override {
-    if (factory_) {
-      factory_->DestroyAllSharedImages(true);
-      factory_.reset();
-    }
-
-    gl_surface_.reset();
-    gl_context_.reset();
   }
 
   bool WebGPUSupported() const {
     // WebGPU does not work on Win7 because there is no D3D12 on Win7
-    // Linux bots running Vulkan are not properly initializing the shared
-    // image extensions.
-    return !GPUTestBotConfig::CurrentConfigMatches("Win7") &&
-           !GPUTestBotConfig::CurrentConfigMatches("Linux");
+    return !GPUTestBotConfig::CurrentConfigMatches("Win7");
   }
 
   template <typename T>
@@ -117,32 +64,11 @@
                                 &entries_processed);
   }
 
-  template <typename T>
-  error::Error ExecuteImmediateCmd(const T& cmd, size_t data_size) {
-    static_assert(T::kArgFlags == cmd::kAtLeastN,
-                  "T::kArgFlags should equal cmd::kAtLeastN");
-    int entries_processed = 0;
-    return decoder_->DoCommands(1, (const void*)&cmd,
-                                ComputeNumEntries(sizeof(cmd) + data_size),
-                                &entries_processed);
-  }
-
  protected:
-  GpuPreferences gpu_preferences_;
   std::unique_ptr<FakeCommandBufferServiceBase> command_buffer_service_;
   std::unique_ptr<WebGPUDecoder> decoder_;
   std::unique_ptr<FakeDecoderClient> decoder_client_;
   gles2::TraceOutputter outputter_;
-  SharedImageManager shared_image_manager_;
-  std::unique_ptr<SharedImageFactory> factory_;
-  gles2::MailboxManagerImpl mailbox_manager_;
-#if defined(OS_MAC)
-  // SharedImages on macOS require a valid image factory.
-  GpuMemoryBufferFactoryIOSurface image_factory_;
-#endif
-  scoped_refptr<gl::GLSurface> gl_surface_;
-  scoped_refptr<gl::GLContext> gl_context_;
-
   static const DawnDeviceClientID kDeviceClientID = 0u;
 };
 
@@ -157,158 +83,5 @@
   EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
 }
 
-struct AssociateMailboxCmdStorage {
-  cmds::AssociateMailboxImmediate cmd;
-  GLbyte data[GL_MAILBOX_SIZE_CHROMIUM];
-};
-
-TEST_F(WebGPUDecoderTest, AssociateMailbox) {
-  if (!WebGPUSupported()) {
-    LOG(ERROR) << "Test skipped because WebGPU isn't supported";
-    return;
-  }
-
-  gpu::Mailbox mailbox = Mailbox::GenerateForSharedImage();
-  EXPECT_TRUE(factory_->CreateSharedImage(
-      mailbox, viz::ResourceFormat::RGBA_8888, {1, 1},
-      gfx::ColorSpace::CreateSRGB(), kTopLeft_GrSurfaceOrigin,
-      kPremul_SkAlphaType, gfx::kNullAcceleratedWidget,
-      SHARED_IMAGE_USAGE_WEBGPU));
-
-  // Error case: invalid mailbox
-  {
-    gpu::Mailbox bad_mailbox;
-    AssociateMailboxCmdStorage cmd;
-    cmd.cmd.Init(kDeviceClientID, 0, 1, 0, WGPUTextureUsage_Sampled,
-                 bad_mailbox.name);
-    EXPECT_EQ(error::kInvalidArguments,
-              ExecuteImmediateCmd(cmd.cmd, sizeof(bad_mailbox.name)));
-  }
-
-  // Error case: device client id doesn't exist.
-  {
-    AssociateMailboxCmdStorage cmd;
-    cmd.cmd.Init(kDeviceClientID + 1, 0, 1, 0, WGPUTextureUsage_Sampled,
-                 mailbox.name);
-    EXPECT_EQ(error::kInvalidArguments,
-              ExecuteImmediateCmd(cmd.cmd, sizeof(mailbox.name)));
-  }
-
-  // Error case: device generation is invalid.
-  {
-    AssociateMailboxCmdStorage cmd;
-    cmd.cmd.Init(kDeviceClientID, 42, 1, 0, WGPUTextureUsage_Sampled,
-                 mailbox.name);
-    EXPECT_EQ(error::kInvalidArguments,
-              ExecuteImmediateCmd(cmd.cmd, sizeof(mailbox.name)));
-  }
-
-  // Error case: texture ID invalid for the wire server.
-  {
-    AssociateMailboxCmdStorage cmd;
-    cmd.cmd.Init(kDeviceClientID, 0, 42, 42, WGPUTextureUsage_Sampled,
-                 mailbox.name);
-    EXPECT_EQ(error::kInvalidArguments,
-              ExecuteImmediateCmd(cmd.cmd, sizeof(mailbox.name)));
-  }
-
-  // Error case: invalid usage.
-  {
-    AssociateMailboxCmdStorage cmd;
-    cmd.cmd.Init(kDeviceClientID, 0, 42, 42, WGPUTextureUsage_Sampled,
-                 mailbox.name);
-    EXPECT_EQ(error::kInvalidArguments,
-              ExecuteImmediateCmd(cmd.cmd, sizeof(mailbox.name)));
-  }
-
-  // Error case: invalid texture usage.
-  {
-    AssociateMailboxCmdStorage cmd;
-    cmd.cmd.Init(kDeviceClientID, 0, 1, 0, WGPUTextureUsage_Force32,
-                 mailbox.name);
-    EXPECT_EQ(error::kInvalidArguments,
-              ExecuteImmediateCmd(cmd.cmd, sizeof(mailbox.name)));
-  }
-
-  // Control case: test a successful call to AssociateMailbox
-  // (1, 0) is a valid texture ID on dawn_wire server start.
-  // The control case is not put first because it modifies the internal state
-  // of the Dawn wire server and would make calls with the same texture ID
-  // and generation invalid.
-  {
-    AssociateMailboxCmdStorage cmd;
-    cmd.cmd.Init(kDeviceClientID, 0, 1, 0, WGPUTextureUsage_Sampled,
-                 mailbox.name);
-    EXPECT_EQ(error::kNoError,
-              ExecuteImmediateCmd(cmd.cmd, sizeof(mailbox.name)));
-  }
-
-  // Error case: associated to an already associated texture.
-  {
-    AssociateMailboxCmdStorage cmd;
-    cmd.cmd.Init(kDeviceClientID, 0, 1, 0, WGPUTextureUsage_Sampled,
-                 mailbox.name);
-    EXPECT_EQ(error::kInvalidArguments,
-              ExecuteImmediateCmd(cmd.cmd, sizeof(mailbox.name)));
-  }
-
-  // Dissociate the image from the control case to remove its reference.
-  {
-    cmds::DissociateMailbox cmd;
-    cmd.Init(kDeviceClientID, 1, 0);
-    EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
-  }
-}
-
-TEST_F(WebGPUDecoderTest, DissociateMailbox) {
-  if (!WebGPUSupported()) {
-    LOG(ERROR) << "Test skipped because WebGPU isn't supported";
-    return;
-  }
-
-  gpu::Mailbox mailbox = Mailbox::GenerateForSharedImage();
-  EXPECT_TRUE(factory_->CreateSharedImage(
-      mailbox, viz::ResourceFormat::RGBA_8888, {1, 1},
-      gfx::ColorSpace::CreateSRGB(), kTopLeft_GrSurfaceOrigin,
-      kPremul_SkAlphaType, kNullSurfaceHandle, SHARED_IMAGE_USAGE_WEBGPU));
-
-  // Associate a mailbox so we can later dissociate it.
-  {
-    AssociateMailboxCmdStorage cmd;
-    cmd.cmd.Init(kDeviceClientID, 0, 1, 0, WGPUTextureUsage_Sampled,
-                 mailbox.name);
-    EXPECT_EQ(error::kNoError,
-              ExecuteImmediateCmd(cmd.cmd, sizeof(mailbox.name)));
-  }
-
-  // Error case: wrong texture ID
-  {
-    cmds::DissociateMailbox cmd;
-    cmd.Init(kDeviceClientID, 42, 0);
-    EXPECT_EQ(error::kInvalidArguments, ExecuteCmd(cmd));
-  }
-
-  // Error case: wrong texture generation
-  {
-    cmds::DissociateMailbox cmd;
-    cmd.Init(kDeviceClientID, 1, 42);
-    EXPECT_EQ(error::kInvalidArguments, ExecuteCmd(cmd));
-  }
-
-  // Error case: invalid client device ID
-  {
-    cmds::DissociateMailbox cmd;
-    cmd.Init(kDeviceClientID + 1, 1, 0);
-    EXPECT_EQ(error::kInvalidArguments, ExecuteCmd(cmd));
-  }
-
-  // Success case
-  {
-    cmds::DissociateMailbox cmd;
-    cmd.Init(kDeviceClientID, 1, 0);
-    EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
-  }
-}
-
 }  // namespace webgpu
 }  // namespace gpu
diff --git a/gpu/command_buffer/tests/webgpu_mailbox_unittest.cc b/gpu/command_buffer/tests/webgpu_mailbox_unittest.cc
index 6a51c11..0077b08 100644
--- a/gpu/command_buffer/tests/webgpu_mailbox_unittest.cc
+++ b/gpu/command_buffer/tests/webgpu_mailbox_unittest.cc
@@ -2,10 +2,12 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include "components/viz/test/test_gpu_service_holder.h"
 #include "gpu/command_buffer/client/shared_image_interface.h"
 #include "gpu/command_buffer/client/webgpu_implementation.h"
 #include "gpu/command_buffer/common/mailbox.h"
 #include "gpu/command_buffer/common/shared_image_usage.h"
+#include "gpu/command_buffer/service/webgpu_decoder.h"
 #include "gpu/command_buffer/tests/webgpu_test.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -57,8 +59,217 @@
     mock_device_error_callback = nullptr;
     WebGPUTest::TearDown();
   }
+
+  struct AssociateMailboxCmdStorage {
+    webgpu::cmds::AssociateMailboxImmediate cmd;
+    GLbyte data[GL_MAILBOX_SIZE_CHROMIUM];
+  };
+
+  template <typename T>
+  static error::Error ExecuteCmd(webgpu::WebGPUDecoder* decoder, const T& cmd) {
+    static_assert(T::kArgFlags == cmd::kFixed,
+                  "T::kArgFlags should equal cmd::kFixed");
+    int entries_processed = 0;
+    return decoder->DoCommands(1, (const void*)&cmd,
+                               ComputeNumEntries(sizeof(cmd)),
+                               &entries_processed);
+  }
+
+  template <typename T>
+  static error::Error ExecuteImmediateCmd(webgpu::WebGPUDecoder* decoder,
+                                          const T& cmd,
+                                          size_t data_size) {
+    static_assert(T::kArgFlags == cmd::kAtLeastN,
+                  "T::kArgFlags should equal cmd::kAtLeastN");
+    int entries_processed = 0;
+    return decoder->DoCommands(1, (const void*)&cmd,
+                               ComputeNumEntries(sizeof(cmd) + data_size),
+                               &entries_processed);
+  }
 };
 
+TEST_F(WebGPUMailboxTest, AssociateMailboxCmd) {
+  if (!WebGPUSupported()) {
+    LOG(ERROR) << "Test skipped because WebGPU isn't supported";
+    return;
+  }
+  if (!WebGPUSharedImageSupported()) {
+    LOG(ERROR) << "Test skipped because WebGPUSharedImage isn't supported";
+    return;
+  }
+
+  // Create the shared image
+  SharedImageInterface* sii = GetSharedImageInterface();
+  Mailbox mailbox = sii->CreateSharedImage(
+      viz::ResourceFormat::RGBA_8888, {1, 1}, gfx::ColorSpace::CreateSRGB(),
+      kTopLeft_GrSurfaceOrigin, kPremul_SkAlphaType, SHARED_IMAGE_USAGE_WEBGPU,
+      kNullSurfaceHandle);
+
+  DeviceAndClientID device_and_id = GetNewDeviceAndClientID();
+
+  GetGpuServiceHolder()->ScheduleGpuTask(base::BindOnce(
+      [](webgpu::WebGPUDecoder* decoder, webgpu::DawnDeviceClientID client_id,
+         gpu::Mailbox mailbox) {
+        // Error case: invalid mailbox
+        {
+          gpu::Mailbox bad_mailbox;
+          AssociateMailboxCmdStorage cmd;
+          cmd.cmd.Init(client_id, 0, 1, 0, WGPUTextureUsage_Sampled,
+                       bad_mailbox.name);
+          EXPECT_EQ(
+              error::kInvalidArguments,
+              ExecuteImmediateCmd(decoder, cmd.cmd, sizeof(bad_mailbox.name)));
+        }
+
+        // Error case: device client id doesn't exist.
+        {
+          AssociateMailboxCmdStorage cmd;
+          cmd.cmd.Init(client_id + 1, 0, 1, 0, WGPUTextureUsage_Sampled,
+                       mailbox.name);
+          EXPECT_EQ(
+              error::kInvalidArguments,
+              ExecuteImmediateCmd(decoder, cmd.cmd, sizeof(mailbox.name)));
+        }
+
+        // Error case: device generation is invalid.
+        {
+          AssociateMailboxCmdStorage cmd;
+          cmd.cmd.Init(client_id, 42, 1, 0, WGPUTextureUsage_Sampled,
+                       mailbox.name);
+          EXPECT_EQ(
+              error::kInvalidArguments,
+              ExecuteImmediateCmd(decoder, cmd.cmd, sizeof(mailbox.name)));
+        }
+
+        // Error case: texture ID invalid for the wire server.
+        {
+          AssociateMailboxCmdStorage cmd;
+          cmd.cmd.Init(client_id, 0, 42, 42, WGPUTextureUsage_Sampled,
+                       mailbox.name);
+          EXPECT_EQ(
+              error::kInvalidArguments,
+              ExecuteImmediateCmd(decoder, cmd.cmd, sizeof(mailbox.name)));
+        }
+
+        // Error case: invalid usage.
+        {
+          AssociateMailboxCmdStorage cmd;
+          cmd.cmd.Init(client_id, 0, 42, 42, WGPUTextureUsage_Sampled,
+                       mailbox.name);
+          EXPECT_EQ(
+              error::kInvalidArguments,
+              ExecuteImmediateCmd(decoder, cmd.cmd, sizeof(mailbox.name)));
+        }
+
+        // Error case: invalid texture usage.
+        {
+          AssociateMailboxCmdStorage cmd;
+          cmd.cmd.Init(client_id, 0, 1, 0, WGPUTextureUsage_Force32,
+                       mailbox.name);
+          EXPECT_EQ(
+              error::kInvalidArguments,
+              ExecuteImmediateCmd(decoder, cmd.cmd, sizeof(mailbox.name)));
+        }
+
+        // Control case: test a successful call to AssociateMailbox
+        // (1, 0) is a valid texture ID on dawn_wire server start.
+        // The control case is not put first because it modifies the internal
+        // state of the Dawn wire server and would make calls with the same
+        // texture ID and generation invalid.
+        {
+          AssociateMailboxCmdStorage cmd;
+          cmd.cmd.Init(client_id, 0, 1, 0, WGPUTextureUsage_Sampled,
+                       mailbox.name);
+          EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(decoder, cmd.cmd,
+                                                         sizeof(mailbox.name)));
+        }
+
+        // Error case: associated to an already associated texture.
+        {
+          AssociateMailboxCmdStorage cmd;
+          cmd.cmd.Init(client_id, 0, 1, 0, WGPUTextureUsage_Sampled,
+                       mailbox.name);
+          EXPECT_EQ(
+              error::kInvalidArguments,
+              ExecuteImmediateCmd(decoder, cmd.cmd, sizeof(mailbox.name)));
+        }
+
+        // Dissociate the image from the control case to remove its reference.
+        {
+          webgpu::cmds::DissociateMailbox cmd;
+          cmd.Init(client_id, 1, 0);
+          EXPECT_EQ(error::kNoError, ExecuteCmd(decoder, cmd));
+        }
+      },
+      GetDecoder(), device_and_id.client_id, mailbox));
+
+  GetGpuServiceHolder()->gpu_thread_task_runner()->RunsTasksInCurrentSequence();
+}
+
+TEST_F(WebGPUMailboxTest, DissociateMailboxCmd) {
+  if (!WebGPUSupported()) {
+    LOG(ERROR) << "Test skipped because WebGPU isn't supported";
+    return;
+  }
+  if (!WebGPUSharedImageSupported()) {
+    LOG(ERROR) << "Test skipped because WebGPUSharedImage isn't supported";
+    return;
+  }
+
+  // Create the shared image
+  SharedImageInterface* sii = GetSharedImageInterface();
+  Mailbox mailbox = sii->CreateSharedImage(
+      viz::ResourceFormat::RGBA_8888, {1, 1}, gfx::ColorSpace::CreateSRGB(),
+      kTopLeft_GrSurfaceOrigin, kPremul_SkAlphaType, SHARED_IMAGE_USAGE_WEBGPU,
+      kNullSurfaceHandle);
+
+  DeviceAndClientID device_and_id = GetNewDeviceAndClientID();
+
+  GetGpuServiceHolder()->ScheduleGpuTask(base::BindOnce(
+      [](webgpu::WebGPUDecoder* decoder, webgpu::DawnDeviceClientID client_id,
+         gpu::Mailbox mailbox) {
+        // Associate a mailbox so we can later dissociate it.
+        {
+          AssociateMailboxCmdStorage cmd;
+          cmd.cmd.Init(client_id, 0, 1, 0, WGPUTextureUsage_Sampled,
+                       mailbox.name);
+          EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(decoder, cmd.cmd,
+                                                         sizeof(mailbox.name)));
+        }
+
+        // Error case: wrong texture ID
+        {
+          webgpu::cmds::DissociateMailbox cmd;
+          cmd.Init(client_id, 42, 0);
+          EXPECT_EQ(error::kInvalidArguments, ExecuteCmd(decoder, cmd));
+        }
+
+        // Error case: wrong texture generation
+        {
+          webgpu::cmds::DissociateMailbox cmd;
+          cmd.Init(client_id, 1, 42);
+          EXPECT_EQ(error::kInvalidArguments, ExecuteCmd(decoder, cmd));
+        }
+
+        // Error case: invalid client device ID
+        {
+          webgpu::cmds::DissociateMailbox cmd;
+          cmd.Init(client_id + 1, 1, 0);
+          EXPECT_EQ(error::kInvalidArguments, ExecuteCmd(decoder, cmd));
+        }
+
+        // Success case
+        {
+          webgpu::cmds::DissociateMailbox cmd;
+          cmd.Init(client_id, 1, 0);
+          EXPECT_EQ(error::kNoError, ExecuteCmd(decoder, cmd));
+        }
+      },
+      GetDecoder(), device_and_id.client_id, mailbox));
+
+  GetGpuServiceHolder()->gpu_thread_task_runner()->RunsTasksInCurrentSequence();
+}
+
 // Tests using Associate/DissociateMailbox to share an image with Dawn.
 // For simplicity of the test the image is shared between a Dawn device and
 // itself: we render to it using the Dawn device, then re-associate it to a
diff --git a/gpu/command_buffer/tests/webgpu_test.cc b/gpu/command_buffer/tests/webgpu_test.cc
index 0a89e3a..b80ccf11 100644
--- a/gpu/command_buffer/tests/webgpu_test.cc
+++ b/gpu/command_buffer/tests/webgpu_test.cc
@@ -11,6 +11,7 @@
 #include "base/test/test_simple_task_runner.h"
 #include "build/build_config.h"
 #include "components/viz/test/test_gpu_service_holder.h"
+#include "gpu/command_buffer/client/webgpu_cmd_helper.h"
 #include "gpu/command_buffer/client/webgpu_implementation.h"
 #include "gpu/command_buffer/service/webgpu_decoder.h"
 #include "gpu/config/gpu_test_config.h"
@@ -104,6 +105,8 @@
                            image_factory, channel_manager);
   ASSERT_EQ(result, ContextResult::kSuccess);
 
+  cmd_helper_ = std::make_unique<webgpu::WebGPUCmdHelper>(
+      context_->GetCommandBufferForTest());
   ASSERT_TRUE(
       webgpu()->RequestAdapterAsync(webgpu::PowerPreference::kDefault,
                                     base::BindOnce(&OnRequestAdapterCallback)));
@@ -116,10 +119,18 @@
   return context_->GetImplementation();
 }
 
+webgpu::WebGPUCmdHelper* WebGPUTest::webgpu_cmds() const {
+  return cmd_helper_.get();
+}
+
 SharedImageInterface* WebGPUTest::GetSharedImageInterface() const {
   return context_->GetCommandBufferForTest()->GetSharedImageInterface();
 }
 
+webgpu::WebGPUDecoder* WebGPUTest::GetDecoder() const {
+  return context_->GetCommandBufferForTest()->GetWebGPUDecoderForTest();
+}
+
 void WebGPUTest::RunPendingTasks() {
   context_->GetTaskRunner()->RunPendingTasks();
 }
diff --git a/gpu/command_buffer/tests/webgpu_test.h b/gpu/command_buffer/tests/webgpu_test.h
index f77133d..af7e58e2 100644
--- a/gpu/command_buffer/tests/webgpu_test.h
+++ b/gpu/command_buffer/tests/webgpu_test.h
@@ -32,6 +32,8 @@
 
 namespace webgpu {
 
+class WebGPUCmdHelper;
+class WebGPUDecoder;
 class WebGPUImplementation;
 
 }  // namespace webgpu
@@ -57,7 +59,9 @@
   void Initialize(const Options& options);
 
   webgpu::WebGPUImplementation* webgpu() const;
+  webgpu::WebGPUCmdHelper* webgpu_cmds() const;
   SharedImageInterface* GetSharedImageInterface() const;
+  webgpu::WebGPUDecoder* GetDecoder() const;
 
   void RunPendingTasks();
   void WaitForCompletion(wgpu::Device device);
@@ -77,6 +81,7 @@
  private:
   std::unique_ptr<viz::TestGpuServiceHolder> gpu_service_holder_;
   std::unique_ptr<WebGPUInProcessContext> context_;
+  std::unique_ptr<webgpu::WebGPUCmdHelper> cmd_helper_;
 #if defined(OS_MAC)
   // SharedImages on macOS require a valid image factory.
   GpuMemoryBufferFactoryIOSurface image_factory_;
diff --git a/gpu/config/gpu_util.cc b/gpu/config/gpu_util.cc
index 53945ad81..abec279 100644
--- a/gpu/config/gpu_util.cc
+++ b/gpu/config/gpu_util.cc
@@ -193,13 +193,6 @@
     const base::CommandLine& command_line,
     const GpuPreferences& gpu_preferences,
     const GPUInfo& gpu_info) {
-#if defined(OS_WIN)
-  // On Windows, using the validating decoder causes a lot of errors.  This
-  // could be fixed independently, but validating decoder is going away.
-  // See: http://crbug.com/949773.
-  if (!gpu_info.passthrough_cmd_decoder)
-    return kGpuFeatureStatusDisabled;
-#endif
   // OOP rasterization requires GPU rasterization, so if blocklisted or
   // disabled, report the same.
   auto status =
diff --git a/gpu/ipc/in_process_command_buffer.cc b/gpu/ipc/in_process_command_buffer.cc
index bb55c264..462ec1550 100644
--- a/gpu/ipc/in_process_command_buffer.cc
+++ b/gpu/ipc/in_process_command_buffer.cc
@@ -201,6 +201,10 @@
       ->DecoderIdForTest();
 }
 
+webgpu::WebGPUDecoder* InProcessCommandBuffer::GetWebGPUDecoderForTest() const {
+  return static_cast<webgpu::WebGPUDecoder*>(decoder_.get());
+}
+
 gpu::SharedImageInterface* InProcessCommandBuffer::GetSharedImageInterface()
     const {
   return shared_image_interface_.get();
diff --git a/gpu/ipc/in_process_command_buffer.h b/gpu/ipc/in_process_command_buffer.h
index c0c8e74b..3b9bcdb 100644
--- a/gpu/ipc/in_process_command_buffer.h
+++ b/gpu/ipc/in_process_command_buffer.h
@@ -81,6 +81,10 @@
 struct ContextCreationAttribs;
 struct SwapBuffersCompleteParams;
 
+namespace webgpu {
+class WebGPUDecoder;
+}
+
 namespace raster {
 class GrShaderCache;
 }
@@ -209,6 +213,7 @@
 
   gpu::ServiceTransferCache* GetTransferCacheForTest() const;
   int GetRasterDecoderIdForTest() const;
+  webgpu::WebGPUDecoder* GetWebGPUDecoderForTest() const;
 
   CommandBufferTaskExecutor* service_for_testing() const {
     return task_executor_;
diff --git a/headless/lib/headless_origin_trials_browsertest.cc b/headless/lib/headless_origin_trials_browsertest.cc
index 5fe47bc..e82294db 100644
--- a/headless/lib/headless_origin_trials_browsertest.cc
+++ b/headless/lib/headless_origin_trials_browsertest.cc
@@ -60,29 +60,6 @@
 #else
 #define MAYBE_TrialsCanBeEnabled TrialsCanBeEnabled
 #endif
-IN_PROC_BROWSER_TEST_F(HeadlessOriginTrialsBrowserTest,
-                       MAYBE_TrialsCanBeEnabled) {
-  HeadlessBrowserContext* browser_context =
-      browser()->CreateBrowserContextBuilder().Build();
-
-  // TODO(crbug.com/1050190): Implement a permanent, sample trial so this test
-  // doesn't rely on WebComponents V0, which will eventually go away.
-  HeadlessWebContents* web_contents =
-      browser_context->CreateWebContentsBuilder()
-          .SetInitialURL(
-              GURL("https://example.test/origin_trial_webcomponentsv0.html"))
-          .Build();
-  EXPECT_TRUE(WaitForLoad(web_contents));
-
-  // Ensure we can call createShadowRoot(), which is only available when the
-  // WebComponents V0 origin trial is enabled.
-  EXPECT_TRUE(EvaluateScript(web_contents,
-                             "document.createElement('div').createShadowRoot() "
-                             "instanceof ShadowRoot")
-                  ->GetResult()
-                  ->GetValue()
-                  ->GetBool());
-}
 
 // Flaky on Windows Debug https://crbug.com/1090801
 #if defined(NO_WIN_FLAKES) && !defined(NDEBUG)
@@ -120,26 +97,5 @@
 #else
 #define MAYBE_WebComponentsV0CustomElements WebComponentsV0CustomElements
 #endif
-IN_PROC_BROWSER_TEST_F(HeadlessOriginTrialsBrowserTest,
-                       MAYBE_WebComponentsV0CustomElements) {
-  HeadlessBrowserContext* browser_context =
-      browser()->CreateBrowserContextBuilder().Build();
-
-  HeadlessWebContents* web_contents =
-      browser_context->CreateWebContentsBuilder()
-          .SetInitialURL(
-              GURL("https://example.test/origin_trial_webcomponentsv0.html"))
-          .Build();
-  EXPECT_TRUE(WaitForLoad(web_contents));
-
-  // Ensure we can call registerElement(), which is only available when the
-  // WebComponents V0 origin trial is enabled.
-  EXPECT_EQ(
-      "function",
-      EvaluateScript(web_contents, "typeof document.registerElement('my-tag')")
-          ->GetResult()
-          ->GetValue()
-          ->GetString());
-}
 
 }  // namespace headless
diff --git a/headless/test/data/protocol/emulation/virtual-time-html-import-expected.txt b/headless/test/data/protocol/emulation/virtual-time-html-import-expected.txt
deleted file mode 100644
index 06b9d46..0000000
--- a/headless/test/data/protocol/emulation/virtual-time-html-import-expected.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-Tests that an html import followed by a pending script does not break virtual time.
-[
-    [0] : imported html
-    [1] : ran module
-    [2] : ran script
-]
\ No newline at end of file
diff --git a/headless/test/data/protocol/emulation/virtual-time-html-import.js b/headless/test/data/protocol/emulation/virtual-time-html-import.js
deleted file mode 100644
index a78fb096..0000000
--- a/headless/test/data/protocol/emulation/virtual-time-html-import.js
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright 2018 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-(async function(testRunner) {
-  const {page, session, dp} = await testRunner.startBlank(
-      `Tests that an html import followed by a pending script does not break ` +
-      `virtual time.`);
-
-  const FetchHelper = await testRunner.loadScriptAbsolute(
-      '../fetch/resources/fetch-test.js');
-  const helper = new FetchHelper(testRunner, dp);
-  helper.setEnableLogging(false);
-  await helper.enable();
-
-  helper.onceRequest('http://test.com/index.html').fulfill(
-      FetchHelper.makeContentResponse(`
-          <!DOCTYPE html>
-          <link rel="import" href="/import.html">
-          <script src="/script.js"></script>
-          <script type="module" src="/module.js"></script>`)
-  );
-
-  helper.onceRequest('http://test.com/import.html').fulfill(
-      FetchHelper.makeContentResponse(`
-          <script>console.log("imported html");</script>`)
-  );
-
-  helper.onceRequest('http://test.com/script.js').fulfill(
-      FetchHelper.makeContentResponse(`
-          console.log("ran script");`,
-          "application/javascript")
-  );
-
-  helper.onceRequest('http://test.com/module.js').fulfill(
-      FetchHelper.makeContentResponse(`
-          console.log("ran module");`,
-          "application/javascript")
-  );
-
-  await dp.Runtime.enable();
-  await dp.Page.enable();
-
-  let log_lines = [];
-  dp.Runtime.onConsoleAPICalled(data => {
-    log_lines.push(data.params.args[0].value);
-  });
-
-  dp.Emulation.onVirtualTimeBudgetExpired(async data => {
-    testRunner.log(log_lines.sort());
-    testRunner.completeTest();
-  });
-
-  await dp.Emulation.setVirtualTimePolicy({policy: 'pause'});
-  await dp.Emulation.setVirtualTimePolicy({
-      policy: 'pauseIfNetworkFetchesPending', budget: 5000,
-      waitForNavigation: true});
-  dp.Page.navigate({url: 'http://test.com/index.html'});
-})
diff --git a/headless/test/headless_protocol_browsertest.cc b/headless/test/headless_protocol_browsertest.cc
index 3506621..e797a672 100644
--- a/headless/test/headless_protocol_browsertest.cc
+++ b/headless/test/headless_protocol_browsertest.cc
@@ -56,12 +56,6 @@
     // Make sure the navigations spawn new processes. We run test harness
     // in one process (harness.test) and tests in another.
     command_line->AppendSwitch(::switches::kSitePerProcess);
-    // TODO(yoichio): This is temporary switch to support chrome internal
-    // components migration from the old web APIs.
-    // After completion of the migration, we should remove this.
-    // See crbug.com/911943 for detail.
-    command_line->AppendSwitchASCII(switches::kEnableBlinkFeatures,
-                                    "HTMLImports");
   }
 
  private:
@@ -236,8 +230,6 @@
                        "emulation/virtual-time-local-storage.js")
 HEADLESS_PROTOCOL_TEST(VirtualTimePendingScript,
                        "emulation/virtual-time-pending-script.js")
-HEADLESS_PROTOCOL_TEST(VirtualTimeHtmlImport,
-                       "emulation/virtual-time-html-import.js")
 HEADLESS_PROTOCOL_TEST(VirtualTimeRedirect,
                        "emulation/virtual-time-redirect.js")
 HEADLESS_PROTOCOL_TEST(VirtualTimeSessionStorage,
diff --git a/infra/config/generated/commit-queue.cfg b/infra/config/generated/commit-queue.cfg
index c8c0072..662dca8 100644
--- a/infra/config/generated/commit-queue.cfg
+++ b/infra/config/generated/commit-queue.cfg
@@ -239,7 +239,7 @@
       }
       builders {
         name: "chromium/try/android-marshmallow-x86-rel"
-        experiment_percentage: 70
+        experiment_percentage: 100
         location_regexp: ".*"
         location_regexp_exclude: ".+/[+]/docs/.+"
         location_regexp_exclude: ".+/[+]/infra/config/.+"
diff --git a/infra/config/generated/cq-builders.md b/infra/config/generated/cq-builders.md
index b1eca1b0b..7f0132c 100644
--- a/infra/config/generated/cq-builders.md
+++ b/infra/config/generated/cq-builders.md
@@ -348,7 +348,7 @@
 as required builders.
 
 * [android-marshmallow-x86-rel](https://ci.chromium.org/p/chromium/builders/try/android-marshmallow-x86-rel) ([definition](https://cs.chromium.org/search?q=package:%5Echromium$+file:/cq.star$+-file:/beta/+-file:/stable/+android-marshmallow-x86-rel)) ([matching builders](https://cs.chromium.org/search?q=+file:trybots.py+android-marshmallow-x86-rel))
-  * Experiment percentage: 70
+  * Experiment percentage: 100
 
 * [android-pie-arm64-rel](https://ci.chromium.org/p/chromium/builders/try/android-pie-arm64-rel) ([definition](https://cs.chromium.org/search?q=package:%5Echromium$+file:/cq.star$+-file:/beta/+-file:/stable/+android-pie-arm64-rel)) ([matching builders](https://cs.chromium.org/search?q=+file:trybots.py+android-pie-arm64-rel))
   * Experiment percentage: 100
diff --git a/infra/config/generated/cr-buildbucket.cfg b/infra/config/generated/cr-buildbucket.cfg
index 792cbf0..5472132 100644
--- a/infra/config/generated/cr-buildbucket.cfg
+++ b/infra/config/generated/cr-buildbucket.cfg
@@ -6456,7 +6456,7 @@
       dimensions: "builderless:1"
       dimensions: "cores:24"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Mac-10.14"
+      dimensions: "os:Mac-10.14|Mac-10.15"
       dimensions: "pool:luci.chromium.ci"
       dimensions: "ssd:1"
       exe {
@@ -6485,7 +6485,7 @@
       dimensions: "builderless:1"
       dimensions: "cores:24"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Mac-10.14"
+      dimensions: "os:Mac-10.14|Mac-10.15"
       dimensions: "pool:luci.chromium.ci"
       dimensions: "ssd:1"
       exe {
@@ -6514,7 +6514,7 @@
       dimensions: "builderless:1"
       dimensions: "cores:24"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Mac-10.14"
+      dimensions: "os:Mac-10.14|Mac-10.15"
       dimensions: "pool:luci.chromium.ci"
       dimensions: "ssd:1"
       exe {
@@ -6543,7 +6543,7 @@
       dimensions: "builderless:1"
       dimensions: "cores:24"
       dimensions: "cpu:x86-64"
-      dimensions: "os:Mac-10.14"
+      dimensions: "os:Mac-10.14|Mac-10.15"
       dimensions: "pool:luci.chromium.ci"
       dimensions: "ssd:1"
       exe {
diff --git a/infra/config/lib/builders.star b/infra/config/lib/builders.star
index 7271119..7594bf3 100644
--- a/infra/config/lib/builders.star
+++ b/infra/config/lib/builders.star
@@ -67,6 +67,9 @@
     MAC_11_0 = os_enum("Mac-11.0", os_category.MAC),
     # TODO(crbug/1121185): Remove 10.13 once builders have been migrated to 10.15.
     MAC_DEFAULT = os_enum("Mac-10.13|Mac-10.15", os_category.MAC),
+    # TODO(crbug/1135264): ToTMac* bots need this to ensure they don't break
+    # during the upgrade to 10.15.
+    MAC_10_14_AND_15 = os_enum("Mac-10.14|Mac-10.15", os_category.MAC),
     MAC_ANY = os_enum("Mac", os_category.MAC),
     WINDOWS_7 = os_enum("Windows-7", os_category.WINDOWS),
     WINDOWS_8_1 = os_enum("Windows-8.1", os_category.WINDOWS),
diff --git a/infra/config/lib/ci.star b/infra/config/lib/ci.star
index 2b826f9..e0cc68c2 100644
--- a/infra/config/lib/ci.star
+++ b/infra/config/lib/ci.star
@@ -590,7 +590,7 @@
     return clang_builder(
         name = name,
         cores = cores,
-        os = builders.os.MAC_10_14,
+        os = builders.os.MAC_10_14_AND_15,
         ssd = True,
         properties = {
             "xcode_build_version": "11a1027",
diff --git a/infra/config/subprojects/chromium/try.star b/infra/config/subprojects/chromium/try.star
index 100f9044..0457c8bb 100644
--- a/infra/config/subprojects/chromium/try.star
+++ b/infra/config/subprojects/chromium/try.star
@@ -265,7 +265,7 @@
     goma_jobs = goma.jobs.J300,
     ssd = True,
     tryjob = try_.job(
-        experiment_percentage = 70,
+        experiment_percentage = 100,
     ),
 )
 
diff --git a/ios/chrome/app/strings/resources/ios_strings_cs.xtb b/ios/chrome/app/strings/resources/ios_strings_cs.xtb
index 6c4327e..304bd00 100644
--- a/ios/chrome/app/strings/resources/ios_strings_cs.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_cs.xtb
@@ -344,7 +344,7 @@
 <translation id="4808744395915275922">Aktualizace</translation>
 <translation id="4818522717893377262">Přidat jazyk...</translation>
 <translation id="481968316161811770">Soubory cookie a data webů</translation>
-<translation id="4824497107140370669">{count,plural, =0{{domain}}=1{{domain} a 1 další}few{{domain} a {count} další}many{{domain} a {count} další}other{{domain} a {count} dalších}}</translation>
+<translation id="4824497107140370669">{count,plural, =0{{domain}}=1{{domain} a 1 další}few{{domain} a {count} další}many{{domain} a {count} dalšího}other{{domain} a {count} dalších}}</translation>
 <translation id="4826218269716039351">Blokovat cookie třetích stran</translation>
 <translation id="48274138579728272">Označit jako přečtené</translation>
 <translation id="4833786495304741580">Automaticky odesílá statistiky o využívání a zprávy o selhání do Googlu</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_de.xtb b/ios/chrome/app/strings/resources/ios_strings_de.xtb
index b9a003d..158880b 100644
--- a/ios/chrome/app/strings/resources/ios_strings_de.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_de.xtb
@@ -164,6 +164,7 @@
 <translation id="2781331604911854368">An</translation>
 <translation id="2781692009645368755">Google Pay</translation>
 <translation id="2800683595868705743">Tab-Wechsler beenden</translation>
+<translation id="2815198996063984598">2. Tippen Sie auf "Standard-Browser-App"</translation>
 <translation id="2830972654601096923">Adressen verwalten…</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
 <translation id="2840687315230832938">Erste Einrichtung der Synchronisierung nicht abgeschlossen</translation>
@@ -180,6 +181,7 @@
 <translation id="2921219216347069551">Seite kann nicht geteilt werden</translation>
 <translation id="2923448633003185837">Einfügen und los</translation>
 <translation id="292639812446257861">Als ungelesen markieren</translation>
+<translation id="2952581218264071393">1. Öffnen Sie die Chrome-Einstellungen</translation>
 <translation id="2958718410589002129">Passwörter</translation>
 <translation id="2964349545761222050">Drittanbieter-Cookies blockieren</translation>
 <translation id="2969979262385602596">Anmeldefehler, bitte später erneut versuchen</translation>
@@ -216,6 +218,7 @@
 <translation id="3335947283844343239">Geschlossenen Tab wieder öffnen</translation>
 <translation id="3371831930909698441">Übersetzer ist verfügbar. Optionen sind unten auf dem Bildschirm verfügbar.</translation>
 <translation id="3393920035788932672">Pop-ups erlaubt</translation>
+<translation id="3399930248910934354">Chrome-Einstellungen öffnen</translation>
 <translation id="3425644765244388016">Kartenalias</translation>
 <translation id="3433057996795775706">Durch das Entfernen dieses Passworts wird Ihr <ph name="WEBSITE" />-Konto nicht gelöscht. Ändern Sie das Passwort auf <ph name="WEBSITE" />, um das Konto gegen unbefugten Zugriff zu schützen.</translation>
 <translation id="3443810440409579745">Tab erhalten.</translation>
@@ -240,6 +243,9 @@
 <translation id="3551320343578183772">Tab schließen</translation>
 <translation id="3581564640715911333">Übersetzung für Seiten in andere Sprachen anbieten</translation>
 <translation id="3588820906588687999">Bild in neuem Tab öffnen</translation>
+<translation id="359441731697487922">Links werden automatisch in Chrome geöffnet, wenn Sie es als Standard-Browser-App festlegen.
+      
+Gehen Sie so vor:</translation>
 <translation id="3603009562372709545">Link-URL kopieren</translation>
 <translation id="3607167657931203000">Daten automatisch ausfüllen</translation>
 <translation id="3609785682760573515">Synchronisieren...</translation>
@@ -338,6 +344,7 @@
 <translation id="4808744395915275922">Updates</translation>
 <translation id="4818522717893377262">Sprache hinzufügen…</translation>
 <translation id="481968316161811770">Cookies, Websitedaten</translation>
+<translation id="4824497107140370669">{count,plural, =0{{domain}}=1{{domain} und ein weiterer}other{{domain} und {count} weitere}}</translation>
 <translation id="4826218269716039351">Drittanbieter-Cookies blockieren</translation>
 <translation id="48274138579728272">Als gelesen markieren</translation>
 <translation id="4833786495304741580">Nutzungsstatistiken und Absturzberichte werden automatisch an Google gesendet.</translation>
@@ -586,6 +593,7 @@
 <translation id="7456847797759667638">Adresse öffnen...</translation>
 <translation id="7460314822154045102">Kamera verwenden</translation>
 <translation id="7464701184726199289">Dadurch werden synchronisierte Daten von allen Geräten gelöscht. Gespeicherte Website-Einstellungen werden nicht gelöscht und können möglicherweise Ihre Surfgewohnheiten wiedergeben. <ph name="BEGIN_LINK" />Weitere Informationen<ph name="END_LINK" /></translation>
+<translation id="746684838091935575">3. Wählen Sie Chrome aus</translation>
 <translation id="7472734401283673885">Unternehmensname</translation>
 <translation id="7473891865547856676">Nein danke</translation>
 <translation id="7481312909269577407">Vorwärts</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_es-419.xtb b/ios/chrome/app/strings/resources/ios_strings_es-419.xtb
index c3da0088..b3a10fde 100644
--- a/ios/chrome/app/strings/resources/ios_strings_es-419.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_es-419.xtb
@@ -164,6 +164,7 @@
 <translation id="2781331604911854368">Sí</translation>
 <translation id="2781692009645368755">Google Pay</translation>
 <translation id="2800683595868705743">Salir del alternador de pestañas</translation>
+<translation id="2815198996063984598">2. Presiona la app de navegador predeterminada.</translation>
 <translation id="2830972654601096923">Administrar direcciones…</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
 <translation id="2840687315230832938">No se completó la configuración de sincronización inicial</translation>
@@ -180,6 +181,7 @@
 <translation id="2921219216347069551">Error al compartir</translation>
 <translation id="2923448633003185837">Pegar y acceder</translation>
 <translation id="292639812446257861">Marcar como no leídas</translation>
+<translation id="2952581218264071393">1. Abre la configuración de Chrome.</translation>
 <translation id="2958718410589002129">Contraseñas</translation>
 <translation id="2964349545761222050">Bloquear cookies de terceros</translation>
 <translation id="2969979262385602596">Error al iniciar la sesión. Inténtalo más tarde.</translation>
@@ -216,6 +218,7 @@
 <translation id="3335947283844343239">Volver a abrir pestaña cerrada</translation>
 <translation id="3371831930909698441">Está disponible la traducción. Las opciones disponibles se encuentran cerca de la parte inferior de la pantalla.</translation>
 <translation id="3393920035788932672">Ventanas permitidas</translation>
+<translation id="3399930248910934354">Abre la configuración de Chrome.</translation>
 <translation id="3425644765244388016">Sobrenombre de la tarjeta</translation>
 <translation id="3433057996795775706">Si borras esta contraseña, no se quitará tu cuenta de <ph name="WEBSITE" />. Cambia la contraseña de <ph name="WEBSITE" /> para proteger la cuenta.</translation>
 <translation id="3443810440409579745">Se recibió una pestaña.</translation>
@@ -240,6 +243,9 @@
 <translation id="3551320343578183772">Cerrar pestaña</translation>
 <translation id="3581564640715911333">Ofrecer la traducción de páginas en otros idiomas</translation>
 <translation id="3588820906588687999">Abrir imagen en nueva pestaña</translation>
+<translation id="359441731697487922">Para que los vínculos se abran de forma automática en Chrome, elígelo como app de navegador predeterminada.
+      
+Realiza los siguientes pasos:</translation>
 <translation id="3603009562372709545">Copiar URL del vínculo</translation>
 <translation id="3607167657931203000">Autocompletar datos</translation>
 <translation id="3609785682760573515">Sincronizando…</translation>
@@ -338,6 +344,7 @@
 <translation id="4808744395915275922">Actualizaciones</translation>
 <translation id="4818522717893377262">Agregar idioma…</translation>
 <translation id="481968316161811770">Cookies, datos del sitio</translation>
+<translation id="4824497107140370669">{count,plural, =0{{domain}}=1{{domain} y 1 más}other{{domain} y {count} más}}</translation>
 <translation id="4826218269716039351">Bloquear cookies de terceros</translation>
 <translation id="48274138579728272">Marcar como leído</translation>
 <translation id="4833786495304741580">Envía automáticamente informes de fallas y estadísticas de uso a Google.</translation>
@@ -586,6 +593,7 @@
 <translation id="7456847797759667638">Abrir ubicación...</translation>
 <translation id="7460314822154045102">Usar la cámara</translation>
 <translation id="7464701184726199289">Esta opción borra los datos sincronizados en todos los dispositivos. Las opciones de configuración de sitios guardadas no se borrarán y es posible que reflejen tus hábitos de navegación. <ph name="BEGIN_LINK" />Más información<ph name="END_LINK" /></translation>
+<translation id="746684838091935575">3. Selecciona Chrome.</translation>
 <translation id="7472734401283673885">Nombre de empresa</translation>
 <translation id="7473891865547856676">No, gracias</translation>
 <translation id="7481312909269577407">Reenviar</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fr.xtb b/ios/chrome/app/strings/resources/ios_strings_fr.xtb
index f285a2a7..7491d2ea 100644
--- a/ios/chrome/app/strings/resources/ios_strings_fr.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_fr.xtb
@@ -164,6 +164,7 @@
 <translation id="2781331604911854368">Activé</translation>
 <translation id="2781692009645368755">Google Pay</translation>
 <translation id="2800683595868705743">Quitter le sélecteur d'onglets</translation>
+<translation id="2815198996063984598">2. Appuyez sur "Navigateur par défaut"</translation>
 <translation id="2830972654601096923">Gérer les adresses…</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
 <translation id="2840687315230832938">Configuration de la synchronisation initiale non terminée</translation>
@@ -180,6 +181,7 @@
 <translation id="2921219216347069551">Impossible de partager page</translation>
 <translation id="2923448633003185837">Coller et rechercher</translation>
 <translation id="292639812446257861">Marquer comme non lues</translation>
+<translation id="2952581218264071393">1. Accédez aux paramètres de Chrome</translation>
 <translation id="2958718410589002129">Mots de passe</translation>
 <translation id="2964349545761222050">Bloquer les cookies tiers</translation>
 <translation id="2969979262385602596">Échec de la connexion. Veuillez réessayer plus tard.</translation>
@@ -216,6 +218,7 @@
 <translation id="3335947283844343239">Rouvrir l'onglet fermé</translation>
 <translation id="3371831930909698441">La traduction est disponible. Options disponibles au bas de l'écran.</translation>
 <translation id="3393920035788932672">Pop-up autorisés</translation>
+<translation id="3399930248910934354">Accéder aux paramètres de Chrome</translation>
 <translation id="3425644765244388016">Pseudo associé à la carte</translation>
 <translation id="3433057996795775706">La suppression de ce mot de passe n'entraînera pas la suppression de votre compte sur <ph name="WEBSITE" />. Modifiez votre mot de passe sur <ph name="WEBSITE" /> pour maintenir la sécurité de votre compte.</translation>
 <translation id="3443810440409579745">Onglet reçu.</translation>
@@ -240,6 +243,9 @@
 <translation id="3551320343578183772">Fermer l'onglet</translation>
 <translation id="3581564640715911333">Proposer de traduire les pages dans d'autres langues</translation>
 <translation id="3588820906588687999">Ouvrir l'image dans un nouvel onglet</translation>
+<translation id="359441731697487922">Vous pouvez définir Chrome comme votre navigateur par défaut pour y ouvrir des liens automatiquement.
+      
+Suivez les étapes ci-dessous :</translation>
 <translation id="3603009562372709545">Copier l'URL du lien</translation>
 <translation id="3607167657931203000">Saisie automatique</translation>
 <translation id="3609785682760573515">Synchronisation en cours…</translation>
@@ -338,6 +344,7 @@
 <translation id="4808744395915275922">Mises à jour</translation>
 <translation id="4818522717893377262">Ajouter une langue…</translation>
 <translation id="481968316161811770">Cookies/données site</translation>
+<translation id="4824497107140370669">{count,plural, =0{{domain}}=1{{domain} et 1 autre}one{{domain} et {count} autre}other{{domain} et {count} autres}}</translation>
 <translation id="4826218269716039351">Bloquer les cookies tiers</translation>
 <translation id="48274138579728272">Marquer comme lu</translation>
 <translation id="4833786495304741580">Envoie automatiquement des statistiques d'utilisation et des rapports d'erreur à Google</translation>
@@ -586,6 +593,7 @@
 <translation id="7456847797759667638">Ouvrir une adresse</translation>
 <translation id="7460314822154045102">Utiliser la caméra</translation>
 <translation id="7464701184726199289">Les données synchronisées seront effacées de tous les appareils. Les paramètres de site enregistrés ne seront pas supprimés et peuvent donner des indications sur vos habitudes de navigation. <ph name="BEGIN_LINK" />En savoir plus<ph name="END_LINK" /></translation>
+<translation id="746684838091935575">3. Sélectionnez Chrome</translation>
 <translation id="7472734401283673885">Nom de la société</translation>
 <translation id="7473891865547856676">Non, merci</translation>
 <translation id="7481312909269577407">Avancer</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_mr.xtb b/ios/chrome/app/strings/resources/ios_strings_mr.xtb
index e2f3ccb..56f7622 100644
--- a/ios/chrome/app/strings/resources/ios_strings_mr.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_mr.xtb
@@ -164,6 +164,7 @@
 <translation id="2781331604911854368">सुरू</translation>
 <translation id="2781692009645368755">Google Pay</translation>
 <translation id="2800683595868705743">टॅब स्विचर सोडा</translation>
+<translation id="2815198996063984598">२. डीफॉल्ट ब्राउझर अ‍ॅप वर टॅप करा</translation>
 <translation id="2830972654601096923">पत्ते व्यवस्थापित करा...</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
 <translation id="2840687315230832938">सुरुवातीचे सिंक सेट करणे पूर्ण झाले नाही</translation>
@@ -180,6 +181,7 @@
 <translation id="2921219216347069551">पृष्ठ शेअर करू शकत नाही</translation>
 <translation id="2923448633003185837">पेस्ट करा आणि जा</translation>
 <translation id="292639812446257861">न वाचलेले चिन्हांकित करा</translation>
+<translation id="2952581218264071393">१. Chrome सेटिंग्ज उघडा</translation>
 <translation id="2958718410589002129">पासवर्ड</translation>
 <translation id="2964349545761222050">तृतीय पक्ष कुकी ब्लॉक करा</translation>
 <translation id="2969979262385602596">साइन इन करण्यात अयशस्वी. कृपया नंतर पुन्हा प्रयत्न करा.</translation>
@@ -216,6 +218,7 @@
 <translation id="3335947283844343239">बंद केलेले टॅब पुन्हा उघडा</translation>
 <translation id="3371831930909698441">भाषांतर उपलब्ध आहे. स्क्रीनच्या खाली पर्याय उपलब्ध आहेत.</translation>
 <translation id="3393920035788932672">पॉप-अपला अनुमती</translation>
+<translation id="3399930248910934354">Chrome सेटिंग्ज उघडा</translation>
 <translation id="3425644765244388016">कार्डाचे टोपणनाव</translation>
 <translation id="3433057996795775706">हा पासवर्ड हटवल्याने तुमचे <ph name="WEBSITE" /> वरील खाते हटवले जाणार नाही. इतरांपासून ते सुरक्षित ठेवण्यासाठी, <ph name="WEBSITE" /> वर तुमचा पासवर्ड बदला.</translation>
 <translation id="3443810440409579745">टॅब मिळाला.</translation>
@@ -240,6 +243,9 @@
 <translation id="3551320343578183772">टॅब बंद करा</translation>
 <translation id="3581564640715911333">पेजचे अन्य भाषांमध्ये भाषांतर उपलब्ध करा</translation>
 <translation id="3588820906588687999">नवीन टॅबमध्ये इमेज उघडा</translation>
+<translation id="359441731697487922">तुम्ही Chrome ला तुमचे डीफॉल्ट ब्राउझर अ‍ॅप सेट करून त्यामध्ये आपोआप लिंक उघडू शकता.
+      
+खालील पायऱ्या फॉलो करा:</translation>
 <translation id="3603009562372709545">लिंक URL कॉपी करा</translation>
 <translation id="3607167657931203000">ऑटोफिल डेटा</translation>
 <translation id="3609785682760573515">संकालन करत आहे...</translation>
@@ -339,6 +345,7 @@
 <translation id="4808744395915275922">अपडेट</translation>
 <translation id="4818522717893377262">भाषा जोडा…</translation>
 <translation id="481968316161811770">कुकीज, साइट डेटा</translation>
+<translation id="4824497107140370669">{count,plural, =0{{domain}}=1{{domain} आणि इतर एक}other{{domain} आणि इतर {count}}}</translation>
 <translation id="4826218269716039351">तृतीय पक्ष ब्लॉक करा</translation>
 <translation id="48274138579728272">वाचलेले म्हणून मार्क करा</translation>
 <translation id="4833786495304741580">Google ला वापर आकडेवारी आणि क्रॅश अहवाल आपोआप पाठवते.</translation>
@@ -587,6 +594,7 @@
 <translation id="7456847797759667638">स्थान उघडा...</translation>
 <translation id="7460314822154045102">कॅमेरा वापरा</translation>
 <translation id="7464701184726199289">हे सर्व डिव्हाइसेसवरून संकालित केलेला डेटा साफ करेल. सेव्ह केलेल्या साइट सेटिंग्ज हटविल्या जाणार नाहीत आणि कदाचित आपल्या ब्राउझिंग सवयी दर्शवेल. <ph name="BEGIN_LINK" />अधिक जाणून घ्या<ph name="END_LINK" /></translation>
+<translation id="746684838091935575">३. Chrome निवडा</translation>
 <translation id="7472734401283673885">कंपनीचे नाव</translation>
 <translation id="7473891865547856676">नाही, नको</translation>
 <translation id="7481312909269577407">पुढील</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_nl.xtb b/ios/chrome/app/strings/resources/ios_strings_nl.xtb
index 6c069da9..1be799b 100644
--- a/ios/chrome/app/strings/resources/ios_strings_nl.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_nl.xtb
@@ -164,6 +164,7 @@
 <translation id="2781331604911854368">Aan</translation>
 <translation id="2781692009645368755">Google Pay</translation>
 <translation id="2800683595868705743">Tabbladschakelaar verlaten</translation>
+<translation id="2815198996063984598">2. Tik op Standaard browser-app</translation>
 <translation id="2830972654601096923">Adressen beheren...</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
 <translation id="2840687315230832938">Eerste synchronisatieconfiguratie niet voltooid</translation>
@@ -180,6 +181,7 @@
 <translation id="2921219216347069551">Kan pagina niet delen</translation>
 <translation id="2923448633003185837">Plakken en zoeken</translation>
 <translation id="292639812446257861">Markeren als ongelezen</translation>
+<translation id="2952581218264071393">1. Open de Chrome-instellingen</translation>
 <translation id="2958718410589002129">Wachtwoorden</translation>
 <translation id="2964349545761222050">Cookies van derden blokkeren</translation>
 <translation id="2969979262385602596">Kan niet inloggen. Probeer het later opnieuw.</translation>
@@ -216,6 +218,7 @@
 <translation id="3335947283844343239">Open gesloten tabblad opnieuw</translation>
 <translation id="3371831930909698441">Vertalen is beschikbaar. Opties beschikbaar onderaan het scherm.</translation>
 <translation id="3393920035788932672">Pop-ups toegestaan</translation>
+<translation id="3399930248910934354">Chrome-instellingen openen</translation>
 <translation id="3425644765244388016">Bijnaam kaart</translation>
 <translation id="3433057996795775706">Als je dit wachtwoord verwijdert, wordt je account op <ph name="WEBSITE" /> niet verwijderd. Wijzig je wachtwoord op <ph name="WEBSITE" /> om het te beschermen.</translation>
 <translation id="3443810440409579745">Tabblad ontvangen.</translation>
@@ -240,6 +243,9 @@
 <translation id="3551320343578183772">Tabblad sluiten</translation>
 <translation id="3581564640715911333">Aanbieden pagina's in andere talen te vertalen</translation>
 <translation id="3588820906588687999">Afbeelding openen op nieuw tabblad</translation>
+<translation id="359441731697487922">Je kunt automatisch links in Chrome openen door Chrome in te stellen als standaard browser-app.
+      
+Volg de onderstaande stappen:</translation>
 <translation id="3603009562372709545">Link-URL kopiëren</translation>
 <translation id="3607167657931203000">Gegevens van Automatisch invullen</translation>
 <translation id="3609785682760573515">Synchroniseren...</translation>
@@ -338,6 +344,7 @@
 <translation id="4808744395915275922">Updates</translation>
 <translation id="4818522717893377262">Taal toevoegen...</translation>
 <translation id="481968316161811770">Cookies en sitegegevens</translation>
+<translation id="4824497107140370669">{count,plural, =0{{domain}}=1{{domain} en 1 andere}other{{domain} en {count} andere}}</translation>
 <translation id="4826218269716039351">Cookies van derden blokkeren</translation>
 <translation id="48274138579728272">Markeren als gelezen</translation>
 <translation id="4833786495304741580">Hiermee worden automatisch gebruiksstatistieken en crashrapporten naar Google verzonden.</translation>
@@ -586,6 +593,7 @@
 <translation id="7456847797759667638">Open locatie...</translation>
 <translation id="7460314822154045102">Camera gebruiken</translation>
 <translation id="7464701184726199289">Hiermee worden gesynchroniseerde gegevens van alle apparaten gewist. Opgeslagen site-instellingen worden niet verwijderd en kunnen je browsegedrag weerspiegelen. <ph name="BEGIN_LINK" />Meer informatie<ph name="END_LINK" /></translation>
+<translation id="746684838091935575">3. Selecteer Chrome</translation>
 <translation id="7472734401283673885">Bedrijfsnaam</translation>
 <translation id="7473891865547856676">Nee, bedankt</translation>
 <translation id="7481312909269577407">Vooruit</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb b/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb
index 6b36eda..10b907ad 100644
--- a/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb
@@ -164,6 +164,7 @@
 <translation id="2781331604911854368">Ativado</translation>
 <translation id="2781692009645368755">Google Pay</translation>
 <translation id="2800683595868705743">Sair do alternador de guias</translation>
+<translation id="2815198996063984598">2. Toque em "App padrão de navegador"</translation>
 <translation id="2830972654601096923">Gerenciar endereços…</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
 <translation id="2840687315230832938">Configuração de sincronização inicial não concluída</translation>
@@ -180,6 +181,7 @@
 <translation id="2921219216347069551">Não é possível compartilhar a página</translation>
 <translation id="2923448633003185837">Colar e ir</translation>
 <translation id="292639812446257861">Marcar como não lidas</translation>
+<translation id="2952581218264071393">1. Abra as configurações do Chrome</translation>
 <translation id="2958718410589002129">Senhas</translation>
 <translation id="2964349545761222050">Bloquear cookies de terceiros</translation>
 <translation id="2969979262385602596">Falha durante o login. Tente novamente mais tarde.</translation>
@@ -216,6 +218,7 @@
 <translation id="3335947283844343239">Reabrir guia fechada</translation>
 <translation id="3371831930909698441">Tradução disponível. Opções disponíveis perto da parte inferior da tela.</translation>
 <translation id="3393920035788932672">Pop-ups permitidos</translation>
+<translation id="3399930248910934354">Abrir configurações do Chrome</translation>
 <translation id="3425644765244388016">Apelido do cartão</translation>
 <translation id="3433057996795775706">Remover a senha não excluirá a conta em <ph name="WEBSITE" />. Mude a senha em <ph name="WEBSITE" /> para proteger a conta.</translation>
 <translation id="3443810440409579745">Guia recebida.</translation>
@@ -240,6 +243,9 @@
 <translation id="3551320343578183772">Fechar guia</translation>
 <translation id="3581564640715911333">Oferecer para traduzir páginas em outros idiomas</translation>
 <translation id="3588820906588687999">Abrir imagem em "Nova guia"</translation>
+<translation id="359441731697487922">Defina o Chrome como seu app padrão de navegador para abrir links automaticamente nele.
+      
+Siga estas etapas:</translation>
 <translation id="3603009562372709545">Copiar URL do link</translation>
 <translation id="3607167657931203000">Dados de preenchimento automático</translation>
 <translation id="3609785682760573515">Sincronizando...</translation>
@@ -338,6 +344,7 @@
 <translation id="4808744395915275922">Atualizações</translation>
 <translation id="4818522717893377262">Adicionar idioma…</translation>
 <translation id="481968316161811770">Dados do site e arquivos "cookies"</translation>
+<translation id="4824497107140370669">{count,plural, =0{{domain}}=1{{domain} e mais 1}one{{domain} e mais {count} outra}other{{domain} e mais {count} outras}}</translation>
 <translation id="4826218269716039351">Bloquear de terceiros</translation>
 <translation id="48274138579728272">Marcar como lido</translation>
 <translation id="4833786495304741580">Envia automaticamente estatísticas de uso e relatórios de erros para o Google.</translation>
@@ -586,6 +593,7 @@
 <translation id="7456847797759667638">Abrir local...</translation>
 <translation id="7460314822154045102">Usar a câmera</translation>
 <translation id="7464701184726199289">Isso limpa os dados sincronizados de todos os dispositivos. As configurações salvas em sites não são excluídas e podem refletir seus hábitos de navegação. <ph name="BEGIN_LINK" />Saiba mais<ph name="END_LINK" /></translation>
+<translation id="746684838091935575">3. Selecione o Chrome</translation>
 <translation id="7472734401283673885">Nome da empresa</translation>
 <translation id="7473891865547856676">Não, obrigado</translation>
 <translation id="7481312909269577407">Avançar</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ru.xtb b/ios/chrome/app/strings/resources/ios_strings_ru.xtb
index 0ada893..625173c 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ru.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ru.xtb
@@ -164,6 +164,7 @@
 <translation id="2781331604911854368">ВКЛ</translation>
 <translation id="2781692009645368755">Google Pay</translation>
 <translation id="2800683595868705743">Закрыть переключатель вкладок</translation>
+<translation id="2815198996063984598">2. Найдите раздел, где выбирается браузер по умолчанию.</translation>
 <translation id="2830972654601096923">Управление адресами</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
 <translation id="2840687315230832938">Синхронизация не настроена</translation>
@@ -180,6 +181,7 @@
 <translation id="2921219216347069551">Ошибка</translation>
 <translation id="2923448633003185837">Вставить и перейти</translation>
 <translation id="292639812446257861">Отметить как непрочитанное</translation>
+<translation id="2952581218264071393">1. Откройте настройки Chrome.</translation>
 <translation id="2958718410589002129">Пароли</translation>
 <translation id="2964349545761222050">Блокировать сторонние файлы cookie</translation>
 <translation id="2969979262385602596">Не удалось войти в аккаунт. Повторите попытку.</translation>
@@ -216,6 +218,7 @@
 <translation id="3335947283844343239">Открыть закрытую вкладку</translation>
 <translation id="3371831930909698441">Доступен перевод. Параметры указаны в нижней части экрана.</translation>
 <translation id="3393920035788932672">Вспл. окна разрешены</translation>
+<translation id="3399930248910934354">Открыть настройки Chrome</translation>
 <translation id="3425644765244388016">Название карты</translation>
 <translation id="3433057996795775706">Это действие не приведет к удалению вашего аккаунта на сайте <ph name="WEBSITE" />. Чтобы защитить свои данные на сайте <ph name="WEBSITE" /> от злоумышленников, измените пароль.</translation>
 <translation id="3443810440409579745">Вкладка получена.</translation>
@@ -240,6 +243,9 @@
 <translation id="3551320343578183772">Закрыть вкладку</translation>
 <translation id="3581564640715911333">Предлагать перевести страницы на других языках.</translation>
 <translation id="3588820906588687999">Открыть изображение в новой вкладке</translation>
+<translation id="359441731697487922">Чтобы автоматически открывать ссылки в Chrome, сделайте его браузером по умолчанию.
+      
+Выполните следующие действия:</translation>
 <translation id="3603009562372709545">Копировать URL</translation>
 <translation id="3607167657931203000">Данные автозаполнения</translation>
 <translation id="3609785682760573515">Cинхронизация…</translation>
@@ -338,6 +344,7 @@
 <translation id="4808744395915275922">Обновления</translation>
 <translation id="4818522717893377262">Добавить язык</translation>
 <translation id="481968316161811770">Cookie, данные сайтов</translation>
+<translation id="4824497107140370669">{count,plural, =0{{domain}}=1{{domain} и ещё 1 вкладка}one{{domain} и ещё {count} вкладка}few{{domain} и ещё {count} вкладки}many{{domain} и ещё {count} вкладок}other{{domain} и ещё {count} вкладки}}</translation>
 <translation id="4826218269716039351">Блокировать сторонние файлы cookie</translation>
 <translation id="48274138579728272">Отметить как прочитанное</translation>
 <translation id="4833786495304741580">Автоматически отправлять в Google статистику использования и отчеты о сбоях.</translation>
@@ -586,6 +593,7 @@
 <translation id="7456847797759667638">Открыть адрес...</translation>
 <translation id="7460314822154045102">Использовать камеру</translation>
 <translation id="7464701184726199289">Синхронизированные данные будут удалены со всех устройств. Настройки сайтов не изменятся, поэтому данные о вашей работе в Интернете сохранятся. <ph name="BEGIN_LINK" />Подробнее…<ph name="END_LINK" /></translation>
+<translation id="746684838091935575">3. Выберите Chrome.</translation>
 <translation id="7472734401283673885">Название компании</translation>
 <translation id="7473891865547856676">Пропустить</translation>
 <translation id="7481312909269577407">Вперед</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_th.xtb b/ios/chrome/app/strings/resources/ios_strings_th.xtb
index 236fc12..0507138c 100644
--- a/ios/chrome/app/strings/resources/ios_strings_th.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_th.xtb
@@ -164,6 +164,7 @@
 <translation id="2781331604911854368">เปิด</translation>
 <translation id="2781692009645368755">Google Pay</translation>
 <translation id="2800683595868705743">ออกจากมุมมองตัวสลับแท็บ</translation>
+<translation id="2815198996063984598">2. แตะแอปเบราว์เซอร์เริ่มต้น</translation>
 <translation id="2830972654601096923">จัดการที่อยู่...</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
 <translation id="2840687315230832938">ตั้งค่าการซิงค์เริ่มต้นไม่สำเร็จ</translation>
@@ -180,6 +181,7 @@
 <translation id="2921219216347069551">ไม่สามารถแชร์เว็บ</translation>
 <translation id="2923448633003185837">วางแล้วไป</translation>
 <translation id="292639812446257861">ทำเครื่องหมายว่ายังไม่ได้อ่าน</translation>
+<translation id="2952581218264071393">1. เปิดการตั้งค่า Chrome</translation>
 <translation id="2958718410589002129">รหัสผ่าน</translation>
 <translation id="2964349545761222050">บล็อกคุกกี้ของบุคคลที่สาม</translation>
 <translation id="2969979262385602596">ไม่สามารถลงชื่อเข้าใช้ได้ โปรดลองอีกครั้งในภายหลัง</translation>
@@ -216,6 +218,7 @@
 <translation id="3335947283844343239">เปิดแท็บที่ปิดไปแล้วขึ้นใหม่</translation>
 <translation id="3371831930909698441">มีบริการแปลภาษา ตัวเลือกจะอยู่ทางด้านล่างของหน้าจอ</translation>
 <translation id="3393920035788932672">อนุญาตให้แสดงป๊อปอัป</translation>
+<translation id="3399930248910934354">เปิดการตั้งค่า Chrome</translation>
 <translation id="3425644765244388016">ชื่อเล่นของบัตร</translation>
 <translation id="3433057996795775706">การลบรหัสผ่านนี้จะไม่ลบบัญชีของคุณใน <ph name="WEBSITE" /> เปลี่ยนรหัสผ่านใน <ph name="WEBSITE" /> เพื่อให้ปลอดภัยจากบุคคลอื่น</translation>
 <translation id="3443810440409579745">ได้รับแท็บแล้ว</translation>
@@ -240,6 +243,9 @@
 <translation id="3551320343578183772">ปิดแท็บ</translation>
 <translation id="3581564640715911333">เสนอที่จะแปลหน้าเว็บในภาษาอื่นๆ</translation>
 <translation id="3588820906588687999">เปิดภาพในแท็บใหม่</translation>
+<translation id="359441731697487922">คุณเปิดลิงก์ใน Chrome โดยอัตโนมัติได้ด้วยการตั้งเป็นแอปเบราว์เซอร์เริ่มต้น
+      
+ทำตามขั้นตอนต่อไปนี้</translation>
 <translation id="3603009562372709545">คัดลอก URL ของลิงก์</translation>
 <translation id="3607167657931203000">ป้อนข้อมูลอัตโนมัติ</translation>
 <translation id="3609785682760573515">กำลังซิงค์...</translation>
@@ -338,6 +344,7 @@
 <translation id="4808744395915275922">อัปเดต</translation>
 <translation id="4818522717893377262">เพิ่มภาษา...</translation>
 <translation id="481968316161811770">คุกกี้ ข้อมูลเว็บไซต์</translation>
+<translation id="4824497107140370669">{count,plural, =0{{domain}}=1{{domain} และอีก 1 แท็บ}other{{domain} และอีก {count} แท็บ}}</translation>
 <translation id="4826218269716039351">บล็อกของบุคคลที่สาม</translation>
 <translation id="48274138579728272">ทำเครื่องหมายว่าอ่านแล้ว</translation>
 <translation id="4833786495304741580">ส่งสถิติการใช้งานและรายงานข้อขัดข้องให้กับ Google โดยอัตโนมัติ</translation>
@@ -586,6 +593,7 @@
 <translation id="7456847797759667638">เปิดตำแหน่ง...</translation>
 <translation id="7460314822154045102">ใช้กล้องถ่ายรูป</translation>
 <translation id="7464701184726199289">การดำเนินการนี้จะล้างข้อมูลที่ซิงค์จากอุปกรณ์ทั้งหมด การตั้งค่าเว็บไซต์ที่บันทึกไว้จะไม่ถูกลบและอาจส่งผลกับลักษณะการท่องเว็บของคุณ <ph name="BEGIN_LINK" />ดูข้อมูลเพิ่มเติม<ph name="END_LINK" /></translation>
+<translation id="746684838091935575">3. เลือก Chrome</translation>
 <translation id="7472734401283673885">ชื่อบริษัท</translation>
 <translation id="7473891865547856676">ไม่ ขอบคุณ</translation>
 <translation id="7481312909269577407">ส่งต่อ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ur.xtb b/ios/chrome/app/strings/resources/ios_strings_ur.xtb
index cc40329fa..17cabf6 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ur.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ur.xtb
@@ -164,6 +164,7 @@
 <translation id="2781331604911854368">آن</translation>
 <translation id="2781692009645368755">Google Pay</translation>
 <translation id="2800683595868705743">ٹیب سوئچ کنندہ کو چھوڑیں</translation>
+<translation id="2815198996063984598">2۔ ڈیفالٹ براؤزر ایپ تھپتھپائیں</translation>
 <translation id="2830972654601096923">پتوں کا نظم کریں...</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />، <ph name="STATE" />، <ph name="URL" /></translation>
 <translation id="2840687315230832938">مطابقت پذیری کا ابتدائی سیٹ اپ مکمل نہیں ہوا</translation>
@@ -180,6 +181,7 @@
 <translation id="2921219216347069551">صفحہ کا اشتراک نہیں کر سکتے ہیں</translation>
 <translation id="2923448633003185837">پیسٹ کریں اور جائیں</translation>
 <translation id="292639812446257861">بغیر پڑھے ہوئے کے بطور نشان زد کریں</translation>
+<translation id="2952581218264071393">‏1۔ Chrome کی ترتیبات کھولیں</translation>
 <translation id="2958718410589002129">پاس ورڈز</translation>
 <translation id="2964349545761222050">فریق ثالث کوکیز کو مسدود کریں</translation>
 <translation id="2969979262385602596">سائن ان کرنے میں ناکام ہوگیا۔ براہ کرم بعد میں دوبارہ کوشش کریں۔</translation>
@@ -216,6 +218,7 @@
 <translation id="3335947283844343239">بند ٹیب دوبارہ کھولیں</translation>
 <translation id="3371831930909698441">ترجمہ دستیاب ہے۔ اسکرین کے نچلے حصہ کے قریب اختیارات دستیاب ہیں۔</translation>
 <translation id="3393920035788932672">پاپ اپس کی اجازت ہے</translation>
+<translation id="3399930248910934354">‏Chrome کی ترتیبات کھولیں</translation>
 <translation id="3425644765244388016">کارڈ کا عرفی نام</translation>
 <translation id="3433057996795775706">اس پاس ورڈ کو حذف کرنے سے آپ کا اکاؤنٹ <ph name="WEBSITE" /> سے حذف نہیں ہوگا۔ اپنا اکاؤنٹ دوسروں سے محفوظ رکھنے کے لیے <ph name="WEBSITE" /> پر اپنا پاس ورڈ تبدیل کریں۔</translation>
 <translation id="3443810440409579745">ٹیب موصول ہوا۔</translation>
@@ -240,6 +243,9 @@
 <translation id="3551320343578183772">ٹیب بند کریں</translation>
 <translation id="3581564640715911333">صفحات کو دیگر زبانوں میں ترجمہ کرنے کی پیشکش کریں</translation>
 <translation id="3588820906588687999">تصویر نئے ٹیب میں کھولیں</translation>
+<translation id="359441731697487922">‏آپ Chrome میں لنکس کو اپنا ڈیفالٹ براؤزر ایپ بنا کر خود کار طور پر کھول سکتے ہیں۔
+      
+درج ذیل اقدامات کی پیروی کریں:</translation>
 <translation id="3603009562372709545">‏لنک URL کاپی کریں</translation>
 <translation id="3607167657931203000">آٹو فل ڈیٹا</translation>
 <translation id="3609785682760573515">مطابقت پذیری کی جا رہی ہے…</translation>
@@ -330,6 +336,7 @@
 <translation id="4747097190499141774">‏پاس فریز کی مرموز کاری میں Google Pay کے ادائیگی کے طریقے اور پتے شامل نہیں ہوتے ہیں۔ آپ کے پاس فریز کا حامل شخص ہی آپ کے مرموز کردہ ڈیٹا کو پڑھ سکتا ہے۔ پاس فریز Google کو نہیں بھیجا جاتا ہے اور نہ ہی Google اسے اسٹور کرتا ہے۔ اگر آپ اپنا پاس فریز بھول جاتے ہیں یا اس ترتیب کو تبدیل کرنا چاہتے ہیں تو آپ کو مطابقت پذیری کو دوبارہ ترتیب دینے کی ضرورت ہوگی۔ <ph name="BEGIN_LINK" />مزید جانیں<ph name="END_LINK" /></translation>
 <translation id="4751645464639803239">نیا پوشیدگی ٹیب</translation>
 <translation id="4758977202923349869">کریڈٹ کارڈ کو اس فریم میں رکھیں</translation>
+<translation id="4775879719735953715">ڈیفالٹ براؤزر</translation>
 <translation id="4802417911091824046">‏پاس فریز کی مرموز کاری میں Google Pay سے ادائیگی کے طریقے اور پتے شامل نہیں ہوتے ہیں۔
 
 اس ترتیب کو تبدیل کرنے کیلئے، <ph name="BEGIN_LINK" />مطابقت پذیری کو دوبارہ ترتیب دیں<ph name="END_LINK" /></translation>
@@ -337,6 +344,7 @@
 <translation id="4808744395915275922">اپ ڈیٹس</translation>
 <translation id="4818522717893377262">زبان شامل کریں...</translation>
 <translation id="481968316161811770">کوکیز، سائٹ کا ڈیٹا</translation>
+<translation id="4824497107140370669">{count,plural, =0{{domain}}=1{{domain} اور 1 دیگر}other{{domain} اور {count} دیگر}}</translation>
 <translation id="4826218269716039351">فریق ثالث مسدود کریں</translation>
 <translation id="48274138579728272">پڑھا ہوا کے بطور نشان زد کریں</translation>
 <translation id="4833786495304741580">‏Google کو خودکار طور پر استعمال کے اعداد و شمار اور کریش رپورٹس بھیجتی ہے۔</translation>
@@ -585,6 +593,7 @@
 <translation id="7456847797759667638">مقام کھولیں…</translation>
 <translation id="7460314822154045102">کیمرا استعمال کریں</translation>
 <translation id="7464701184726199289">یہ سبھی آلات سے مطابقت پذیر ڈیٹا کو صاف کرتا ہے۔ محفوظ کردہ سائٹ کی ترتیبات حذف نہیں کی جائیں گی اور یہ آپ کے براؤزنگ کی عادات کی عکاسی کر سکتی ہے۔ <ph name="BEGIN_LINK" />مزید جانیں<ph name="END_LINK" /></translation>
+<translation id="746684838091935575">‏3۔ Chrome منتخب کریں</translation>
 <translation id="7472734401283673885">کمپنی کا نام</translation>
 <translation id="7473891865547856676">نہیں شکریہ</translation>
 <translation id="7481312909269577407">فارورڈ کریں</translation>
diff --git a/ios/chrome/browser/policy/BUILD.gn b/ios/chrome/browser/policy/BUILD.gn
index b3296e9..76b6934 100644
--- a/ios/chrome/browser/policy/BUILD.gn
+++ b/ios/chrome/browser/policy/BUILD.gn
@@ -169,6 +169,7 @@
     ":eg_test_support+eg2",
     ":test_resources",
     "//base",
+    "//components/autofill/core/common",
     "//components/password_manager/core/common",
     "//components/policy:generated",
     "//components/policy/core/common:common_constants",
@@ -179,6 +180,7 @@
     "//ios/chrome/browser/translate:eg_test_support+eg2",
     "//ios/chrome/browser/ui/popup_menu:constants",
     "//ios/chrome/browser/ui/settings:constants",
+    "//ios/chrome/browser/ui/settings/autofill:constants",
     "//ios/chrome/browser/ui/settings/elements:constants",
     "//ios/chrome/browser/ui/settings/password:password_constants",
     "//ios/chrome/browser/ui/table_view/cells:cells_constants",
diff --git a/ios/chrome/browser/policy/policy_egtest.mm b/ios/chrome/browser/policy/policy_egtest.mm
index 10c5935d..f9ea3b9 100644
--- a/ios/chrome/browser/policy/policy_egtest.mm
+++ b/ios/chrome/browser/policy/policy_egtest.mm
@@ -6,6 +6,7 @@
 
 #include "base/json/json_string_value_serializer.h"
 #include "base/strings/sys_string_conversions.h"
+#include "components/autofill/core/common/autofill_prefs.h"
 #include "components/password_manager/core/common/password_manager_pref_names.h"
 #include "components/policy/policy_constants.h"
 #include "components/strings/grit/components_strings.h"
@@ -14,6 +15,7 @@
 #include "ios/chrome/browser/pref_names.h"
 #import "ios/chrome/browser/translate/translate_app_interface.h"
 #import "ios/chrome/browser/ui/popup_menu/popup_menu_constants.h"
+#import "ios/chrome/browser/ui/settings/autofill/autofill_constants.h"
 #import "ios/chrome/browser/ui/settings/elements/elements_constants.h"
 #import "ios/chrome/browser/ui/settings/password/passwords_table_view_constants.h"
 #import "ios/chrome/browser/ui/settings/settings_table_view_controller_constants.h"
@@ -66,8 +68,13 @@
   SetPolicy(base::Value(enabled), policy_key);
 }
 
+// Sets the value of the policy with the |policy_key| key to the given integer
+// value.
+void SetPolicy(int value, const std::string& policy_key) {
+  SetPolicy(base::Value(value), policy_key);
+}
+
 // TODO(crbug.com/1065522): Add helpers as needed for:
-//    - INTEGER
 //    - STRING
 //    - LIST (and subtypes, e.g. int list, string list, etc)
 //    - DICTIONARY (and subtypes, e.g. int dictionary, string dictionary, etc)
@@ -101,21 +108,26 @@
 
 // Verifies that a managed setting item is shown and react properly.
 void VerifyManagedSettingItem(NSString* accessibilityID,
-                              NSString* accessibilityValue,
-                              id<GREYMatcher> goBackMatcher) {
-  [[EarlGrey selectElementWithMatcher:grey_accessibilityID(accessibilityID)]
+                              NSString* containerViewAccessibilityID) {
+  // Check if the managed item is shown in the corresponding table view.
+  [[[EarlGrey selectElementWithMatcher:grey_accessibilityID(accessibilityID)]
+         usingSearchAction:grey_scrollInDirection(kGREYDirectionDown, 200)
+      onElementWithMatcher:grey_accessibilityID(containerViewAccessibilityID)]
       assertWithMatcher:grey_sufficientlyVisible()];
+
   // Click the info button.
-  [[EarlGrey
-      selectElementWithMatcher:grey_accessibilityValue(accessibilityValue)]
-      performAction:grey_tap()];
+  [ChromeEarlGreyUI tapSettingsMenuButton:grey_accessibilityID(
+                                              kTableViewCellInfoButtonViewId)];
+
   // Check if the contextual bubble is shown.
   [[EarlGrey selectElementWithMatcher:grey_accessibilityID(
                                           kEnterpriseInfoBubbleViewId)]
       assertWithMatcher:grey_sufficientlyVisible()];
 
   // Tap outside of the bubble.
-  [[EarlGrey selectElementWithMatcher:goBackMatcher] performAction:grey_tap()];
+  [[EarlGrey selectElementWithMatcher:grey_accessibilityID(
+                                          kTableViewCellInfoButtonViewId)]
+      performAction:grey_tap()];
 
   // Check if the contextual bubble is hidden.
   [[EarlGrey selectElementWithMatcher:grey_accessibilityID(
@@ -162,10 +174,8 @@
   // Open settings menu.
   [ChromeEarlGreyUI openSettingsMenu];
 
-  VerifyManagedSettingItem(
-      kSettingsManagedSearchEngineCellId,
-      l10n_util::GetNSString(IDS_IOS_SEARCH_ENGINE_SETTING_DISABLED_STATUS),
-      chrome_test_util::SettingsDoneButton());
+  VerifyManagedSettingItem(kSettingsManagedSearchEngineCellId,
+                           kSettingsTableViewId);
 }
 
 // Tests for the PasswordManagerEnabled policy.
@@ -184,15 +194,44 @@
       @"Preference was unexpectedly true");
   // Open settings menu and tap password settings.
   [ChromeEarlGreyUI openSettingsMenu];
-  [[[EarlGrey
-      selectElementWithMatcher:grey_accessibilityID(kSettingsPasswordsCellId)]
-         usingSearchAction:grey_scrollInDirection(kGREYDirectionDown, 200)
-      onElementWithMatcher:grey_accessibilityID(kSettingsTableViewId)]
-      performAction:grey_tap()];
+  [ChromeEarlGreyUI
+      tapSettingsMenuButton:chrome_test_util::SettingsMenuPasswordsButton()];
 
   VerifyManagedSettingItem(kSavePasswordManagedTableViewId,
-                           l10n_util::GetNSString(IDS_IOS_SETTING_OFF),
-                           chrome_test_util::SettingsMenuBackButton());
+                           kPasswordsTableViewId);
+}
+
+// Tests for the AutofillAddressEnabled policy Settings UI.
+- (void)testAutofillAddressSettingsUI {
+  // Force the preference off via policy.
+  SetPolicy(false, policy::key::kAutofillAddressEnabled);
+  GREYAssertFalse(
+      [ChromeEarlGrey userBooleanPref:autofill::prefs::kAutofillProfileEnabled],
+      @"Preference was unexpectedly true");
+  // Open settings menu and tap Address and More settings.
+  [ChromeEarlGreyUI openSettingsMenu];
+  [ChromeEarlGreyUI
+      tapSettingsMenuButton:chrome_test_util::AddressesAndMoreButton()];
+
+  VerifyManagedSettingItem(kAutofillAddressManagedViewId,
+                           kAutofillProfileTableViewID);
+}
+
+// Tests for the AutofillCreditCardEnabled policy Settings UI.
+- (void)testAutofillCreditCardSettingsUI {
+  // Force the preference off via policy.
+  SetPolicy(false, policy::key::kAutofillCreditCardEnabled);
+  GREYAssertFalse(
+      [ChromeEarlGrey
+          userBooleanPref:autofill::prefs::kAutofillCreditCardEnabled],
+      @"Preference was unexpectedly true");
+  // Open settings menu and tap Payment Method settings.
+  [ChromeEarlGreyUI openSettingsMenu];
+  [ChromeEarlGreyUI
+      tapSettingsMenuButton:chrome_test_util::PaymentMethodsButton()];
+
+  VerifyManagedSettingItem(kAutofillCreditCardManagedViewId,
+                           kAutofillCreditCardTableViewId);
 }
 
 // Tests for the SavingBrowserHistoryDisabled policy.
@@ -293,6 +332,23 @@
   SetPolicy(true, policy::key::kTranslateEnabled);
 }
 
+- (void)testBlockPopupsSettingsUI {
+  // Set the policy to int value 2, which stands for "do not allow any site to
+  // show popups".
+  SetPolicy(2, policy::key::kDefaultPopupsSetting);
+
+  // Open settings menu and tap Content Settings setting.
+  [ChromeEarlGreyUI openSettingsMenu];
+  [ChromeEarlGreyUI
+      tapSettingsMenuButton:chrome_test_util::ContentSettingsButton()];
+  [[EarlGrey
+      selectElementWithMatcher:grey_accessibilityID(kSettingsBlockPopupsCellId)]
+      performAction:grey_tap()];
+
+  VerifyManagedSettingItem(@"blockPopupsContentView_managed",
+                           @"block_popups_settings_view_controller");
+}
+
 // Test whether the managed item will be shown if a policy is set.
 - (void)testPopupMenuItem {
   // Setup a machine level policy.
diff --git a/ios/chrome/browser/safe_browsing/safe_browsing_blocking_page.mm b/ios/chrome/browser/safe_browsing/safe_browsing_blocking_page.mm
index bb45ba92..8b6eddd 100644
--- a/ios/chrome/browser/safe_browsing/safe_browsing_blocking_page.mm
+++ b/ios/chrome/browser/safe_browsing/safe_browsing_blocking_page.mm
@@ -64,7 +64,9 @@
       /*is_enhanced_protection_enabled=*/false,
       prefs->GetBoolean(prefs::kSafeBrowsingProceedAnywayDisabled),
       /*should_open_links_in_new_tab=*/false,
-      /*always_show_back_to_safety=*/true, "cpn_safe_browsing");
+      /*always_show_back_to_safety=*/true,
+      /*is_enhanced_protection_message_enabled=*/false,
+      /*is_safe_browsing_managed=*/false, "cpn_safe_browsing");
 }
 }  // namespace
 
diff --git a/ios/chrome/browser/ui/settings/autofill/autofill_constants.h b/ios/chrome/browser/ui/settings/autofill/autofill_constants.h
index e94b78f..9b349e2 100644
--- a/ios/chrome/browser/ui/settings/autofill/autofill_constants.h
+++ b/ios/chrome/browser/ui/settings/autofill/autofill_constants.h
@@ -9,8 +9,10 @@
 
 extern NSString* const kAutofillProfileEditTableViewId;
 extern NSString* const kAutofillProfileTableViewID;
-
 extern NSString* const kAutofillPaymentMethodsToolbarId;
+extern NSString* const kAutofillAddressSwitchViewId;
+extern NSString* const kAutofillAddressManagedViewId;
+
 extern NSString* const kAutofillCreditCardTableViewId;
 extern NSString* const kAutofillCreditCardSwitchViewId;
 extern NSString* const kAutofillCreditCardManagedViewId;
diff --git a/ios/chrome/browser/ui/settings/autofill/autofill_constants.mm b/ios/chrome/browser/ui/settings/autofill/autofill_constants.mm
index fcfa1e1..4b6759f 100644
--- a/ios/chrome/browser/ui/settings/autofill/autofill_constants.mm
+++ b/ios/chrome/browser/ui/settings/autofill/autofill_constants.mm
@@ -11,10 +11,16 @@
 NSString* const kAutofillProfileEditTableViewId =
     @"kAutofillProfileEditTableViewId";
 NSString* const kAutofillProfileTableViewID = @"kAutofillProfileTableViewID";
+NSString* const kAutofillAddressSwitchViewId = @"kAutofillAddressSwitchViewId";
+NSString* const kAutofillAddressManagedViewId =
+    @"kAutofillAddressManagedViewId";
 
-NSString* const kAutofillCreditCardTableViewId = @"kAutofillTableViewId";
-NSString* const kAutofillCreditCardSwitchViewId = @"cardItem_switch";
-NSString* const kAutofillCreditCardManagedViewId = @"cardItem_managed";
+NSString* const kAutofillCreditCardTableViewId =
+    @"kAutofillCreditCardTableViewId";
+NSString* const kAutofillCreditCardSwitchViewId =
+    @"kAutofillCreditCardSwitchViewId";
+NSString* const kAutofillCreditCardManagedViewId =
+    @"kAutofillCreditCardManagedViewId";
 NSString* const kAutofillPaymentMethodsToolbarId =
     @"kAutofillPaymentMethodsToolbarId";
 NSString* const kSettingsAddPaymentMethodButtonId =
diff --git a/ios/chrome/browser/ui/settings/autofill/autofill_profile_settings_egtest.mm b/ios/chrome/browser/ui/settings/autofill/autofill_profile_settings_egtest.mm
index ee2cb54..fba1bb1 100644
--- a/ios/chrome/browser/ui/settings/autofill/autofill_profile_settings_egtest.mm
+++ b/ios/chrome/browser/ui/settings/autofill/autofill_profile_settings_egtest.mm
@@ -110,13 +110,8 @@
 // Helper to open the settings page for Autofill profiles.
 - (void)openAutofillProfilesSettings {
   [ChromeEarlGreyUI openSettingsMenu];
-  id<GREYMatcher> addressesButton =
-      ButtonWithAccessibilityLabelId(IDS_AUTOFILL_ADDRESSES_SETTINGS_TITLE);
-  [[[EarlGrey selectElementWithMatcher:addressesButton]
-         usingSearchAction:grey_scrollInDirection(kGREYDirectionDown, 200)
-      onElementWithMatcher:grey_allOf(grey_kindOfClassName(@"UITableView"),
-                                      grey_sufficientlyVisible(), nil)]
-      performAction:grey_tap()];
+  [ChromeEarlGreyUI
+      tapSettingsMenuButton:chrome_test_util::AddressesAndMoreButton()];
 }
 
 // Helper to open the settings page for the Autofill profile with |label|.
@@ -248,8 +243,10 @@
       performAction:grey_tap()];
 
   // Check the Autofill profile switch is disabled.
-  [[EarlGrey selectElementWithMatcher:chrome_test_util::SettingsSwitchCell(
-                                          @"addressItem_switch", YES, NO)]
+  [[EarlGrey
+      selectElementWithMatcher:chrome_test_util::SettingsSwitchCell(
+                                   kAutofillAddressSwitchViewId,
+                                   /*is_toggled_on=*/YES, /*is_enabled=*/NO)]
       assertWithMatcher:grey_notNil()];
 
   [self exitSettingsMenu];
@@ -262,8 +259,10 @@
   [self openAutofillProfilesSettings];
 
   // Toggle the Autofill profiles switch off.
-  [[EarlGrey selectElementWithMatcher:chrome_test_util::SettingsSwitchCell(
-                                          @"addressItem_switch", YES, YES)]
+  [[EarlGrey
+      selectElementWithMatcher:chrome_test_util::SettingsSwitchCell(
+                                   kAutofillAddressSwitchViewId,
+                                   /*is_toggled_on=*/YES, /*is_enabled=*/YES)]
       performAction:chrome_test_util::TurnSettingsSwitchOn(NO)];
 
   // Expect Autofill profiles to remain visible.
@@ -271,8 +270,10 @@
       assertWithMatcher:grey_notNil()];
 
   // Toggle the Autofill profiles switch back on.
-  [[EarlGrey selectElementWithMatcher:chrome_test_util::SettingsSwitchCell(
-                                          @"addressItem_switch", NO, YES)]
+  [[EarlGrey
+      selectElementWithMatcher:chrome_test_util::SettingsSwitchCell(
+                                   kAutofillAddressSwitchViewId,
+                                   /*is_toggled_on=*/NO, /*is_enabled=*/YES)]
       performAction:chrome_test_util::TurnSettingsSwitchOn(YES)];
 
   // Expect Autofill profiles to remain visible.
diff --git a/ios/chrome/browser/ui/settings/autofill/autofill_profile_table_view_controller.mm b/ios/chrome/browser/ui/settings/autofill/autofill_profile_table_view_controller.mm
index 9bc122e0..802dd0a 100644
--- a/ios/chrome/browser/ui/settings/autofill/autofill_profile_table_view_controller.mm
+++ b/ios/chrome/browser/ui/settings/autofill/autofill_profile_table_view_controller.mm
@@ -162,7 +162,7 @@
   switchItem.text =
       l10n_util::GetNSString(IDS_AUTOFILL_ENABLE_PROFILES_TOGGLE_LABEL);
   switchItem.on = [self isAutofillProfileEnabled];
-  switchItem.accessibilityIdentifier = @"addressItem_switch";
+  switchItem.accessibilityIdentifier = kAutofillAddressSwitchViewId;
   return switchItem;
 }
 
@@ -175,7 +175,7 @@
   managedAddressItem.statusText = l10n_util::GetNSString(IDS_IOS_SETTING_OFF);
   managedAddressItem.accessibilityHint =
       l10n_util::GetNSString(IDS_IOS_TOGGLE_SETTING_MANAGED_ACCESSIBILITY_HINT);
-  managedAddressItem.accessibilityIdentifier = @"addressItem_managed";
+  managedAddressItem.accessibilityIdentifier = kAutofillAddressManagedViewId;
   return managedAddressItem;
 }
 
diff --git a/ios/chrome/test/earl_grey/chrome_matchers.h b/ios/chrome/test/earl_grey/chrome_matchers.h
index b845019..885cbf6 100644
--- a/ios/chrome/test/earl_grey/chrome_matchers.h
+++ b/ios/chrome/test/earl_grey/chrome_matchers.h
@@ -182,6 +182,9 @@
 // settings menu.
 id<GREYMatcher> AutofillCreditCardTableView();
 
+// Returns matcher for the "Addresses and More" button in the settings menu.
+id<GREYMatcher> AddressesAndMoreButton();
+
 // Returns matcher for the "Payment Methods" button in the settings menu.
 id<GREYMatcher> PaymentMethodsButton();
 
diff --git a/ios/chrome/test/earl_grey/chrome_matchers.mm b/ios/chrome/test/earl_grey/chrome_matchers.mm
index 1dcde9d..2d8ace1 100644
--- a/ios/chrome/test/earl_grey/chrome_matchers.mm
+++ b/ios/chrome/test/earl_grey/chrome_matchers.mm
@@ -231,6 +231,10 @@
   return [ChromeMatchersAppInterface autofillCreditCardTableView];
 }
 
+id<GREYMatcher> AddressesAndMoreButton() {
+  return [ChromeMatchersAppInterface addressesAndMoreButton];
+}
+
 id<GREYMatcher> PaymentMethodsButton() {
   return [ChromeMatchersAppInterface paymentMethodsButton];
 }
diff --git a/ios/chrome/test/earl_grey/chrome_matchers_app_interface.h b/ios/chrome/test/earl_grey/chrome_matchers_app_interface.h
index aeb7be7..bfb849a 100644
--- a/ios/chrome/test/earl_grey/chrome_matchers_app_interface.h
+++ b/ios/chrome/test/earl_grey/chrome_matchers_app_interface.h
@@ -186,6 +186,9 @@
 // settings menu.
 + (id<GREYMatcher>)autofillCreditCardTableView;
 
+// Returns matcher for the "Addresses and More" button in the settings menu.
++ (id<GREYMatcher>)addressesAndMoreButton;
+
 // Returns matcher for the "Payment Methods" button in the settings menu.
 + (id<GREYMatcher>)paymentMethodsButton;
 
diff --git a/ios/chrome/test/earl_grey/chrome_matchers_app_interface.mm b/ios/chrome/test/earl_grey/chrome_matchers_app_interface.mm
index bf94650..966f9c0 100644
--- a/ios/chrome/test/earl_grey/chrome_matchers_app_interface.mm
+++ b/ios/chrome/test/earl_grey/chrome_matchers_app_interface.mm
@@ -466,6 +466,11 @@
   return grey_accessibilityID(kSyncSettingsConfirmButtonId);
 }
 
++ (id<GREYMatcher>)addressesAndMoreButton {
+  return [ChromeMatchersAppInterface
+      buttonWithAccessibilityLabelID:(IDS_AUTOFILL_ADDRESSES_SETTINGS_TITLE)];
+}
+
 + (id<GREYMatcher>)paymentMethodsButton {
   return [ChromeMatchersAppInterface
       buttonWithAccessibilityLabelID:(IDS_AUTOFILL_PAYMENT_METHODS)];
diff --git a/ios/components/security_interstitials/ios_blocking_page_controller_client.h b/ios/components/security_interstitials/ios_blocking_page_controller_client.h
index 76fd44a2..2c45aca8 100644
--- a/ios/components/security_interstitials/ios_blocking_page_controller_client.h
+++ b/ios/components/security_interstitials/ios_blocking_page_controller_client.h
@@ -37,6 +37,7 @@
   void Proceed() override;
   void GoBack() override;
   bool CanGoBack() override;
+  void OpenEnhancedProtectionSettings() override;
 
   void SetWebInterstitial(web::WebInterstitial* web_interstitial);
 
diff --git a/ios/components/security_interstitials/ios_blocking_page_controller_client.mm b/ios/components/security_interstitials/ios_blocking_page_controller_client.mm
index 4ec97a9..759e027 100644
--- a/ios/components/security_interstitials/ios_blocking_page_controller_client.mm
+++ b/ios/components/security_interstitials/ios_blocking_page_controller_client.mm
@@ -109,6 +109,10 @@
       ui::PAGE_TRANSITION_LINK, false));
 }
 
+void IOSBlockingPageControllerClient::OpenEnhancedProtectionSettings() {
+  NOTREACHED() << "Enhanced protection is not supported on iOS.";
+}
+
 const std::string& IOSBlockingPageControllerClient::GetApplicationLocale()
     const {
   return app_locale_;
diff --git a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.arm64.zip.sha1 b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.arm64.zip.sha1
index 7b9bd79..eae3a01 100644
--- a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.arm64.zip.sha1
+++ b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.arm64.zip.sha1
@@ -1 +1 @@
-5327430f8f4437cc8fa910ae03586baa565a97ee
\ No newline at end of file
+4a4ca0ea59191ef73d1a5d8fd2d01cc5c2f212f8
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.x64.zip.sha1 b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.x64.zip.sha1
index 99c476f..71205095 100644
--- a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.x64.zip.sha1
+++ b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.x64.zip.sha1
@@ -1 +1 @@
-bc502752fcac7eb8a2e5bcd56f7141a2347443c4
\ No newline at end of file
+d23f3c21bbee2469088f351a0a350ab361e02e32
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.x64.zip.sha1 b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.x64.zip.sha1
index ae9ff52..e7fc995 100644
--- a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.x64.zip.sha1
+++ b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.x64.zip.sha1
@@ -1 +1 @@
-caa7b7d5e3da1afe4f2bc8f3ee6b771d418b4617
\ No newline at end of file
+92bf1de565ed036679205bfbbd4d0a96d15b67ed
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.arm64.zip.sha1 b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.arm64.zip.sha1
index df883610..7a38eb0 100644
--- a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.arm64.zip.sha1
+++ b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.arm64.zip.sha1
@@ -1 +1 @@
-abee1bbd365843d73f7c79f6d5b56d9ca9eaedd1
\ No newline at end of file
+26374267c38e23222cc33a57e1ac362c7fc0561a
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.x64.zip.sha1 b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.x64.zip.sha1
index 930663c..ef799e81 100644
--- a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.x64.zip.sha1
+++ b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.x64.zip.sha1
@@ -1 +1 @@
-131b3b9b4f017a0b84bda26e0249d67cbcd97a7b
\ No newline at end of file
+538b4508b2d2f90779263720366fc30ec5767e7d
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.arm64.zip.sha1 b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.arm64.zip.sha1
index c791ef61..7839ca9d 100644
--- a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.arm64.zip.sha1
+++ b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.arm64.zip.sha1
@@ -1 +1 @@
-735b24b54509a1a90542866ae0d74b646bbf6d9a
\ No newline at end of file
+7b3d065577d8d2624a30438f09311a4fec987d33
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.x64.zip.sha1 b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.x64.zip.sha1
index fb9b515..9e0a069 100644
--- a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.x64.zip.sha1
+++ b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.x64.zip.sha1
@@ -1 +1 @@
-a8b33b388190eff5990972971029fb4e11b13bea
\ No newline at end of file
+6722eb6cf9d303ec90a39dcfaf15183a2c68ac91
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.arm64.zip.sha1 b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.arm64.zip.sha1
index 6e04176..49172b8 100644
--- a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.arm64.zip.sha1
+++ b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.arm64.zip.sha1
@@ -1 +1 @@
-60e1b45e89e9fb2282ec5740b31d62e501297f11
\ No newline at end of file
+381b44b401bd2c6b209226373707d5c7fd4f2065
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.x64.zip.sha1 b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.x64.zip.sha1
index 26ff9d7..7a41efc 100644
--- a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.x64.zip.sha1
+++ b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.x64.zip.sha1
@@ -1 +1 @@
-3853cc26193c6cd62f7fe86ff0250dc496bb5795
\ No newline at end of file
+910b408142a5d6df31977c22011e818e00f640f8
\ No newline at end of file
diff --git a/media/base/mac/BUILD.gn b/media/base/mac/BUILD.gn
index 8336767..9dd95bb 100644
--- a/media/base/mac/BUILD.gn
+++ b/media/base/mac/BUILD.gn
@@ -12,6 +12,8 @@
   visibility = [ "//media" ]
 
   sources = [
+    "color_space_util_mac.h",
+    "color_space_util_mac.mm",
     "video_frame_mac.cc",
     "video_frame_mac.h",
     "videotoolbox_helpers.cc",
diff --git a/media/base/mac/color_space_util_mac.h b/media/base/mac/color_space_util_mac.h
new file mode 100644
index 0000000..938b7fd4
--- /dev/null
+++ b/media/base/mac/color_space_util_mac.h
@@ -0,0 +1,24 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef MEDIA_BASE_MAC_COLOR_SPACE_UTIL_MAC_H_
+#define MEDIA_BASE_MAC_COLOR_SPACE_UTIL_MAC_H_
+
+#include <CoreMedia/CoreMedia.h>
+#include <CoreVideo/CoreVideo.h>
+
+#include "media/base/media_export.h"
+#include "ui/gfx/color_space.h"
+
+namespace media {
+
+MEDIA_EXPORT gfx::ColorSpace GetImageBufferColorSpace(
+    CVImageBufferRef image_buffer);
+
+MEDIA_EXPORT gfx::ColorSpace GetFormatDescriptionColorSpace(
+    CMFormatDescriptionRef format_description) API_AVAILABLE(macos(10.11));
+
+}  // namespace media
+
+#endif  // MEDIA_BASE_MAC_COLOR_SPACE_UTIL_MAC_H_
diff --git a/media/base/mac/color_space_util_mac.mm b/media/base/mac/color_space_util_mac.mm
new file mode 100644
index 0000000..8e76a7e
--- /dev/null
+++ b/media/base/mac/color_space_util_mac.mm
@@ -0,0 +1,285 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "media/base/mac/color_space_util_mac.h"
+
+#include <vector>
+
+#include "base/mac/foundation_util.h"
+#include "base/no_destructor.h"
+
+namespace media {
+
+namespace {
+
+// Read the value for the key in |key| to CFString and convert it to IdType.
+// Use the list of pairs in |cfstr_id_pairs| to do the conversion (by doing a
+// linear lookup).
+template <typename IdType, typename StringIdPair>
+bool GetImageBufferProperty(CFTypeRef value_untyped,
+                            const std::vector<StringIdPair>& cfstr_id_pairs,
+                            IdType* value_as_id) {
+  CFStringRef value_as_string = base::mac::CFCast<CFStringRef>(value_untyped);
+  if (!value_as_string)
+    return false;
+
+  for (const auto& p : cfstr_id_pairs) {
+    if (p.cfstr_cm)
+      DCHECK(!CFStringCompare(p.cfstr_cv, p.cfstr_cm, 0));
+    if (!CFStringCompare(value_as_string, p.cfstr_cv, 0)) {
+      *value_as_id = p.id;
+      return true;
+    }
+  }
+
+  return false;
+}
+
+gfx::ColorSpace::PrimaryID GetCoreVideoPrimary(CFTypeRef primaries_untyped) {
+  struct CVImagePrimary {
+    const CFStringRef cfstr_cv;
+    const CFStringRef cfstr_cm;
+    const gfx::ColorSpace::PrimaryID id;
+  };
+  static const base::NoDestructor<std::vector<CVImagePrimary>>
+      kSupportedPrimaries([] {
+        std::vector<CVImagePrimary> supported_primaries;
+        supported_primaries.push_back(
+            {kCVImageBufferColorPrimaries_ITU_R_709_2,
+             kCMFormatDescriptionColorPrimaries_ITU_R_709_2,
+             gfx::ColorSpace::PrimaryID::BT709});
+        supported_primaries.push_back(
+            {kCVImageBufferColorPrimaries_EBU_3213,
+             kCMFormatDescriptionColorPrimaries_EBU_3213,
+             gfx::ColorSpace::PrimaryID::BT470BG});
+        supported_primaries.push_back(
+            {kCVImageBufferColorPrimaries_SMPTE_C,
+             kCMFormatDescriptionColorPrimaries_SMPTE_C,
+
+             gfx::ColorSpace::PrimaryID::SMPTE240M});
+        if (@available(macos 10.11, *)) {
+          supported_primaries.push_back(
+              {kCVImageBufferColorPrimaries_ITU_R_2020,
+               kCMFormatDescriptionColorPrimaries_ITU_R_2020,
+               gfx::ColorSpace::PrimaryID::BT2020});
+        }
+        return supported_primaries;
+      }());
+
+  // The named primaries. Default to BT709.
+  auto primary_id = gfx::ColorSpace::PrimaryID::BT709;
+  if (!GetImageBufferProperty(primaries_untyped, *kSupportedPrimaries,
+                              &primary_id)) {
+    DLOG(ERROR) << "Failed to find CVImageBufferRef primaries.";
+  }
+  return primary_id;
+}
+
+gfx::ColorSpace::TransferID GetCoreVideoTransferFn(CFTypeRef transfer_untyped,
+                                                   CFTypeRef gamma_untyped,
+                                                   double* gamma) {
+  struct CVImageTransferFn {
+    const CFStringRef cfstr_cv;
+    const CFStringRef cfstr_cm;
+    const gfx::ColorSpace::TransferID id;
+  };
+  static const base::NoDestructor<std::vector<CVImageTransferFn>>
+      kSupportedTransferFuncs([] {
+        std::vector<CVImageTransferFn> supported_transfer_funcs;
+        // The constants kCMFormatDescriptionTransferFunction_ITU_R_709_2,
+        // SMPTE_240M_1995, and UseGamma will compile against macOS 10.10
+        // because they are #defined to their kCVImageBufferTransferFunction
+        // equivalents. They are technically not present until macOS 10.11.
+        supported_transfer_funcs.push_back(
+            {kCVImageBufferTransferFunction_ITU_R_709_2,
+             kCMFormatDescriptionTransferFunction_ITU_R_709_2,
+             gfx::ColorSpace::TransferID::BT709_APPLE});
+        supported_transfer_funcs.push_back(
+            {kCVImageBufferTransferFunction_SMPTE_240M_1995,
+             kCMFormatDescriptionTransferFunction_SMPTE_240M_1995,
+             gfx::ColorSpace::TransferID::SMPTE240M});
+        supported_transfer_funcs.push_back(
+            {kCVImageBufferTransferFunction_UseGamma,
+             kCMFormatDescriptionTransferFunction_UseGamma,
+             gfx::ColorSpace::TransferID::CUSTOM});
+        if (@available(macos 10.11, *)) {
+          supported_transfer_funcs.push_back(
+              {kCVImageBufferTransferFunction_ITU_R_2020,
+               kCMFormatDescriptionTransferFunction_ITU_R_2020,
+               gfx::ColorSpace::TransferID::BT2020_10});
+        }
+        if (@available(macos 10.12, *)) {
+          supported_transfer_funcs.push_back(
+              {kCVImageBufferTransferFunction_SMPTE_ST_428_1,
+               kCMFormatDescriptionTransferFunction_SMPTE_ST_428_1,
+               gfx::ColorSpace::TransferID::SMPTEST428_1});
+        }
+        if (@available(macos 10.13, *)) {
+          supported_transfer_funcs.push_back(
+              {kCVImageBufferTransferFunction_SMPTE_ST_2084_PQ,
+               kCMFormatDescriptionTransferFunction_SMPTE_ST_2084_PQ,
+               gfx::ColorSpace::TransferID::SMPTEST2084});
+          supported_transfer_funcs.push_back(
+              {kCVImageBufferTransferFunction_ITU_R_2100_HLG,
+               kCMFormatDescriptionTransferFunction_ITU_R_2100_HLG,
+               gfx::ColorSpace::TransferID::ARIB_STD_B67});
+          supported_transfer_funcs.push_back(
+              {kCVImageBufferTransferFunction_sRGB, nullptr,
+               gfx::ColorSpace::TransferID::IEC61966_2_1});
+        }
+        if (@available(macos 10.14, *)) {
+          supported_transfer_funcs.push_back(
+              {kCVImageBufferTransferFunction_Linear,
+               kCMFormatDescriptionTransferFunction_Linear,
+               gfx::ColorSpace::TransferID::LINEAR});
+        }
+        if (@available(macos 10.15, *)) {
+          supported_transfer_funcs.push_back(
+              {kCVImageBufferTransferFunction_sRGB,
+               kCMFormatDescriptionTransferFunction_sRGB,
+               gfx::ColorSpace::TransferID::IEC61966_2_1});
+        }
+
+        return supported_transfer_funcs;
+      }());
+
+  // The named transfer function.
+  auto transfer_id = gfx::ColorSpace::TransferID::BT709;
+  if (!GetImageBufferProperty(transfer_untyped, *kSupportedTransferFuncs,
+                              &transfer_id)) {
+    DLOG(ERROR) << "Failed to find CVImageBufferRef transfer.";
+  }
+
+  if (transfer_id != gfx::ColorSpace::TransferID::CUSTOM)
+    return transfer_id;
+
+  // If we fail to retrieve the gamma parameter, fall back to BT709.
+  constexpr auto kDefaultTransferFn = gfx::ColorSpace::TransferID::BT709;
+  CFNumberRef gamma_number = base::mac::CFCast<CFNumberRef>(gamma_untyped);
+  if (!gamma_number) {
+    DLOG(ERROR) << "Failed to get gamma level.";
+    return kDefaultTransferFn;
+  }
+
+  // CGFloat is a double on 64-bit systems.
+  CGFloat gamma_double = 0;
+  if (!CFNumberGetValue(gamma_number, kCFNumberCGFloatType, &gamma_double)) {
+    DLOG(ERROR) << "Failed to get CVImageBufferRef gamma level as float.";
+    return kDefaultTransferFn;
+  }
+
+  if (gamma_double == 2.2)
+    return gfx::ColorSpace::TransferID::GAMMA22;
+  if (gamma_double == 2.8)
+    return gfx::ColorSpace::TransferID::GAMMA28;
+
+  *gamma = gamma_double;
+  return transfer_id;
+}
+
+gfx::ColorSpace::MatrixID GetCoreVideoMatrix(CFTypeRef matrix_untyped) {
+  struct CVImageMatrix {
+    const CFStringRef cfstr_cv;
+    const CFStringRef cfstr_cm;
+    gfx::ColorSpace::MatrixID id;
+  };
+  static const base::NoDestructor<std::vector<CVImageMatrix>>
+      kSupportedMatrices([] {
+        std::vector<CVImageMatrix> supported_matrices;
+        supported_matrices.push_back(
+            {kCVImageBufferYCbCrMatrix_ITU_R_709_2,
+             kCMFormatDescriptionYCbCrMatrix_ITU_R_709_2,
+             gfx::ColorSpace::MatrixID::BT709});
+        supported_matrices.push_back(
+            {kCVImageBufferYCbCrMatrix_ITU_R_601_4,
+             kCMFormatDescriptionYCbCrMatrix_ITU_R_601_4,
+             gfx::ColorSpace::MatrixID::SMPTE170M});
+        supported_matrices.push_back(
+            {kCVImageBufferYCbCrMatrix_SMPTE_240M_1995,
+             kCMFormatDescriptionYCbCrMatrix_SMPTE_240M_1995,
+             gfx::ColorSpace::MatrixID::SMPTE240M});
+        if (@available(macos 10.11, *)) {
+          supported_matrices.push_back(
+              {kCVImageBufferYCbCrMatrix_ITU_R_2020,
+               kCMFormatDescriptionYCbCrMatrix_ITU_R_2020,
+               gfx::ColorSpace::MatrixID::BT2020_NCL});
+        }
+        return supported_matrices;
+      }());
+
+  auto matrix_id = gfx::ColorSpace::MatrixID::INVALID;
+  if (!GetImageBufferProperty(matrix_untyped, *kSupportedMatrices,
+                              &matrix_id)) {
+    DLOG(ERROR) << "Failed to find CVImageBufferRef YUV matrix.";
+  }
+  return matrix_id;
+}
+
+gfx::ColorSpace GetCoreVideoColorSpaceInternal(CFTypeRef primaries_untyped,
+                                               CFTypeRef transfer_untyped,
+                                               CFTypeRef gamma_untyped,
+                                               CFTypeRef matrix_untyped) {
+  double gamma;
+  auto primary_id = GetCoreVideoPrimary(primaries_untyped);
+  auto matrix_id = GetCoreVideoMatrix(matrix_untyped);
+  auto transfer_id =
+      GetCoreVideoTransferFn(transfer_untyped, gamma_untyped, &gamma);
+
+  // Use a matrix id that is coherent with a primary id. Useful when we fail to
+  // parse the matrix. Previously it was always defaulting to MatrixID::BT709
+  // See http://crbug.com/788236.
+  if (matrix_id == gfx::ColorSpace::MatrixID::INVALID) {
+    if (primary_id == gfx::ColorSpace::PrimaryID::BT470BG)
+      matrix_id = gfx::ColorSpace::MatrixID::BT470BG;
+    else
+      matrix_id = gfx::ColorSpace::MatrixID::BT709;
+  }
+
+  // It is specified to the decoder to use luma=[16,235] chroma=[16,240] via
+  // the kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange.
+  //
+  // TODO(crbug.com/1103432): We'll probably need support for more than limited
+  // range content if we want this to be used for more than video sites.
+  auto range_id = gfx::ColorSpace::RangeID::LIMITED;
+
+  if (transfer_id == gfx::ColorSpace::TransferID::CUSTOM) {
+    // Transfer functions can also be specified as a gamma value.
+    skcms_TransferFunction custom_tr_fn = {2.2f, 1, 0, 1, 0, 0, 0};
+    if (transfer_id == gfx::ColorSpace::TransferID::CUSTOM)
+      custom_tr_fn.g = gamma;
+
+    return gfx::ColorSpace(primary_id, gfx::ColorSpace::TransferID::CUSTOM,
+                           matrix_id, range_id, nullptr, &custom_tr_fn);
+  }
+
+  return gfx::ColorSpace(primary_id, transfer_id, matrix_id, range_id);
+}
+
+}  // anonymous namespace
+
+gfx::ColorSpace GetImageBufferColorSpace(CVImageBufferRef image_buffer) {
+  return GetCoreVideoColorSpaceInternal(
+      CVBufferGetAttachment(image_buffer, kCVImageBufferColorPrimariesKey,
+                            nullptr),
+      CVBufferGetAttachment(image_buffer, kCVImageBufferTransferFunctionKey,
+                            nullptr),
+      CVBufferGetAttachment(image_buffer, kCVImageBufferGammaLevelKey, nullptr),
+      CVBufferGetAttachment(image_buffer, kCVImageBufferYCbCrMatrixKey,
+                            nullptr));
+}
+
+gfx::ColorSpace GetFormatDescriptionColorSpace(
+    CMFormatDescriptionRef format_description) {
+  return GetCoreVideoColorSpaceInternal(
+      CMFormatDescriptionGetExtension(
+          format_description, kCMFormatDescriptionExtension_ColorPrimaries),
+      CMFormatDescriptionGetExtension(
+          format_description, kCMFormatDescriptionExtension_TransferFunction),
+      CMFormatDescriptionGetExtension(format_description,
+                                      kCMFormatDescriptionExtension_GammaLevel),
+      CMFormatDescriptionGetExtension(
+          format_description, kCMFormatDescriptionExtension_YCbCrMatrix));
+}
+
+}  // namespace media
diff --git a/media/blink/video_frame_compositor_unittest.cc b/media/blink/video_frame_compositor_unittest.cc
index 2ef6497..a8832f3 100644
--- a/media/blink/video_frame_compositor_unittest.cc
+++ b/media/blink/video_frame_compositor_unittest.cc
@@ -56,6 +56,8 @@
 
   void SetUp() override {
     if (IsSurfaceLayerForVideoEnabled()) {
+      // TODO(http://crbug/1134146): Clean up the tests in this file since the
+      // feature UseSurfaceLayerForVideo no longer exists.
       feature_list_.InitFromCommandLine("UseSurfaceLayerForVideo", "");
 
       // When SurfaceLayerForVideo is enabled, |compositor_| owns the
diff --git a/media/blink/webmediaplayer_impl.cc b/media/blink/webmediaplayer_impl.cc
index 28ada623..effd342 100644
--- a/media/blink/webmediaplayer_impl.cc
+++ b/media/blink/webmediaplayer_impl.cc
@@ -485,6 +485,7 @@
 
   delegate_->PlayerGone(delegate_id_);
   delegate_->RemoveObserver(delegate_id_);
+  delegate_ = nullptr;
 
   // Finalize any watch time metrics before destroying the pipeline.
   watch_time_reporter_.reset();
diff --git a/media/blink/webmediaplayer_impl.h b/media/blink/webmediaplayer_impl.h
index 0c1918a..e1a9acb 100644
--- a/media/blink/webmediaplayer_impl.h
+++ b/media/blink/webmediaplayer_impl.h
@@ -748,7 +748,7 @@
   // Document::shutdown() is called before the frame detaches (and before the
   // frame is destroyed). RenderFrameImpl owns |delegate_| and is guaranteed
   // to outlive |this|; thus it is safe to store |delegate_| as a raw pointer.
-  blink::WebMediaPlayerDelegate* const delegate_;
+  blink::WebMediaPlayerDelegate* delegate_;
   int delegate_id_ = 0;
 
   // The playback state last reported to |delegate_|, to avoid setting duplicate
@@ -925,8 +925,7 @@
   // Monitors the player events.
   base::WeakPtr<MediaObserver> observer_;
 
-  // Owns the weblayer and obtains/maintains SurfaceIds for
-  // kUseSurfaceLayerForVideo feature.
+  // Owns the weblayer and obtains/maintains SurfaceIds.
   std::unique_ptr<blink::WebSurfaceLayerBridge> bridge_;
 
   // The maximum video keyframe distance that allows triggering background
diff --git a/media/gpu/mac/vt_config_util.h b/media/gpu/mac/vt_config_util.h
index acb58d7d..955714d 100644
--- a/media/gpu/mac/vt_config_util.h
+++ b/media/gpu/mac/vt_config_util.h
@@ -23,9 +23,6 @@
                        const VideoColorSpace& color_space,
                        base::Optional<gl::HDRMetadata> hdr_metadata);
 
-MEDIA_GPU_EXPORT gfx::ColorSpace GetImageBufferColorSpace(
-    CVImageBufferRef image_buffer);
-
 }  // namespace media
 
 #endif  // MEDIA_GPU_MAC_VT_CONFIG_UTIL_H_
diff --git a/media/gpu/mac/vt_config_util.mm b/media/gpu/mac/vt_config_util.mm
index 37bf96f..e8d9525f 100644
--- a/media/gpu/mac/vt_config_util.mm
+++ b/media/gpu/mac/vt_config_util.mm
@@ -9,7 +9,6 @@
 #include <simd/simd.h>
 
 #include "base/mac/foundation_util.h"
-#include "base/no_destructor.h"
 
 namespace {
 
@@ -249,175 +248,6 @@
   }
 }
 
-// Read the value for the key in |key| to CFString and convert it to IdType.
-// Use the list of pairs in |cfstr_id_pairs| to do the conversion (by doing a
-// linear lookup).
-template <typename IdType, typename StringIdPair>
-bool GetImageBufferProperty(CVImageBufferRef image_buffer,
-                            CFStringRef key,
-                            const std::vector<StringIdPair>& cfstr_id_pairs,
-                            IdType* value_as_id) {
-  CFStringRef value_as_string = reinterpret_cast<CFStringRef>(
-      CVBufferGetAttachment(image_buffer, key, nullptr));
-  if (!value_as_string)
-    return false;
-
-  for (const auto& p : cfstr_id_pairs) {
-    if (!CFStringCompare(value_as_string, p.cfstr, 0)) {
-      *value_as_id = p.id;
-      return true;
-    }
-  }
-
-  return false;
-}
-
-gfx::ColorSpace::PrimaryID GetImageBufferPrimary(
-    CVImageBufferRef image_buffer) {
-  struct CVImagePrimary {
-    const CFStringRef cfstr;
-    const gfx::ColorSpace::PrimaryID id;
-  };
-  static const base::NoDestructor<std::vector<CVImagePrimary>>
-      kSupportedPrimaries([] {
-        std::vector<CVImagePrimary> supported_primaries;
-        supported_primaries.push_back({kCVImageBufferColorPrimaries_ITU_R_709_2,
-                                       gfx::ColorSpace::PrimaryID::BT709});
-        supported_primaries.push_back({kCVImageBufferColorPrimaries_EBU_3213,
-                                       gfx::ColorSpace::PrimaryID::BT470BG});
-        supported_primaries.push_back({kCVImageBufferColorPrimaries_SMPTE_C,
-                                       gfx::ColorSpace::PrimaryID::SMPTE240M});
-        if (@available(macos 10.11, *)) {
-          supported_primaries.push_back(
-              {kCVImageBufferColorPrimaries_ITU_R_2020,
-               gfx::ColorSpace::PrimaryID::BT2020});
-        }
-        return supported_primaries;
-      }());
-
-  // The named primaries. Default to BT709.
-  auto primary_id = gfx::ColorSpace::PrimaryID::BT709;
-  if (!GetImageBufferProperty(image_buffer, kCVImageBufferColorPrimariesKey,
-                              *kSupportedPrimaries, &primary_id)) {
-    DLOG(ERROR) << "Failed to find CVImageBufferRef primaries.";
-  }
-  return primary_id;
-}
-
-gfx::ColorSpace::TransferID GetImageBufferTransferFn(
-    CVImageBufferRef image_buffer,
-    double* gamma) {
-  struct CVImageTransferFn {
-    const CFStringRef cfstr;
-    const gfx::ColorSpace::TransferID id;
-  };
-  static const base::NoDestructor<std::vector<CVImageTransferFn>>
-      kSupportedTransferFuncs([] {
-        std::vector<CVImageTransferFn> supported_transfer_funcs;
-        supported_transfer_funcs.push_back(
-            {kCVImageBufferTransferFunction_ITU_R_709_2,
-             gfx::ColorSpace::TransferID::BT709_APPLE});
-        supported_transfer_funcs.push_back(
-            {kCVImageBufferTransferFunction_SMPTE_240M_1995,
-             gfx::ColorSpace::TransferID::SMPTE240M});
-        supported_transfer_funcs.push_back(
-            {kCVImageBufferTransferFunction_UseGamma,
-             gfx::ColorSpace::TransferID::CUSTOM});
-        if (@available(macos 10.11, *)) {
-          supported_transfer_funcs.push_back(
-              {kCVImageBufferTransferFunction_ITU_R_2020,
-               gfx::ColorSpace::TransferID::BT2020_10});
-        }
-        if (@available(macos 10.12, *)) {
-          supported_transfer_funcs.push_back(
-              {kCVImageBufferTransferFunction_SMPTE_ST_428_1,
-               gfx::ColorSpace::TransferID::SMPTEST428_1});
-        }
-        if (@available(macos 10.13, *)) {
-          supported_transfer_funcs.push_back(
-              {kCVImageBufferTransferFunction_SMPTE_ST_2084_PQ,
-               gfx::ColorSpace::TransferID::SMPTEST2084});
-          supported_transfer_funcs.push_back(
-              {kCVImageBufferTransferFunction_ITU_R_2100_HLG,
-               gfx::ColorSpace::TransferID::ARIB_STD_B67});
-          supported_transfer_funcs.push_back(
-              {kCVImageBufferTransferFunction_sRGB,
-               gfx::ColorSpace::TransferID::IEC61966_2_1});
-        }
-        if (@available(macos 10.14, *)) {
-          supported_transfer_funcs.push_back(
-              {kCVImageBufferTransferFunction_Linear,
-               gfx::ColorSpace::TransferID::LINEAR});
-        }
-
-        return supported_transfer_funcs;
-      }());
-
-  // The named transfer function.
-  auto transfer_id = gfx::ColorSpace::TransferID::BT709;
-  if (!GetImageBufferProperty(image_buffer, kCVImageBufferTransferFunctionKey,
-                              *kSupportedTransferFuncs, &transfer_id)) {
-    DLOG(ERROR) << "Failed to find CVImageBufferRef transfer.";
-  }
-
-  if (transfer_id != gfx::ColorSpace::TransferID::CUSTOM)
-    return transfer_id;
-
-  // If we fail to retrieve the gamma parameter, fall back to BT709.
-  constexpr auto kDefaultTransferFn = gfx::ColorSpace::TransferID::BT709;
-  CFNumberRef gamma_number =
-      reinterpret_cast<CFNumberRef>(CVBufferGetAttachment(
-          image_buffer, kCVImageBufferGammaLevelKey, nullptr));
-  if (!gamma_number) {
-    DLOG(ERROR) << "Failed to get CVImageBufferRef gamma level.";
-    return kDefaultTransferFn;
-  }
-
-  // CGFloat is a double on 64-bit systems.
-  CGFloat gamma_double = 0;
-  if (!CFNumberGetValue(gamma_number, kCFNumberCGFloatType, &gamma_double)) {
-    DLOG(ERROR) << "Failed to get CVImageBufferRef gamma level as float.";
-    return kDefaultTransferFn;
-  }
-
-  if (gamma_double == 2.2)
-    return gfx::ColorSpace::TransferID::GAMMA22;
-  if (gamma_double == 2.8)
-    return gfx::ColorSpace::TransferID::GAMMA28;
-
-  *gamma = gamma_double;
-  return transfer_id;
-}
-
-gfx::ColorSpace::MatrixID GetImageBufferMatrix(CVImageBufferRef image_buffer) {
-  struct CVImageMatrix {
-    const CFStringRef cfstr;
-    gfx::ColorSpace::MatrixID id;
-  };
-  static const base::NoDestructor<std::vector<CVImageMatrix>>
-      kSupportedMatrices([] {
-        std::vector<CVImageMatrix> supported_matrices;
-        supported_matrices.push_back({kCVImageBufferYCbCrMatrix_ITU_R_709_2,
-                                      gfx::ColorSpace::MatrixID::BT709});
-        supported_matrices.push_back({kCVImageBufferYCbCrMatrix_ITU_R_601_4,
-                                      gfx::ColorSpace::MatrixID::SMPTE170M});
-        supported_matrices.push_back({kCVImageBufferYCbCrMatrix_SMPTE_240M_1995,
-                                      gfx::ColorSpace::MatrixID::SMPTE240M});
-        if (@available(macos 10.11, *)) {
-          supported_matrices.push_back({kCVImageBufferYCbCrMatrix_ITU_R_2020,
-                                        gfx::ColorSpace::MatrixID::BT2020_NCL});
-        }
-        return supported_matrices;
-      }());
-
-  auto matrix_id = gfx::ColorSpace::MatrixID::INVALID;
-  if (!GetImageBufferProperty(image_buffer, kCVImageBufferYCbCrMatrixKey,
-                              *kSupportedMatrices, &matrix_id)) {
-    DLOG(ERROR) << "Failed to find CVImageBufferRef YUV matrix.";
-  }
-  return matrix_id;
-}
-
 void SetVp9CodecConfigurationBox(
     media::VideoCodecProfile codec_profile,
     const media::VideoColorSpace& color_space,
@@ -512,40 +342,4 @@
   return base::mac::NSToCFCast(extensions);
 }
 
-gfx::ColorSpace GetImageBufferColorSpace(CVImageBufferRef image_buffer) {
-  double gamma;
-  auto primary_id = GetImageBufferPrimary(image_buffer);
-  auto matrix_id = GetImageBufferMatrix(image_buffer);
-  auto transfer_id = GetImageBufferTransferFn(image_buffer, &gamma);
-
-  // Use a matrix id that is coherent with a primary id. Useful when we fail to
-  // parse the matrix. Previously it was always defaulting to MatrixID::BT709
-  // See http://crbug.com/788236.
-  if (matrix_id == gfx::ColorSpace::MatrixID::INVALID) {
-    if (primary_id == gfx::ColorSpace::PrimaryID::BT470BG)
-      matrix_id = gfx::ColorSpace::MatrixID::BT470BG;
-    else
-      matrix_id = gfx::ColorSpace::MatrixID::BT709;
-  }
-
-  // It is specified to the decoder to use luma=[16,235] chroma=[16,240] via
-  // the kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange.
-  //
-  // TODO(crbug.com/1103432): We'll probably need support for more than limited
-  // range content if we want this to be used for more than video sites.
-  auto range_id = gfx::ColorSpace::RangeID::LIMITED;
-
-  if (transfer_id == gfx::ColorSpace::TransferID::CUSTOM) {
-    // Transfer functions can also be specified as a gamma value.
-    skcms_TransferFunction custom_tr_fn = {2.2f, 1, 0, 1, 0, 0, 0};
-    if (transfer_id == gfx::ColorSpace::TransferID::CUSTOM)
-      custom_tr_fn.g = gamma;
-
-    return gfx::ColorSpace(primary_id, gfx::ColorSpace::TransferID::CUSTOM,
-                           matrix_id, range_id, nullptr, &custom_tr_fn);
-  }
-
-  return gfx::ColorSpace(primary_id, transfer_id, matrix_id, range_id);
-}
-
 }  // namespace media
diff --git a/media/gpu/mac/vt_config_util_unittest.cc b/media/gpu/mac/vt_config_util_unittest.cc
index 17a95d0f..7acaea8 100644
--- a/media/gpu/mac/vt_config_util_unittest.cc
+++ b/media/gpu/mac/vt_config_util_unittest.cc
@@ -11,6 +11,7 @@
 #include "base/mac/mac_util.h"
 #include "base/mac/sdk_forward_declarations.h"
 #include "base/strings/sys_string_conversions.h"
+#include "media/base/mac/color_space_util_mac.h"
 #include "media/formats/mp4/box_definitions.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -74,6 +75,34 @@
   return image_buffer;
 }
 
+base::ScopedCFTypeRef<CMFormatDescriptionRef> CreateFormatDescription(
+    CFStringRef primaries,
+    CFStringRef transfer,
+    CFStringRef matrix) {
+  base::ScopedCFTypeRef<CFMutableDictionaryRef> extensions(
+      CFDictionaryCreateMutable(kCFAllocatorDefault, 0,
+                                &kCFTypeDictionaryKeyCallBacks,
+                                &kCFTypeDictionaryValueCallBacks));
+
+  if (primaries) {
+    CFDictionarySetValue(
+        extensions, kCMFormatDescriptionExtension_ColorPrimaries, primaries);
+  }
+  if (transfer) {
+    CFDictionarySetValue(
+        extensions, kCMFormatDescriptionExtension_TransferFunction, transfer);
+  }
+  if (matrix) {
+    CFDictionarySetValue(extensions, kCMFormatDescriptionExtension_YCbCrMatrix,
+                         matrix);
+  }
+  base::ScopedCFTypeRef<CMFormatDescriptionRef> result;
+  CMFormatDescriptionCreate(nullptr, kCMMediaType_Video,
+                            kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange,
+                            extensions.get(), result.InitializeInto());
+  return result;
+}
+
 gfx::ColorSpace ToBT709_APPLE(gfx::ColorSpace cs) {
   return gfx::ColorSpace(cs.GetPrimaryID(),
                          gfx::ColorSpace::TransferID::BT709_APPLE,
@@ -364,4 +393,26 @@
   }
 }
 
+TEST(VTConfigUtil, FormatDescriptionInvalid) {
+  if (__builtin_available(macos 10.11, *)) {
+    auto format_descriptor =
+        CreateFormatDescription(CFSTR("Cows"), CFSTR("Go"), CFSTR("Moo"));
+    ASSERT_TRUE(format_descriptor);
+    auto cs = GetFormatDescriptionColorSpace(format_descriptor);
+    EXPECT_EQ(gfx::ColorSpace::CreateREC709(), cs);
+  }
+}
+
+TEST(VTConfigUtil, FormatDescriptionBT709) {
+  if (__builtin_available(macos 10.11, *)) {
+    auto format_descriptor = CreateFormatDescription(
+        kCMFormatDescriptionColorPrimaries_ITU_R_709_2,
+        kCMFormatDescriptionTransferFunction_ITU_R_709_2,
+        kCMFormatDescriptionYCbCrMatrix_ITU_R_709_2);
+    ASSERT_TRUE(format_descriptor);
+    auto cs = GetFormatDescriptionColorSpace(format_descriptor);
+    EXPECT_EQ(ToBT709_APPLE(gfx::ColorSpace::CreateREC709()), cs);
+  }
+}
+
 }  // namespace media
diff --git a/media/gpu/mac/vt_video_decode_accelerator_mac.cc b/media/gpu/mac/vt_video_decode_accelerator_mac.cc
index 33c5513..0f2ebcbb 100644
--- a/media/gpu/mac/vt_video_decode_accelerator_mac.cc
+++ b/media/gpu/mac/vt_video_decode_accelerator_mac.cc
@@ -42,6 +42,7 @@
 #include "gpu/command_buffer/service/shared_image_factory.h"
 #include "gpu/ipc/service/shared_image_stub.h"
 #include "media/base/limits.h"
+#include "media/base/mac/color_space_util_mac.h"
 #include "media/base/media_switches.h"
 #include "media/filters/vp9_parser.h"
 #include "media/gpu/mac/vp9_super_frame_bitstream_filter.h"
@@ -1543,13 +1544,22 @@
     gl_params.is_cleared = true;
     gpu::SharedImageBackingGLCommon::UnpackStateAttribs gl_attribs;
 
+    // A GL texture id is needed to create the legacy mailbox, which requires
+    // that the GL context be made current.
+    const bool kCreateLegacyMailbox = true;
+    if (!gl_client_.make_context_current.Run()) {
+      DLOG(ERROR) << "Failed to make context current";
+      NotifyError(PLATFORM_FAILURE, SFT_PLATFORM_ERROR);
+      return false;
+    }
+
     auto shared_image = std::make_unique<gpu::SharedImageBackingGLImage>(
         gl_image, mailbox, viz_resource_format, frame.image_size, color_space,
         kTopLeft_GrSurfaceOrigin, kOpaque_SkAlphaType, shared_image_usage,
         gl_params, gl_attribs, gl_client_.is_passthrough);
 
     const bool success = shared_image_stub->factory()->RegisterBacking(
-        std::move(shared_image), /* legacy_mailbox */ true);
+        std::move(shared_image), kCreateLegacyMailbox);
     if (!success) {
       DLOG(ERROR) << "Failed to register shared image";
       NotifyError(PLATFORM_FAILURE, SFT_PLATFORM_ERROR);
@@ -1691,8 +1701,7 @@
 }
 
 bool VTVideoDecodeAccelerator::SupportsSharedImagePictureBuffers() const {
-  // TODO(https://crbug.com/1108909): Enable shared image use on macOS.
-  return false;
+  return true;
 }
 
 // static
diff --git a/media/gpu/windows/d3d11_copying_texture_wrapper.cc b/media/gpu/windows/d3d11_copying_texture_wrapper.cc
index 6698af9..decf41ed 100644
--- a/media/gpu/windows/d3d11_copying_texture_wrapper.cc
+++ b/media/gpu/windows/d3d11_copying_texture_wrapper.cc
@@ -18,7 +18,7 @@
 CopyingTexture2DWrapper::CopyingTexture2DWrapper(
     const gfx::Size& size,
     std::unique_ptr<Texture2DWrapper> output_wrapper,
-    std::unique_ptr<VideoProcessorProxy> processor,
+    scoped_refptr<VideoProcessorProxy> processor,
     ComD3D11Texture2D output_texture,
     base::Optional<gfx::ColorSpace> output_color_space)
     : size_(size),
diff --git a/media/gpu/windows/d3d11_copying_texture_wrapper.h b/media/gpu/windows/d3d11_copying_texture_wrapper.h
index 7c46c57..b4261cc 100644
--- a/media/gpu/windows/d3d11_copying_texture_wrapper.h
+++ b/media/gpu/windows/d3d11_copying_texture_wrapper.h
@@ -26,7 +26,7 @@
   // be given to the swap chain directly, or video processed later).
   CopyingTexture2DWrapper(const gfx::Size& size,
                           std::unique_ptr<Texture2DWrapper> output_wrapper,
-                          std::unique_ptr<VideoProcessorProxy> processor,
+                          scoped_refptr<VideoProcessorProxy> processor,
                           ComD3D11Texture2D output_texture,
                           base::Optional<gfx::ColorSpace> output_color_space);
   ~CopyingTexture2DWrapper() override;
@@ -46,7 +46,7 @@
 
  private:
   gfx::Size size_;
-  std::unique_ptr<VideoProcessorProxy> video_processor_;
+  scoped_refptr<VideoProcessorProxy> video_processor_;
   std::unique_ptr<Texture2DWrapper> output_texture_wrapper_;
   ComD3D11Texture2D output_texture_;
   // If set, then this is the desired output color space for the copy.
diff --git a/media/gpu/windows/d3d11_copying_texture_wrapper_unittest.cc b/media/gpu/windows/d3d11_copying_texture_wrapper_unittest.cc
index 3c913dd..207bfdcf 100644
--- a/media/gpu/windows/d3d11_copying_texture_wrapper_unittest.cc
+++ b/media/gpu/windows/d3d11_copying_texture_wrapper_unittest.cc
@@ -80,6 +80,9 @@
   base::Optional<gfx::ColorSpace> last_output_color_space_;
   base::Optional<DXGI_HDR_METADATA_HDR10> last_stream_metadata_;
   base::Optional<DXGI_HDR_METADATA_HDR10> last_display_metadata_;
+
+ private:
+  ~MockVideoProcessorProxy() override = default;
 };
 
 class MockTexture2DWrapper : public Texture2DWrapper {
@@ -136,8 +139,8 @@
     gpu_task_runner_ = task_environment_.GetMainThreadTaskRunner();
   }
 
-  std::unique_ptr<MockVideoProcessorProxy> ExpectProcessorProxy() {
-    auto result = std::make_unique<MockVideoProcessorProxy>();
+  scoped_refptr<MockVideoProcessorProxy> ExpectProcessorProxy() {
+    auto result = base::MakeRefCounted<MockVideoProcessorProxy>();
     ON_CALL(*result.get(), MockInit(_, _))
         .WillByDefault(Return(GetProcessorProxyInit()
                                   ? StatusCode::kOk
@@ -215,8 +218,7 @@
   auto texture_wrapper = ExpectTextureWrapper();
   MockTexture2DWrapper* texture_wrapper_raw = texture_wrapper.get();
   auto wrapper = std::make_unique<CopyingTexture2DWrapper>(
-      size, std::move(texture_wrapper), std::move(processor), nullptr,
-      copy_color_space);
+      size, std::move(texture_wrapper), processor, nullptr, copy_color_space);
 
   // TODO: check |gpu_task_runner_|.
 
diff --git a/media/gpu/windows/d3d11_texture_selector.cc b/media/gpu/windows/d3d11_texture_selector.cc
index 14348f8..1bdc0fd 100644
--- a/media/gpu/windows/d3d11_texture_selector.cc
+++ b/media/gpu/windows/d3d11_texture_selector.cc
@@ -16,8 +16,15 @@
 namespace media {
 
 TextureSelector::TextureSelector(VideoPixelFormat pixfmt,
-                                 DXGI_FORMAT output_dxgifmt)
-    : pixel_format_(pixfmt), output_dxgifmt_(output_dxgifmt) {}
+                                 DXGI_FORMAT output_dxgifmt,
+                                 ComD3D11VideoDevice video_device,
+                                 ComD3D11DeviceContext device_context)
+    : pixel_format_(pixfmt),
+      output_dxgifmt_(output_dxgifmt),
+      video_device_(std::move(video_device)),
+      device_context_(std::move(device_context)) {}
+
+TextureSelector::~TextureSelector() = default;
 
 bool SupportsZeroCopy(const gpu::GpuPreferences& preferences,
                       const gpu::GpuDriverBugWorkarounds& workarounds) {
@@ -37,6 +44,8 @@
     DXGI_FORMAT decoder_output_format,
     TextureSelector::HDRMode hdr_output_mode,
     const FormatSupportChecker* format_checker,
+    ComD3D11VideoDevice video_device,
+    ComD3D11DeviceContext device_context,
     MediaLog* media_log) {
   VideoPixelFormat output_pixel_format;
   DXGI_FORMAT output_dxgi_format;
@@ -158,21 +167,20 @@
     MEDIA_LOG(INFO, media_log) << "D3D11VideoDecoder is copying textures";
     return std::make_unique<CopyTextureSelector>(
         output_pixel_format, decoder_output_format, output_dxgi_format,
-        output_color_space);
+        output_color_space, std::move(video_device), std::move(device_context));
   } else {
     MEDIA_LOG(INFO, media_log) << "D3D11VideoDecoder is binding textures";
     // Binding can't change the color space.  The consumer has to do it, if they
     // want to.
     DCHECK(!output_color_space);
-    return std::make_unique<TextureSelector>(output_pixel_format,
-                                             output_dxgi_format);
+    return std::make_unique<TextureSelector>(
+        output_pixel_format, output_dxgi_format, std::move(video_device),
+        std::move(device_context));
   }
 }
 
 std::unique_ptr<Texture2DWrapper> TextureSelector::CreateTextureWrapper(
     ComD3D11Device device,
-    ComD3D11VideoDevice video_device,
-    ComD3D11DeviceContext device_context,
     gfx::Size size) {
   // TODO(liberato): If the output format is rgb, then create a pbuffer wrapper.
   return std::make_unique<DefaultTexture2DWrapper>(size, OutputDXGIFormat(),
@@ -187,16 +195,22 @@
     VideoPixelFormat pixfmt,
     DXGI_FORMAT input_dxgifmt,
     DXGI_FORMAT output_dxgifmt,
-    base::Optional<gfx::ColorSpace> output_color_space)
-    : TextureSelector(pixfmt, output_dxgifmt),
-      output_color_space_(std::move(output_color_space)) {}
+    base::Optional<gfx::ColorSpace> output_color_space,
+    ComD3D11VideoDevice video_device,
+    ComD3D11DeviceContext device_context)
+    : TextureSelector(pixfmt,
+                      output_dxgifmt,
+                      std::move(video_device),
+                      std::move(device_context)),
+      output_color_space_(std::move(output_color_space)),
+      video_processor_proxy_(
+          base::MakeRefCounted<VideoProcessorProxy>(this->video_device(),
+                                                    this->device_context())) {}
 
 CopyTextureSelector::~CopyTextureSelector() = default;
 
 std::unique_ptr<Texture2DWrapper> CopyTextureSelector::CreateTextureWrapper(
     ComD3D11Device device,
-    ComD3D11VideoDevice video_device,
-    ComD3D11DeviceContext device_context,
     gfx::Size size) {
   D3D11_TEXTURE2D_DESC texture_desc = {};
   texture_desc.MipLevels = 1;
@@ -218,8 +232,7 @@
       size,
       std::make_unique<DefaultTexture2DWrapper>(size, OutputDXGIFormat(),
                                                 PixelFormat()),
-      std::make_unique<VideoProcessorProxy>(video_device, device_context),
-      out_texture, output_color_space_);
+      video_processor_proxy_, out_texture, output_color_space_);
 }
 
 bool CopyTextureSelector::WillCopyForTesting() const {
diff --git a/media/gpu/windows/d3d11_texture_selector.h b/media/gpu/windows/d3d11_texture_selector.h
index 59dc981..7de0a4d 100644
--- a/media/gpu/windows/d3d11_texture_selector.h
+++ b/media/gpu/windows/d3d11_texture_selector.h
@@ -30,8 +30,11 @@
     kSDROrHDR = 1,
   };
 
-  TextureSelector(VideoPixelFormat pixfmt, DXGI_FORMAT output_dxgifmt);
-  virtual ~TextureSelector() = default;
+  TextureSelector(VideoPixelFormat pixfmt,
+                  DXGI_FORMAT output_dxgifmt,
+                  ComD3D11VideoDevice video_device,
+                  ComD3D11DeviceContext d3d11_device_context);
+  virtual ~TextureSelector();
 
   static std::unique_ptr<TextureSelector> Create(
       const gpu::GpuPreferences& gpu_preferences,
@@ -39,12 +42,12 @@
       DXGI_FORMAT decoder_output_format,
       HDRMode hdr_output_mode,
       const FormatSupportChecker* format_checker,
+      ComD3D11VideoDevice video_device,
+      ComD3D11DeviceContext device_context,
       MediaLog* media_log);
 
   virtual std::unique_ptr<Texture2DWrapper> CreateTextureWrapper(
       ComD3D11Device device,
-      ComD3D11VideoDevice video_device,
-      ComD3D11DeviceContext,
       gfx::Size size);
 
   VideoPixelFormat PixelFormat() const { return pixel_format_; }
@@ -52,11 +55,21 @@
 
   virtual bool WillCopyForTesting() const;
 
+ protected:
+  const ComD3D11VideoDevice& video_device() const { return video_device_; }
+
+  const ComD3D11DeviceContext& device_context() const {
+    return device_context_;
+  }
+
  private:
   friend class CopyTextureSelector;
 
   const VideoPixelFormat pixel_format_;
   const DXGI_FORMAT output_dxgifmt_;
+
+  ComD3D11VideoDevice video_device_;
+  ComD3D11DeviceContext device_context_;
 };
 
 class MEDIA_GPU_EXPORT CopyTextureSelector : public TextureSelector {
@@ -65,19 +78,20 @@
   CopyTextureSelector(VideoPixelFormat pixfmt,
                       DXGI_FORMAT input_dxgifmt,
                       DXGI_FORMAT output_dxgifmt,
-                      base::Optional<gfx::ColorSpace> output_color_space);
+                      base::Optional<gfx::ColorSpace> output_color_space,
+                      ComD3D11VideoDevice video_device,
+                      ComD3D11DeviceContext d3d11_device_context);
   ~CopyTextureSelector() override;
 
   std::unique_ptr<Texture2DWrapper> CreateTextureWrapper(
       ComD3D11Device device,
-      ComD3D11VideoDevice video_device,
-      ComD3D11DeviceContext,
       gfx::Size size) override;
 
   bool WillCopyForTesting() const override;
 
  private:
   base::Optional<gfx::ColorSpace> output_color_space_;
+  scoped_refptr<VideoProcessorProxy> video_processor_proxy_;
 };
 
 }  // namespace media
diff --git a/media/gpu/windows/d3d11_texture_selector_unittest.cc b/media/gpu/windows/d3d11_texture_selector_unittest.cc
index 09e70280..1793fdf 100644
--- a/media/gpu/windows/d3d11_texture_selector_unittest.cc
+++ b/media/gpu/windows/d3d11_texture_selector_unittest.cc
@@ -60,7 +60,8 @@
         zero_copy_disabled_by_workaround == ZeroCopyDisabledByWorkaround::kTrue;
     auto media_log = std::make_unique<NullMediaLog>();
     return TextureSelector::Create(prefs, workarounds, decoder_output_format,
-                                   hdr_mode, &format_checker_, media_log.get());
+                                   hdr_mode, &format_checker_, nullptr, nullptr,
+                                   media_log.get());
   }
 
   // Set the format checker to succeed any check, except for |disallowed|.
diff --git a/media/gpu/windows/d3d11_video_decoder.cc b/media/gpu/windows/d3d11_video_decoder.cc
index 8351fe0..8d4753e 100644
--- a/media/gpu/windows/d3d11_video_decoder.cc
+++ b/media/gpu/windows/d3d11_video_decoder.cc
@@ -215,7 +215,7 @@
       decoder_configurator_->TextureFormat(),
       is_hdr_supported_ ? TextureSelector::HDRMode::kSDROrHDR
                         : TextureSelector::HDRMode::kSDROnly,
-      &format_checker, media_log_.get());
+      &format_checker, video_device_, device_context_, media_log_.get());
   if (!texture_selector_)
     return StatusCode::kCreateTextureSelectorFailed;
 
@@ -727,8 +727,7 @@
 
     DCHECK(!!in_texture);
 
-    auto tex_wrapper = texture_selector_->CreateTextureWrapper(
-        device_, video_device_, device_context_, size);
+    auto tex_wrapper = texture_selector_->CreateTextureWrapper(device_, size);
     if (!tex_wrapper) {
       NotifyError(StatusCode::kAllocateTextureForCopyingWrapperFailed);
       return;
diff --git a/media/gpu/windows/d3d11_video_processor_proxy.h b/media/gpu/windows/d3d11_video_processor_proxy.h
index 5e15611..2780811 100644
--- a/media/gpu/windows/d3d11_video_processor_proxy.h
+++ b/media/gpu/windows/d3d11_video_processor_proxy.h
@@ -9,6 +9,7 @@
 #include <wrl/client.h>
 #include <cstdint>
 
+#include "base/memory/ref_counted.h"
 #include "media/base/status.h"
 #include "media/gpu/media_gpu_export.h"
 #include "media/gpu/windows/d3d11_com_defs.h"
@@ -19,11 +20,11 @@
 
 // Wrap ID3D11VideoProcessor to provide nicer methods for initialization,
 // color space modification, and output/input view creation.
-class MEDIA_GPU_EXPORT VideoProcessorProxy {
+class MEDIA_GPU_EXPORT VideoProcessorProxy
+    : public base::RefCounted<VideoProcessorProxy> {
  public:
   VideoProcessorProxy(ComD3D11VideoDevice video_device,
                       ComD3D11DeviceContext d3d11_device_context);
-  virtual ~VideoProcessorProxy();
 
   virtual Status Init(uint32_t width, uint32_t height);
 
@@ -57,6 +58,10 @@
                                     UINT stream_count,
                                     D3D11_VIDEO_PROCESSOR_STREAM* streams);
 
+ protected:
+  virtual ~VideoProcessorProxy();
+  friend class base::RefCounted<VideoProcessorProxy>;
+
  private:
   ComD3D11VideoDevice video_device_;
   ComD3D11VideoProcessorEnumerator processor_enumerator_;
diff --git a/media/gpu/windows/d3d11_video_processor_proxy_unittest.cc b/media/gpu/windows/d3d11_video_processor_proxy_unittest.cc
index d46a469..7cd70d5f 100644
--- a/media/gpu/windows/d3d11_video_processor_proxy_unittest.cc
+++ b/media/gpu/windows/d3d11_video_processor_proxy_unittest.cc
@@ -35,7 +35,7 @@
   MockD3D11VideoProcessorEnumerator enumerator_;
   MockD3D11VideoProcessor proc_;
 
-  std::unique_ptr<VideoProcessorProxy> CreateProxy() {
+  scoped_refptr<VideoProcessorProxy> CreateProxy() {
     dev_ = MakeComPtr<D3D11VideoDeviceMock>();
     ctx_ = MakeComPtr<D3D11DeviceContextMock>();
     vctx_ = MakeComPtr<D3D11VideoContextMock>();
@@ -51,7 +51,7 @@
     EXPECT_CALL(*ctx_.Get(), QueryInterface(_, _))
         .WillOnce(SetComPointeeAndReturnOk<1>(vctx_.Get()));
 
-    return std::make_unique<VideoProcessorProxy>(dev_, ctx_);
+    return base::MakeRefCounted<VideoProcessorProxy>(dev_, ctx_);
   }
 
   // Pull a random pointer off the stack, rather than relying on nullptrs.
diff --git a/mojo/public/cpp/base/BUILD.gn b/mojo/public/cpp/base/BUILD.gn
index 9aaf1e0..ee0eb15 100644
--- a/mojo/public/cpp/base/BUILD.gn
+++ b/mojo/public/cpp/base/BUILD.gn
@@ -90,6 +90,8 @@
     "generic_pending_receiver_mojom_traits.h",
     "read_only_buffer_mojom_traits.cc",
     "read_only_buffer_mojom_traits.h",
+    "read_only_file_mojom_traits.cc",
+    "read_only_file_mojom_traits.h",
     "shared_memory_mojom_traits.cc",
     "shared_memory_mojom_traits.h",
     "time_mojom_traits.cc",
diff --git a/mojo/public/cpp/base/file_unittest.cc b/mojo/public/cpp/base/file_unittest.cc
index e1db729..cf9f032 100644
--- a/mojo/public/cpp/base/file_unittest.cc
+++ b/mojo/public/cpp/base/file_unittest.cc
@@ -3,9 +3,13 @@
 // found in the LICENSE file.
 
 #include "base/files/scoped_temp_dir.h"
+#include "base/sync_socket.h"
+#include "build/build_config.h"
 #include "mojo/public/cpp/base/file_mojom_traits.h"
+#include "mojo/public/cpp/base/read_only_file_mojom_traits.h"
 #include "mojo/public/cpp/test_support/test_utils.h"
 #include "mojo/public/mojom/base/file.mojom.h"
+#include "mojo/public/mojom/base/read_only_file.mojom.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace mojo_base {
@@ -69,5 +73,83 @@
   EXPECT_FALSE(file_out.IsValid());
 }
 
+TEST(FileTest, ReadOnlyFile) {
+  base::ScopedTempDir temp_dir;
+  ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
+
+  base::File file(
+      temp_dir.GetPath().AppendASCII("test_file.txt"),
+      base::File::FLAG_CREATE | base::File::FLAG_WRITE | base::File::FLAG_READ);
+  const base::StringPiece test_content =
+      "A test string to be stored in a test file";
+  file.WriteAtCurrentPos(test_content.data(),
+                         base::checked_cast<int>(test_content.size()));
+  file.Close();
+
+  base::File readonly(temp_dir.GetPath().AppendASCII("test_file.txt"),
+                      base::File::FLAG_OPEN | base::File::FLAG_READ);
+
+  base::File file_out;
+  ASSERT_TRUE(mojo::test::SerializeAndDeserialize<mojom::ReadOnlyFile>(
+      &readonly, &file_out));
+  std::vector<char> content(test_content.size());
+  ASSERT_TRUE(file_out.IsValid());
+  ASSERT_FALSE(file_out.async());
+  ASSERT_EQ(static_cast<int>(test_content.size()),
+            file_out.Read(0, content.data(),
+                          base::checked_cast<int>(test_content.size())));
+  EXPECT_EQ(test_content,
+            base::StringPiece(content.data(), test_content.size()));
+}
+
+// This dies only if we can interrogate the underlying platform handle.
+#if defined(OS_WIN) || defined(OS_POSIX) || defined(OS_FUCHSIA)
+#if !defined(OS_NACL) && !defined(OS_AIX)
+TEST(FileTest, ReadOnlyFileDeath) {
+  base::ScopedTempDir temp_dir;
+  ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
+
+  base::File file(
+      temp_dir.GetPath().AppendASCII("test_file.txt"),
+      base::File::FLAG_CREATE | base::File::FLAG_WRITE | base::File::FLAG_READ);
+  const base::StringPiece test_content =
+      "A test string to be stored in a test file";
+  file.WriteAtCurrentPos(test_content.data(),
+                         base::checked_cast<int>(test_content.size()));
+  file.Close();
+
+  base::File writable(
+      temp_dir.GetPath().AppendASCII("test_file.txt"),
+      base::File::FLAG_OPEN | base::File::FLAG_READ | base::File::FLAG_WRITE);
+
+  base::File file_out;
+  EXPECT_DEATH_IF_SUPPORTED(
+      mojo::test::SerializeAndDeserialize<mojom::ReadOnlyFile>(&writable,
+                                                               &file_out),
+      "Check failed: IsReadOnlyFile");
+}
+#endif  // !defined(OS_NACL) && !defined(OS_AIX)
+#endif  // defined(OS_WIN) || defined(OS_POSIX) || defined(OS_FUCHSIA)
+
+// This should work on all platforms. This check might be relaxed in which case
+// this test can be removed.
+TEST(FileTest, NonPhysicalFileDeath) {
+  base::SyncSocket sync_a;
+  base::SyncSocket sync_b;
+  ASSERT_TRUE(base::SyncSocket::CreatePair(&sync_a, &sync_b));
+  base::File file_pipe_a(sync_a.Take());
+  base::File file_pipe_b(sync_b.Take());
+
+  base::File file_out;
+  EXPECT_DEATH_IF_SUPPORTED(
+      mojo::test::SerializeAndDeserialize<mojom::ReadOnlyFile>(&file_pipe_a,
+                                                               &file_out),
+      "Check failed: IsPhysicalFile");
+  EXPECT_DEATH_IF_SUPPORTED(
+      mojo::test::SerializeAndDeserialize<mojom::ReadOnlyFile>(&file_pipe_b,
+                                                               &file_out),
+      "Check failed: IsPhysicalFile");
+}
+
 }  // namespace file_unittest
 }  // namespace mojo_base
diff --git a/mojo/public/cpp/base/read_only_file_mojom_traits.cc b/mojo/public/cpp/base/read_only_file_mojom_traits.cc
new file mode 100644
index 0000000..bef58e5
--- /dev/null
+++ b/mojo/public/cpp/base/read_only_file_mojom_traits.cc
@@ -0,0 +1,96 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "mojo/public/cpp/base/read_only_file_mojom_traits.h"
+
+#include "base/files/file.h"
+#include "build/build_config.h"
+
+#if defined(OS_POSIX) || defined(OS_FUCHSIA)
+#include <fcntl.h>
+#endif
+#if defined(OS_WIN)
+#include <windows.h>
+#include <winternl.h>
+#endif
+
+namespace mojo {
+namespace {
+#if defined(OS_WIN)
+bool GetGrantedAccess(HANDLE handle, DWORD* flags) {
+  static const auto nt_query_object =
+      reinterpret_cast<decltype(&NtQueryObject)>(
+          GetProcAddress(GetModuleHandle(L"ntdll.dll"), "NtQueryObject"));
+  PUBLIC_OBJECT_BASIC_INFORMATION info;
+  ULONG len = sizeof(info);
+  ULONG consumed = 0;
+  auto ret =
+      nt_query_object(handle, ObjectBasicInformation, &info, len, &consumed);
+  if (ret)
+    return false;
+  *flags = info.GrantedAccess;
+  return true;
+}
+#endif  // defined(OS_WIN)
+
+// True if the underlying handle is only readable. Where possible this excludes
+// deletion, writing, truncation, append and other operations that might modify
+// the underlying file. False if we can tell that the file could be modified.
+// On platforms where we cannot test the handle, always returns true.
+bool IsReadOnlyFile(base::File& file) {
+  bool is_readonly = true;
+#if defined(OS_WIN)
+  DWORD flags = 0;
+  if (!GetGrantedAccess(file.GetPlatformFile(), &flags))
+    return false;
+
+  // Cannot use GENERIC_WRITE as that includes SYNCHRONIZE.
+  // This is ~(all the writable permissions).
+  is_readonly =
+      !(flags & (FILE_APPEND_DATA | FILE_WRITE_ATTRIBUTES | FILE_WRITE_DATA |
+                 FILE_WRITE_EA | WRITE_DAC | WRITE_OWNER | DELETE));
+#elif defined(OS_FUCHSIA) || \
+    (defined(OS_POSIX) && !defined(OS_NACL) && !defined(OS_AIX))
+  is_readonly =
+      (fcntl(file.GetPlatformFile(), F_GETFL) & O_ACCMODE) == O_RDONLY;
+#endif
+  return is_readonly;
+}
+
+bool IsPhysicalFile(base::File& file) {
+#if defined(OS_WIN)
+  // Verify if this is a real file (not a socket/pipe etc.).
+  DWORD type = GetFileType(file.GetPlatformFile());
+  return type == FILE_TYPE_DISK;
+#else
+  base::stat_wrapper_t stat;
+  if (base::File::Fstat(file.GetPlatformFile(), &stat) != 0)
+    return false;
+  return S_ISREG(stat.st_mode);
+#endif
+}
+
+}  // namespace
+
+mojo::PlatformHandle StructTraits<mojo_base::mojom::ReadOnlyFileDataView,
+                                  base::File>::fd(base::File& file) {
+  DCHECK(file.IsValid());
+  // For now we require real files as on some platforms it is too difficult to
+  // be sure that more general handles cannot be written or made writable. This
+  // could be relaxed if an interface needs readonly pipes.
+  CHECK(IsPhysicalFile(file));
+  CHECK(IsReadOnlyFile(file));
+
+  return mojo::PlatformHandle(
+      base::ScopedPlatformFile(file.TakePlatformFile()));
+}
+
+bool StructTraits<mojo_base::mojom::ReadOnlyFileDataView, base::File>::Read(
+    mojo_base::mojom::ReadOnlyFileDataView data,
+    base::File* file) {
+  *file = base::File(data.TakeFd().TakePlatformFile(), data.async());
+  return true;
+}
+
+}  // namespace mojo
diff --git a/mojo/public/cpp/base/read_only_file_mojom_traits.h b/mojo/public/cpp/base/read_only_file_mojom_traits.h
new file mode 100644
index 0000000..025ee7f
--- /dev/null
+++ b/mojo/public/cpp/base/read_only_file_mojom_traits.h
@@ -0,0 +1,29 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef MOJO_PUBLIC_CPP_BASE_READ_ONLY_FILE_MOJOM_TRAITS_H_
+#define MOJO_PUBLIC_CPP_BASE_READ_ONLY_FILE_MOJOM_TRAITS_H_
+
+#include "base/component_export.h"
+#include "base/files/file.h"
+#include "mojo/public/mojom/base/read_only_file.mojom-shared.h"
+
+namespace mojo {
+
+template <>
+struct COMPONENT_EXPORT(MOJO_BASE_SHARED_TRAITS)
+    StructTraits<mojo_base::mojom::ReadOnlyFileDataView, base::File> {
+  static bool IsNull(const base::File& file) { return !file.IsValid(); }
+
+  static void SetToNull(base::File* file) { *file = base::File(); }
+
+  static mojo::PlatformHandle fd(base::File& file);
+  static bool async(base::File& file) { return file.async(); }
+  static bool Read(mojo_base::mojom::ReadOnlyFileDataView data,
+                   base::File* file);
+};
+
+}  // namespace mojo
+
+#endif  // MOJO_PUBLIC_CPP_BASE_READ_ONLY_FILE_MOJOM_TRAITS_H_
diff --git a/mojo/public/mojom/base/BUILD.gn b/mojo/public/mojom/base/BUILD.gn
index 61bb72a..ebc7965 100644
--- a/mojo/public/mojom/base/BUILD.gn
+++ b/mojo/public/mojom/base/BUILD.gn
@@ -21,6 +21,7 @@
     "message_pump_type.mojom",
     "process_id.mojom",
     "read_only_buffer.mojom",
+    "read_only_file.mojom",
     "ref_counted_memory.mojom",
     "shared_memory.mojom",
     "string16.mojom",
@@ -121,6 +122,24 @@
     {
       types = [
         {
+          mojom = "mojo_base.mojom.ReadOnlyFile"
+          cpp = "::base::File"
+          move_only = true
+          nullable_is_same_type = true
+          force_serialize = true
+        },
+      ]
+      traits_headers =
+          [ "//mojo/public/cpp/base/read_only_file_mojom_traits.h" ]
+      traits_public_deps = [
+        "//base",
+        "//mojo/public/cpp/base",
+        "//mojo/public/cpp/base:shared_typemap_traits",
+      ]
+    },
+    {
+      types = [
+        {
           mojom = "mojo_base.mojom.GenericPendingReceiver"
           cpp = "::mojo::GenericPendingReceiver"
           move_only = true
diff --git a/mojo/public/mojom/base/read_only_file.mojom b/mojo/public/mojom/base/read_only_file.mojom
new file mode 100644
index 0000000..6f361ffe
--- /dev/null
+++ b/mojo/public/mojom/base/read_only_file.mojom
@@ -0,0 +1,20 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+module mojo_base.mojom;
+
+// Corresponds to |base::File| in base/files/file.h but, on most
+// platforms, will not serialise handles which are writable. At
+// present this only supports physically backed files, but this may be
+// relaxed in future.
+//
+// SECURITY_NOTE: This type is an indication that a readonly handle can
+// be provided. A sandboxed process should ensure that the handle cannot
+// be made writable. This may not be possible on all platforms.
+//
+// See |file_mojom_traits.cc| for details.
+struct ReadOnlyFile {
+  handle<platform> fd;
+  bool async;
+};
diff --git a/mojo/public/tools/bindings/generators/mojom_js_generator.py b/mojo/public/tools/bindings/generators/mojom_js_generator.py
index d8e275d..1868de5 100644
--- a/mojo/public/tools/bindings/generators/mojom_js_generator.py
+++ b/mojo/public/tools/bindings/generators/mojom_js_generator.py
@@ -1,7 +1,6 @@
 # Copyright 2013 The Chromium Authors. All rights reserved.
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
-
 """Generates JavaScript source files from a mojom.Module."""
 
 import mojom.generate.generator as generator
@@ -17,115 +16,115 @@
   import urllib.request as urllib_request
 
 _kind_to_javascript_default_value = {
-  mojom.BOOL:                  "false",
-  mojom.INT8:                  "0",
-  mojom.UINT8:                 "0",
-  mojom.INT16:                 "0",
-  mojom.UINT16:                "0",
-  mojom.INT32:                 "0",
-  mojom.UINT32:                "0",
-  mojom.FLOAT:                 "0",
-  mojom.HANDLE:                "null",
-  mojom.DCPIPE:                "null",
-  mojom.DPPIPE:                "null",
-  mojom.MSGPIPE:               "null",
-  mojom.SHAREDBUFFER:          "null",
-  mojom.PLATFORMHANDLE:          "null",
-  mojom.NULLABLE_HANDLE:       "null",
-  mojom.NULLABLE_DCPIPE:       "null",
-  mojom.NULLABLE_DPPIPE:       "null",
-  mojom.NULLABLE_MSGPIPE:      "null",
-  mojom.NULLABLE_SHAREDBUFFER: "null",
-  mojom.NULLABLE_PLATFORMHANDLE: "null",
-  mojom.INT64:                 "0",
-  mojom.UINT64:                "0",
-  mojom.DOUBLE:                "0",
-  mojom.STRING:                "null",
-  mojom.NULLABLE_STRING:       "null"
+    mojom.BOOL: "false",
+    mojom.INT8: "0",
+    mojom.UINT8: "0",
+    mojom.INT16: "0",
+    mojom.UINT16: "0",
+    mojom.INT32: "0",
+    mojom.UINT32: "0",
+    mojom.FLOAT: "0",
+    mojom.HANDLE: "null",
+    mojom.DCPIPE: "null",
+    mojom.DPPIPE: "null",
+    mojom.MSGPIPE: "null",
+    mojom.SHAREDBUFFER: "null",
+    mojom.PLATFORMHANDLE: "null",
+    mojom.NULLABLE_HANDLE: "null",
+    mojom.NULLABLE_DCPIPE: "null",
+    mojom.NULLABLE_DPPIPE: "null",
+    mojom.NULLABLE_MSGPIPE: "null",
+    mojom.NULLABLE_SHAREDBUFFER: "null",
+    mojom.NULLABLE_PLATFORMHANDLE: "null",
+    mojom.INT64: "0",
+    mojom.UINT64: "0",
+    mojom.DOUBLE: "0",
+    mojom.STRING: "null",
+    mojom.NULLABLE_STRING: "null"
 }
 
 _kind_to_codec_type = {
-  mojom.BOOL:                  "codec.Uint8",
-  mojom.INT8:                  "codec.Int8",
-  mojom.UINT8:                 "codec.Uint8",
-  mojom.INT16:                 "codec.Int16",
-  mojom.UINT16:                "codec.Uint16",
-  mojom.INT32:                 "codec.Int32",
-  mojom.UINT32:                "codec.Uint32",
-  mojom.FLOAT:                 "codec.Float",
-  mojom.HANDLE:                "codec.Handle",
-  mojom.DCPIPE:                "codec.Handle",
-  mojom.DPPIPE:                "codec.Handle",
-  mojom.MSGPIPE:               "codec.Handle",
-  mojom.SHAREDBUFFER:          "codec.Handle",
-  mojom.PLATFORMHANDLE:        "codec.Handle",
-  mojom.NULLABLE_HANDLE:       "codec.NullableHandle",
-  mojom.NULLABLE_DCPIPE:       "codec.NullableHandle",
-  mojom.NULLABLE_DPPIPE:       "codec.NullableHandle",
-  mojom.NULLABLE_MSGPIPE:      "codec.NullableHandle",
-  mojom.NULLABLE_SHAREDBUFFER: "codec.NullableHandle",
-  mojom.NULLABLE_PLATFORMHANDLE: "codec.NullableHandle",
-  mojom.INT64:                 "codec.Int64",
-  mojom.UINT64:                "codec.Uint64",
-  mojom.DOUBLE:                "codec.Double",
-  mojom.STRING:                "codec.String",
-  mojom.NULLABLE_STRING:       "codec.NullableString",
+    mojom.BOOL: "codec.Uint8",
+    mojom.INT8: "codec.Int8",
+    mojom.UINT8: "codec.Uint8",
+    mojom.INT16: "codec.Int16",
+    mojom.UINT16: "codec.Uint16",
+    mojom.INT32: "codec.Int32",
+    mojom.UINT32: "codec.Uint32",
+    mojom.FLOAT: "codec.Float",
+    mojom.HANDLE: "codec.Handle",
+    mojom.DCPIPE: "codec.Handle",
+    mojom.DPPIPE: "codec.Handle",
+    mojom.MSGPIPE: "codec.Handle",
+    mojom.SHAREDBUFFER: "codec.Handle",
+    mojom.PLATFORMHANDLE: "codec.Handle",
+    mojom.NULLABLE_HANDLE: "codec.NullableHandle",
+    mojom.NULLABLE_DCPIPE: "codec.NullableHandle",
+    mojom.NULLABLE_DPPIPE: "codec.NullableHandle",
+    mojom.NULLABLE_MSGPIPE: "codec.NullableHandle",
+    mojom.NULLABLE_SHAREDBUFFER: "codec.NullableHandle",
+    mojom.NULLABLE_PLATFORMHANDLE: "codec.NullableHandle",
+    mojom.INT64: "codec.Int64",
+    mojom.UINT64: "codec.Uint64",
+    mojom.DOUBLE: "codec.Double",
+    mojom.STRING: "codec.String",
+    mojom.NULLABLE_STRING: "codec.NullableString",
 }
 
 _kind_to_closure_type = {
-  mojom.BOOL:                  "boolean",
-  mojom.INT8:                  "number",
-  mojom.UINT8:                 "number",
-  mojom.INT16:                 "number",
-  mojom.UINT16:                "number",
-  mojom.INT32:                 "number",
-  mojom.UINT32:                "number",
-  mojom.FLOAT:                 "number",
-  mojom.INT64:                 "number",
-  mojom.UINT64:                "number",
-  mojom.DOUBLE:                "number",
-  mojom.STRING:                "string",
-  mojom.NULLABLE_STRING:       "string",
-  mojom.HANDLE:                "MojoHandle",
-  mojom.DCPIPE:                "MojoHandle",
-  mojom.DPPIPE:                "MojoHandle",
-  mojom.MSGPIPE:               "MojoHandle",
-  mojom.SHAREDBUFFER:          "MojoHandle",
-  mojom.PLATFORMHANDLE:        "MojoHandle",
-  mojom.NULLABLE_HANDLE:       "MojoHandle",
-  mojom.NULLABLE_DCPIPE:       "MojoHandle",
-  mojom.NULLABLE_DPPIPE:       "MojoHandle",
-  mojom.NULLABLE_MSGPIPE:      "MojoHandle",
-  mojom.NULLABLE_SHAREDBUFFER: "MojoHandle",
-  mojom.NULLABLE_PLATFORMHANDLE: "MojoHandle",
+    mojom.BOOL: "boolean",
+    mojom.INT8: "number",
+    mojom.UINT8: "number",
+    mojom.INT16: "number",
+    mojom.UINT16: "number",
+    mojom.INT32: "number",
+    mojom.UINT32: "number",
+    mojom.FLOAT: "number",
+    mojom.INT64: "number",
+    mojom.UINT64: "number",
+    mojom.DOUBLE: "number",
+    mojom.STRING: "string",
+    mojom.NULLABLE_STRING: "string",
+    mojom.HANDLE: "MojoHandle",
+    mojom.DCPIPE: "MojoHandle",
+    mojom.DPPIPE: "MojoHandle",
+    mojom.MSGPIPE: "MojoHandle",
+    mojom.SHAREDBUFFER: "MojoHandle",
+    mojom.PLATFORMHANDLE: "MojoHandle",
+    mojom.NULLABLE_HANDLE: "MojoHandle",
+    mojom.NULLABLE_DCPIPE: "MojoHandle",
+    mojom.NULLABLE_DPPIPE: "MojoHandle",
+    mojom.NULLABLE_MSGPIPE: "MojoHandle",
+    mojom.NULLABLE_SHAREDBUFFER: "MojoHandle",
+    mojom.NULLABLE_PLATFORMHANDLE: "MojoHandle",
 }
 
 _kind_to_lite_js_type = {
-  mojom.BOOL:                  "mojo.internal.Bool",
-  mojom.INT8:                  "mojo.internal.Int8",
-  mojom.UINT8:                 "mojo.internal.Uint8",
-  mojom.INT16:                 "mojo.internal.Int16",
-  mojom.UINT16:                "mojo.internal.Uint16",
-  mojom.INT32:                 "mojo.internal.Int32",
-  mojom.UINT32:                "mojo.internal.Uint32",
-  mojom.FLOAT:                 "mojo.internal.Float",
-  mojom.HANDLE:                "mojo.internal.Handle",
-  mojom.DCPIPE:                "mojo.internal.Handle",
-  mojom.DPPIPE:                "mojo.internal.Handle",
-  mojom.MSGPIPE:               "mojo.internal.Handle",
-  mojom.SHAREDBUFFER:          "mojo.internal.Handle",
-  mojom.PLATFORMHANDLE:        "mojo.internal.Handle",
-  mojom.NULLABLE_HANDLE:       "mojo.internal.Handle",
-  mojom.NULLABLE_DCPIPE:       "mojo.internal.Handle",
-  mojom.NULLABLE_DPPIPE:       "mojo.internal.Handle",
-  mojom.NULLABLE_MSGPIPE:      "mojo.internal.Handle",
-  mojom.NULLABLE_SHAREDBUFFER: "mojo.internal.Handle",
-  mojom.NULLABLE_PLATFORMHANDLE: "mojo.internal.Handle",
-  mojom.INT64:                 "mojo.internal.Int64",
-  mojom.UINT64:                "mojo.internal.Uint64",
-  mojom.DOUBLE:                "mojo.internal.Double",
-  mojom.STRING:                "mojo.internal.String",
-  mojom.NULLABLE_STRING:       "mojo.internal.String",
+    mojom.BOOL: "mojo.internal.Bool",
+    mojom.INT8: "mojo.internal.Int8",
+    mojom.UINT8: "mojo.internal.Uint8",
+    mojom.INT16: "mojo.internal.Int16",
+    mojom.UINT16: "mojo.internal.Uint16",
+    mojom.INT32: "mojo.internal.Int32",
+    mojom.UINT32: "mojo.internal.Uint32",
+    mojom.FLOAT: "mojo.internal.Float",
+    mojom.HANDLE: "mojo.internal.Handle",
+    mojom.DCPIPE: "mojo.internal.Handle",
+    mojom.DPPIPE: "mojo.internal.Handle",
+    mojom.MSGPIPE: "mojo.internal.Handle",
+    mojom.SHAREDBUFFER: "mojo.internal.Handle",
+    mojom.PLATFORMHANDLE: "mojo.internal.Handle",
+    mojom.NULLABLE_HANDLE: "mojo.internal.Handle",
+    mojom.NULLABLE_DCPIPE: "mojo.internal.Handle",
+    mojom.NULLABLE_DPPIPE: "mojo.internal.Handle",
+    mojom.NULLABLE_MSGPIPE: "mojo.internal.Handle",
+    mojom.NULLABLE_SHAREDBUFFER: "mojo.internal.Handle",
+    mojom.NULLABLE_PLATFORMHANDLE: "mojo.internal.Handle",
+    mojom.INT64: "mojo.internal.Int64",
+    mojom.UINT64: "mojo.internal.Uint64",
+    mojom.DOUBLE: "mojo.internal.Double",
+    mojom.STRING: "mojo.internal.String",
+    mojom.NULLABLE_STRING: "mojo.internal.String",
 }
 
 _js_reserved_keywords = [
@@ -176,31 +175,31 @@
 ]
 
 _primitive_kind_to_fuzz_type = {
-  mojom.BOOL:                  "Bool",
-  mojom.INT8:                  "Int8",
-  mojom.UINT8:                 "Uint8",
-  mojom.INT16:                 "Int16",
-  mojom.UINT16:                "Uint16",
-  mojom.INT32:                 "Int32",
-  mojom.UINT32:                "Uint32",
-  mojom.FLOAT:                 "Float",
-  mojom.INT64:                 "Int64",
-  mojom.UINT64:                "Uint64",
-  mojom.DOUBLE:                "Double",
-  mojom.STRING:                "String",
-  mojom.NULLABLE_STRING:       "String",
-  mojom.HANDLE:                "Handle",
-  mojom.DCPIPE:                "DataPipeConsumer",
-  mojom.DPPIPE:                "DataPipeProducer",
-  mojom.MSGPIPE:               "MessagePipe",
-  mojom.SHAREDBUFFER:          "SharedBuffer",
-  mojom.PLATFORMHANDLE:        "PlatformHandle",
-  mojom.NULLABLE_HANDLE:       "Handle",
-  mojom.NULLABLE_DCPIPE:       "DataPipeConsumer",
-  mojom.NULLABLE_DPPIPE:       "DataPipeProducer",
-  mojom.NULLABLE_MSGPIPE:      "MessagePipe",
-  mojom.NULLABLE_SHAREDBUFFER: "SharedBuffer",
-  mojom.NULLABLE_PLATFORMHANDLE: "PlatformHandle",
+    mojom.BOOL: "Bool",
+    mojom.INT8: "Int8",
+    mojom.UINT8: "Uint8",
+    mojom.INT16: "Int16",
+    mojom.UINT16: "Uint16",
+    mojom.INT32: "Int32",
+    mojom.UINT32: "Uint32",
+    mojom.FLOAT: "Float",
+    mojom.INT64: "Int64",
+    mojom.UINT64: "Uint64",
+    mojom.DOUBLE: "Double",
+    mojom.STRING: "String",
+    mojom.NULLABLE_STRING: "String",
+    mojom.HANDLE: "Handle",
+    mojom.DCPIPE: "DataPipeConsumer",
+    mojom.DPPIPE: "DataPipeProducer",
+    mojom.MSGPIPE: "MessagePipe",
+    mojom.SHAREDBUFFER: "SharedBuffer",
+    mojom.PLATFORMHANDLE: "PlatformHandle",
+    mojom.NULLABLE_HANDLE: "Handle",
+    mojom.NULLABLE_DCPIPE: "DataPipeConsumer",
+    mojom.NULLABLE_DPPIPE: "DataPipeProducer",
+    mojom.NULLABLE_MSGPIPE: "MessagePipe",
+    mojom.NULLABLE_SHAREDBUFFER: "SharedBuffer",
+    mojom.NULLABLE_PLATFORMHANDLE: "PlatformHandle",
 }
 
 
@@ -260,26 +259,27 @@
     return mojom_name
 
   def StylizeModule(self, mojom_namespace):
-    return '.'.join(generator.ToCamel(word, lower_initial=True)
-                        for word in mojom_namespace.split('.'))
+    return '.'.join(
+        generator.ToCamel(word, lower_initial=True)
+        for word in mojom_namespace.split('.'))
 
 
 class Generator(generator.Generator):
   def _GetParameters(self, for_compile=False):
     return {
-      "enums": self.module.enums,
-      "html_imports": self._GenerateHtmlImports(),
-      "imports": self.module.imports,
-      "interfaces": self.module.interfaces,
-      "kinds": self.module.kinds,
-      "module": self.module,
-      "mojom_filename": os.path.basename(self.module.path),
-      "mojom_namespace": self.module.mojom_namespace,
-      "structs": self.module.structs + self._GetStructsFromMethods(),
-      "unions": self.module.unions,
-      "generate_fuzzing": self.generate_fuzzing,
-      "generate_closure_exports": for_compile,
-      "generate_struct_deserializers": self.js_generate_struct_deserializers,
+        "enums": self.module.enums,
+        "html_imports": self._GenerateHtmlImports(),
+        "imports": self.module.imports,
+        "interfaces": self.module.interfaces,
+        "kinds": self.module.kinds,
+        "module": self.module,
+        "mojom_filename": os.path.basename(self.module.path),
+        "mojom_namespace": self.module.mojom_namespace,
+        "structs": self.module.structs + self._GetStructsFromMethods(),
+        "unions": self.module.unions,
+        "generate_fuzzing": self.generate_fuzzing,
+        "generate_closure_exports": for_compile,
+        "generate_struct_deserializers": self.js_generate_struct_deserializers,
     }
 
   @staticmethod
@@ -288,65 +288,66 @@
 
   def GetFilters(self):
     js_filters = {
-      "closure_type": self._ClosureType,
-      "decode_snippet": self._JavaScriptDecodeSnippet,
-      "default_value": self._JavaScriptDefaultValue,
-      "encode_snippet": self._JavaScriptEncodeSnippet,
-      "expression_to_text": self._ExpressionToText,
-      "expression_to_text_lite": self._ExpressionToTextLite,
-      "field_offset": JavaScriptFieldOffset,
-      "get_relative_url": GetRelativeUrl,
-      "has_callbacks": mojom.HasCallbacks,
-      "is_any_handle_or_interface_kind": mojom.IsAnyHandleOrInterfaceKind,
-      "is_array_kind": mojom.IsArrayKind,
-      "is_associated_interface_kind": mojom.IsAssociatedInterfaceKind,
-      "is_pending_associated_remote_kind": mojom.IsPendingAssociatedRemoteKind,
-      "is_associated_interface_request_kind":
-          mojom.IsAssociatedInterfaceRequestKind,
-      "is_pending_associated_receiver_kind":
-          mojom.IsPendingAssociatedReceiverKind,
-      "is_bool_kind": mojom.IsBoolKind,
-      "is_enum_kind": mojom.IsEnumKind,
-      "is_any_handle_kind": mojom.IsAnyHandleKind,
-      "is_any_interface_kind": mojom.IsAnyInterfaceKind,
-      "is_interface_kind": mojom.IsInterfaceKind,
-      "is_pending_remote_kind": mojom.IsPendingRemoteKind,
-      "is_interface_request_kind": mojom.IsInterfaceRequestKind,
-      "is_pending_receiver_kind": mojom.IsPendingReceiverKind,
-      "is_map_kind": mojom.IsMapKind,
-      "is_object_kind": mojom.IsObjectKind,
-      "is_reference_kind": mojom.IsReferenceKind,
-      "is_string_kind": mojom.IsStringKind,
-      "is_struct_kind": mojom.IsStructKind,
-      "is_union_kind": mojom.IsUnionKind,
-      "js_type": self._JavaScriptType,
-      "lite_default_value": self._LiteJavaScriptDefaultValue,
-      "lite_js_type": self._LiteJavaScriptType,
-      "lite_js_import_name": self._LiteJavaScriptImportName,
-      "method_passes_associated_kinds": mojom.MethodPassesAssociatedKinds,
-      "namespace_declarations": self._NamespaceDeclarations,
-      "closure_type_with_nullability": self._ClosureTypeWithNullability,
-      "lite_closure_param_type": self._LiteClosureParamType,
-      "lite_closure_type": self._LiteClosureType,
-      "lite_closure_type_with_nullability":
-          self._LiteClosureTypeWithNullability,
-      "lite_closure_field_type": self._LiteClosureFieldType,
-      "payload_size": JavaScriptPayloadSize,
-      "to_camel": generator.ToCamel,
-      "union_decode_snippet": self._JavaScriptUnionDecodeSnippet,
-      "union_encode_snippet": self._JavaScriptUnionEncodeSnippet,
-      "validate_array_params": self._JavaScriptValidateArrayParams,
-      "validate_enum_params": self._JavaScriptValidateEnumParams,
-      "validate_map_params": self._JavaScriptValidateMapParams,
-      "validate_nullable_params": self._JavaScriptNullableParam,
-      "validate_struct_params": self._JavaScriptValidateStructParams,
-      "validate_union_params": self._JavaScriptValidateUnionParams,
-      "sanitize_identifier": self._JavaScriptSanitizeIdentifier,
-      "contains_handles_or_interfaces": mojom.ContainsHandlesOrInterfaces,
-      "fuzz_handle_name": self._FuzzHandleName,
-      "is_primitive_kind": self._IsPrimitiveKind,
-      "primitive_to_fuzz_type": self._PrimitiveToFuzzType,
-      "to_js_boolean": self._ToJsBoolean,
+        "closure_type": self._ClosureType,
+        "decode_snippet": self._JavaScriptDecodeSnippet,
+        "default_value": self._JavaScriptDefaultValue,
+        "encode_snippet": self._JavaScriptEncodeSnippet,
+        "expression_to_text": self._ExpressionToText,
+        "expression_to_text_lite": self._ExpressionToTextLite,
+        "field_offset": JavaScriptFieldOffset,
+        "get_relative_url": GetRelativeUrl,
+        "has_callbacks": mojom.HasCallbacks,
+        "is_any_handle_or_interface_kind": mojom.IsAnyHandleOrInterfaceKind,
+        "is_array_kind": mojom.IsArrayKind,
+        "is_associated_interface_kind": mojom.IsAssociatedInterfaceKind,
+        "is_pending_associated_remote_kind":
+        mojom.IsPendingAssociatedRemoteKind,
+        "is_associated_interface_request_kind":
+        mojom.IsAssociatedInterfaceRequestKind,
+        "is_pending_associated_receiver_kind":
+        mojom.IsPendingAssociatedReceiverKind,
+        "is_bool_kind": mojom.IsBoolKind,
+        "is_enum_kind": mojom.IsEnumKind,
+        "is_any_handle_kind": mojom.IsAnyHandleKind,
+        "is_any_interface_kind": mojom.IsAnyInterfaceKind,
+        "is_interface_kind": mojom.IsInterfaceKind,
+        "is_pending_remote_kind": mojom.IsPendingRemoteKind,
+        "is_interface_request_kind": mojom.IsInterfaceRequestKind,
+        "is_pending_receiver_kind": mojom.IsPendingReceiverKind,
+        "is_map_kind": mojom.IsMapKind,
+        "is_object_kind": mojom.IsObjectKind,
+        "is_reference_kind": mojom.IsReferenceKind,
+        "is_string_kind": mojom.IsStringKind,
+        "is_struct_kind": mojom.IsStructKind,
+        "is_union_kind": mojom.IsUnionKind,
+        "js_type": self._JavaScriptType,
+        "lite_default_value": self._LiteJavaScriptDefaultValue,
+        "lite_js_type": self._LiteJavaScriptType,
+        "lite_js_import_name": self._LiteJavaScriptImportName,
+        "method_passes_associated_kinds": mojom.MethodPassesAssociatedKinds,
+        "namespace_declarations": self._NamespaceDeclarations,
+        "closure_type_with_nullability": self._ClosureTypeWithNullability,
+        "lite_closure_param_type": self._LiteClosureParamType,
+        "lite_closure_type": self._LiteClosureType,
+        "lite_closure_type_with_nullability":
+        self._LiteClosureTypeWithNullability,
+        "lite_closure_field_type": self._LiteClosureFieldType,
+        "payload_size": JavaScriptPayloadSize,
+        "to_camel": generator.ToCamel,
+        "union_decode_snippet": self._JavaScriptUnionDecodeSnippet,
+        "union_encode_snippet": self._JavaScriptUnionEncodeSnippet,
+        "validate_array_params": self._JavaScriptValidateArrayParams,
+        "validate_enum_params": self._JavaScriptValidateEnumParams,
+        "validate_map_params": self._JavaScriptValidateMapParams,
+        "validate_nullable_params": self._JavaScriptNullableParam,
+        "validate_struct_params": self._JavaScriptValidateStructParams,
+        "validate_union_params": self._JavaScriptValidateUnionParams,
+        "sanitize_identifier": self._JavaScriptSanitizeIdentifier,
+        "contains_handles_or_interfaces": mojom.ContainsHandlesOrInterfaces,
+        "fuzz_handle_name": self._FuzzHandleName,
+        "is_primitive_kind": self._IsPrimitiveKind,
+        "primitive_to_fuzz_type": self._PrimitiveToFuzzType,
+        "to_js_boolean": self._ToJsBoolean,
     }
     return js_filters
 
@@ -416,8 +417,7 @@
       return kind.module.namespace + "." + kind.name + "Ptr"
     if mojom.IsPendingRemoteKind(kind):
       return kind.kind.module.namespace + "." + kind.kind.name + "Ptr"
-    if (mojom.IsStructKind(kind) or
-        mojom.IsEnumKind(kind)):
+    if (mojom.IsStructKind(kind) or mojom.IsEnumKind(kind)):
       return kind.module.namespace + "." + kind.name
     # TODO(calamity): Support unions properly.
     if mojom.IsUnionKind(kind):
@@ -425,17 +425,17 @@
     if mojom.IsArrayKind(kind):
       return "Array<%s>" % self._ClosureType(kind.kind)
     if mojom.IsMapKind(kind):
-      return "Map<%s, %s>" % (
-          self._ClosureType(kind.key_kind), self._ClosureType(kind.value_kind))
+      return "Map<%s, %s>" % (self._ClosureType(
+          kind.key_kind), self._ClosureType(kind.value_kind))
     if mojom.IsInterfaceRequestKind(kind) or mojom.IsPendingReceiverKind(kind):
       return "mojo.InterfaceRequest"
     # TODO(calamity): Support associated interfaces properly.
-    if (mojom.IsAssociatedInterfaceKind(kind) or
-        mojom.IsPendingAssociatedRemoteKind(kind)):
+    if (mojom.IsAssociatedInterfaceKind(kind)
+        or mojom.IsPendingAssociatedRemoteKind(kind)):
       return "mojo.AssociatedInterfacePtrInfo"
     # TODO(calamity): Support associated interface requests properly.
-    if (mojom.IsAssociatedInterfaceRequestKind(kind) or
-        mojom.IsPendingAssociatedReceiverKind(kind)):
+    if (mojom.IsAssociatedInterfaceRequestKind(kind)
+        or mojom.IsPendingAssociatedReceiverKind(kind)):
       return "mojo.AssociatedInterfaceRequest"
     # TODO(calamity): Support enums properly.
 
@@ -445,9 +445,9 @@
     # Indicates whether a kind of suitable to stringify and use as an Object
     # property name. This is checked for map key types to allow most kinds of
     # mojom maps to be represented as either a Map or an Object.
-    return (mojom.IsIntegralKind(kind) or mojom.IsFloatKind(kind) or
-        mojom.IsDoubleKind(kind) or mojom.IsStringKind(kind) or
-        mojom.IsEnumKind(kind))
+    return (mojom.IsIntegralKind(kind) or mojom.IsFloatKind(kind)
+            or mojom.IsDoubleKind(kind) or mojom.IsStringKind(kind)
+            or mojom.IsEnumKind(kind))
 
   def _LiteClosureType(self, kind):
     if kind in mojom.PRIMITIVES:
@@ -455,18 +455,16 @@
     if mojom.IsArrayKind(kind):
       return "Array<%s>" % self._LiteClosureTypeWithNullability(kind.kind)
     if mojom.IsMapKind(kind) and self._IsStringableKind(kind.key_kind):
-      return "Object<%s, %s>" % (
-          self._LiteClosureTypeWithNullability(kind.key_kind),
-          self._LiteClosureTypeWithNullability(kind.value_kind))
+      return "Object<%s, %s>" % (self._LiteClosureTypeWithNullability(
+          kind.key_kind), self._LiteClosureTypeWithNullability(kind.value_kind))
     if mojom.IsMapKind(kind):
-      return "Map<%s, %s>" % (
-          self._LiteClosureTypeWithNullability(kind.key_kind),
-          self._LiteClosureTypeWithNullability(kind.value_kind))
+      return "Map<%s, %s>" % (self._LiteClosureTypeWithNullability(
+          kind.key_kind), self._LiteClosureTypeWithNullability(kind.value_kind))
 
-    if (mojom.IsAssociatedKind(kind) or mojom.IsInterfaceRequestKind(kind) or
-        mojom.IsPendingRemoteKind(kind) or mojom.IsPendingReceiverKind(kind) or
-        mojom.IsPendingAssociatedRemoteKind(kind) or
-        mojom.IsPendingAssociatedReceiverKind(kind)):
+    if (mojom.IsAssociatedKind(kind) or mojom.IsInterfaceRequestKind(kind)
+        or mojom.IsPendingRemoteKind(kind) or mojom.IsPendingReceiverKind(kind)
+        or mojom.IsPendingAssociatedRemoteKind(kind)
+        or mojom.IsPendingAssociatedReceiverKind(kind)):
       named_kind = kind.kind
     else:
       named_kind = kind
@@ -484,20 +482,20 @@
       name.append("" + named_kind.name)
       name = ".".join(name)
 
-    if (mojom.IsStructKind(kind) or mojom.IsUnionKind(kind) or
-        mojom.IsEnumKind(kind)):
+    if (mojom.IsStructKind(kind) or mojom.IsUnionKind(kind)
+        or mojom.IsEnumKind(kind)):
       return name
     if mojom.IsInterfaceKind(kind) or mojom.IsPendingRemoteKind(kind):
       return name + "Remote"
     if mojom.IsInterfaceRequestKind(kind) or mojom.IsPendingReceiverKind(kind):
       return name + "PendingReceiver"
     # TODO(calamity): Support associated interfaces properly.
-    if (mojom.IsAssociatedInterfaceKind(kind) or
-        mojom.IsPendingAssociatedRemoteKind(kind)):
+    if (mojom.IsAssociatedInterfaceKind(kind)
+        or mojom.IsPendingAssociatedRemoteKind(kind)):
       return "Object"
     # TODO(calamity): Support associated interface requests properly.
-    if (mojom.IsAssociatedInterfaceRequestKind(kind) or
-        mojom.IsPendingAssociatedReceiverKind(kind)):
+    if (mojom.IsAssociatedInterfaceRequestKind(kind)
+        or mojom.IsPendingAssociatedReceiverKind(kind)):
       return "Object"
 
     raise Exception("No valid closure type: %s" % kind)
@@ -512,20 +510,19 @@
     if mojom.IsStructKind(kind) or mojom.IsUnionKind(kind):
       return prefix + "Object"
     if mojom.IsArrayKind(kind):
-      return prefix + ("Array<%s>" %
-                       self._LiteClosureParamType(kind.kind))
+      return prefix + ("Array<%s>" % self._LiteClosureParamType(kind.kind))
     if mojom.IsMapKind(kind):
       return "%sMap<%s, %s>|%sObject<%s, %s>" % (
           prefix, self._LiteClosureParamType(kind.key_kind),
-          self._LiteClosureParamType(kind.value_kind),
-          prefix, self._LiteClosureParamType(kind.key_kind),
-          self._LiteClosureParamType(kind.value_kind))
+          self._LiteClosureParamType(
+              kind.value_kind), prefix, self._LiteClosureParamType(
+                  kind.key_kind), self._LiteClosureParamType(kind.value_kind))
 
     return prefix + self._LiteClosureType(kind)
 
   def _LiteClosureTypeWithNullability(self, kind):
     return (("?" if mojom.IsNullableKind(kind) else "!") +
-        self._LiteClosureType(kind))
+            self._LiteClosureType(kind))
 
   def _LiteClosureFieldType(self, kind):
     if mojom.IsNullableKind(kind):
@@ -555,19 +552,18 @@
     if self._IsPrimitiveKind(kind):
       return _kind_to_lite_js_type[kind]
     if mojom.IsArrayKind(kind):
-      return "mojo.internal.Array(%s, %s)" % (
-          self._LiteJavaScriptType(kind.kind),
-          "true" if mojom.IsNullableKind(kind.kind) else "false")
+      return "mojo.internal.Array(%s, %s)" % (self._LiteJavaScriptType(
+          kind.kind), "true" if mojom.IsNullableKind(kind.kind) else "false")
     if mojom.IsMapKind(kind):
-      return "mojo.internal.Map(%s, %s, %s)" % (
-          self._LiteJavaScriptType(kind.key_kind),
-          self._LiteJavaScriptType(kind.value_kind),
-          "true" if mojom.IsNullableKind(kind.value_kind) else "false")
+      return "mojo.internal.Map(%s, %s, %s)" % (self._LiteJavaScriptType(
+          kind.key_kind), self._LiteJavaScriptType(
+              kind.value_kind), "true" if mojom.IsNullableKind(kind.value_kind)
+                                                else "false")
 
-    if (mojom.IsAssociatedKind(kind) or mojom.IsInterfaceRequestKind(kind) or
-        mojom.IsPendingRemoteKind(kind) or mojom.IsPendingReceiverKind(kind) or
-        mojom.IsPendingAssociatedRemoteKind(kind) or
-        mojom.IsPendingAssociatedReceiverKind(kind)):
+    if (mojom.IsAssociatedKind(kind) or mojom.IsInterfaceRequestKind(kind)
+        or mojom.IsPendingRemoteKind(kind) or mojom.IsPendingReceiverKind(kind)
+        or mojom.IsPendingAssociatedRemoteKind(kind)
+        or mojom.IsPendingAssociatedReceiverKind(kind)):
       named_kind = kind.kind
     else:
       named_kind = kind
@@ -583,21 +579,21 @@
     name.append(named_kind.name)
     name = ".".join(name)
 
-    if (mojom.IsStructKind(kind) or mojom.IsUnionKind(kind) or
-        mojom.IsEnumKind(kind)):
+    if (mojom.IsStructKind(kind) or mojom.IsUnionKind(kind)
+        or mojom.IsEnumKind(kind)):
       return "%sSpec.$" % name
     if mojom.IsInterfaceKind(kind) or mojom.IsPendingRemoteKind(kind):
       return "mojo.internal.InterfaceProxy(%sRemote)" % name
     if mojom.IsInterfaceRequestKind(kind) or mojom.IsPendingReceiverKind(kind):
       return "mojo.internal.InterfaceRequest(%sPendingReceiver)" % name
-    if (mojom.IsAssociatedInterfaceKind(kind) or
-        mojom.IsPendingAssociatedRemoteKind(kind)):
+    if (mojom.IsAssociatedInterfaceKind(kind)
+        or mojom.IsPendingAssociatedRemoteKind(kind)):
       # TODO(rockot): Implement associated interfaces.
       return "mojo.internal.AssociatedInterfaceProxy(%sRemote)" % (name)
-    if (mojom.IsAssociatedInterfaceRequestKind(kind) or
-        mojom.IsPendingAssociatedReceiverKind(kind)):
+    if (mojom.IsAssociatedInterfaceRequestKind(kind)
+        or mojom.IsPendingAssociatedReceiverKind(kind)):
       return "mojo.internal.AssociatedInterfaceRequest(%sPendingReceiver)" % (
-        name)
+          name)
 
     return name
 
@@ -630,14 +626,14 @@
       return "new %sPtr()" % self._JavaScriptType(field.kind)
     if mojom.IsPendingRemoteKind(field.kind):
       return "new %sPtr()" % self._JavaScriptType(field.kind.kind)
-    if (mojom.IsInterfaceRequestKind(field.kind) or
-        mojom.IsPendingReceiverKind(field.kind)):
+    if (mojom.IsInterfaceRequestKind(field.kind)
+        or mojom.IsPendingReceiverKind(field.kind)):
       return "new bindings.InterfaceRequest()"
-    if (mojom.IsAssociatedInterfaceKind(field.kind) or
-        mojom.IsPendingAssociatedRemoteKind(field.kind)):
+    if (mojom.IsAssociatedInterfaceKind(field.kind)
+        or mojom.IsPendingAssociatedRemoteKind(field.kind)):
       return "new associatedBindings.AssociatedInterfacePtrInfo()"
-    if (mojom.IsAssociatedInterfaceRequestKind(field.kind) or
-        mojom.IsPendingAssociatedReceiverKind(field.kind)):
+    if (mojom.IsAssociatedInterfaceRequestKind(field.kind)
+        or mojom.IsPendingAssociatedReceiverKind(field.kind)):
       return "new associatedBindings.AssociatedInterfaceRequest()"
     if mojom.IsEnumKind(field.kind):
       return "0"
@@ -647,7 +643,7 @@
     if field.default:
       if mojom.IsStructKind(field.kind):
         assert field.default == "default"
-        return "null";
+        return "null"
       return self._ExpressionToTextLite(field.default)
     if field.kind in mojom.PRIMITIVES:
       return _kind_to_javascript_default_value[field.kind]
@@ -665,8 +661,8 @@
     if mojom.IsUnionKind(kind):
       return self._JavaScriptType(kind)
     if mojom.IsArrayKind(kind):
-      array_type = ("NullableArrayOf" if mojom.IsNullableKind(kind)
-                                      else "ArrayOf")
+      array_type = ("NullableArrayOf"
+                    if mojom.IsNullableKind(kind) else "ArrayOf")
       array_length = "" if kind.length is None else ", %d" % kind.length
       element_type = self._ElementCodecType(kind.kind)
       return "new codec.%s(%s%s)" % (array_type, element_type, array_length)
@@ -679,17 +675,18 @@
           "NullableInterface" if mojom.IsNullableKind(kind) else "Interface",
           self._JavaScriptType(kind.kind))
     if mojom.IsInterfaceRequestKind(kind) or mojom.IsPendingReceiverKind(kind):
-      return "codec.%s" % (
-          "NullableInterfaceRequest" if mojom.IsNullableKind(kind)
-                                     else "InterfaceRequest")
-    if (mojom.IsAssociatedInterfaceKind(kind) or
-        mojom.IsPendingAssociatedRemoteKind(kind)):
+      return "codec.%s" % ("NullableInterfaceRequest" if
+                           mojom.IsNullableKind(kind) else "InterfaceRequest")
+    if (mojom.IsAssociatedInterfaceKind(kind)
+        or mojom.IsPendingAssociatedRemoteKind(kind)):
       return "codec.%s" % ("NullableAssociatedInterfacePtrInfo"
-          if mojom.IsNullableKind(kind) else "AssociatedInterfacePtrInfo")
-    if (mojom.IsAssociatedInterfaceRequestKind(kind) or
-        mojom.IsPendingAssociatedReceiverKind(kind)):
+                           if mojom.IsNullableKind(kind) else
+                           "AssociatedInterfacePtrInfo")
+    if (mojom.IsAssociatedInterfaceRequestKind(kind)
+        or mojom.IsPendingAssociatedReceiverKind(kind)):
       return "codec.%s" % ("NullableAssociatedInterfaceRequest"
-          if mojom.IsNullableKind(kind) else "AssociatedInterfaceRequest")
+                           if mojom.IsNullableKind(kind) else
+                           "AssociatedInterfaceRequest")
     if mojom.IsEnumKind(kind):
       return "new codec.Enum(%s)" % self._JavaScriptType(kind)
     if mojom.IsMapKind(kind):
@@ -700,19 +697,18 @@
     raise Exception("No codec type for %s" % kind)
 
   def _ElementCodecType(self, kind):
-    return ("codec.PackedBool" if mojom.IsBoolKind(kind)
-                               else self._CodecType(kind))
+    return ("codec.PackedBool"
+            if mojom.IsBoolKind(kind) else self._CodecType(kind))
 
   def _JavaScriptDecodeSnippet(self, kind):
-    if (kind in mojom.PRIMITIVES or mojom.IsUnionKind(kind) or
-        mojom.IsAnyInterfaceKind(kind)):
+    if (kind in mojom.PRIMITIVES or mojom.IsUnionKind(kind)
+        or mojom.IsAnyInterfaceKind(kind)):
       return "decodeStruct(%s)" % self._CodecType(kind)
     if mojom.IsStructKind(kind):
       return "decodeStructPointer(%s)" % self._JavaScriptType(kind)
     if mojom.IsMapKind(kind):
-      return "decodeMapPointer(%s, %s)" % (
-          self._ElementCodecType(kind.key_kind),
-          self._ElementCodecType(kind.value_kind))
+      return "decodeMapPointer(%s, %s)" % (self._ElementCodecType(
+          kind.key_kind), self._ElementCodecType(kind.value_kind))
     if mojom.IsArrayKind(kind) and mojom.IsBoolKind(kind.kind):
       return "decodeArrayPointer(codec.PackedBool)"
     if mojom.IsArrayKind(kind):
@@ -724,19 +720,18 @@
     raise Exception("No decode snippet for %s" % kind)
 
   def _JavaScriptEncodeSnippet(self, kind):
-    if (kind in mojom.PRIMITIVES or mojom.IsUnionKind(kind) or
-        mojom.IsAnyInterfaceKind(kind)):
+    if (kind in mojom.PRIMITIVES or mojom.IsUnionKind(kind)
+        or mojom.IsAnyInterfaceKind(kind)):
       return "encodeStruct(%s, " % self._CodecType(kind)
     if mojom.IsUnionKind(kind):
       return "encodeStruct(%s, " % self._JavaScriptType(kind)
     if mojom.IsStructKind(kind):
       return "encodeStructPointer(%s, " % self._JavaScriptType(kind)
     if mojom.IsMapKind(kind):
-      return "encodeMapPointer(%s, %s, " % (
-          self._ElementCodecType(kind.key_kind),
-          self._ElementCodecType(kind.value_kind))
+      return "encodeMapPointer(%s, %s, " % (self._ElementCodecType(
+          kind.key_kind), self._ElementCodecType(kind.value_kind))
     if mojom.IsArrayKind(kind) and mojom.IsBoolKind(kind.kind):
-      return "encodeArrayPointer(codec.PackedBool, ";
+      return "encodeArrayPointer(codec.PackedBool, "
     if mojom.IsArrayKind(kind):
       return "encodeArrayPointer(%s, " % self._CodecType(kind.kind)
     if mojom.IsEnumKind(kind):
@@ -760,8 +755,7 @@
     nullable = self._JavaScriptNullableParam(field)
     element_kind = field.kind.kind
     element_size = pack.PackedField.GetSizeForKind(element_kind)
-    expected_dimension_sizes = GetArrayExpectedDimensionSizes(
-        field.kind)
+    expected_dimension_sizes = GetArrayExpectedDimensionSizes(field.kind)
     element_type = self._ElementCodecType(element_kind)
     return "%s, %s, %s, %s, 0" % \
         (element_size, element_type, nullable,
@@ -783,7 +777,7 @@
   def _JavaScriptValidateMapParams(self, field):
     nullable = self._JavaScriptNullableParam(field)
     keys_type = self._ElementCodecType(field.kind.key_kind)
-    values_kind = field.kind.value_kind;
+    values_kind = field.kind.value_kind
     values_type = self._ElementCodecType(values_kind)
     values_nullable = "true" if mojom.IsNullableKind(values_kind) else "false"
     return "%s, %s, %s, %s" % \
@@ -811,12 +805,12 @@
 
     if isinstance(token, mojom.BuiltinValue):
       if token.value == "double.INFINITY" or token.value == "float.INFINITY":
-        return "Infinity";
+        return "Infinity"
       if token.value == "double.NEGATIVE_INFINITY" or \
          token.value == "float.NEGATIVE_INFINITY":
-        return "-Infinity";
+        return "-Infinity"
       if token.value == "double.NAN" or token.value == "float.NAN":
-        return "NaN";
+        return "NaN"
 
     return token
 
@@ -848,8 +842,8 @@
   def _GenerateHtmlImports(self):
     result = []
     for full_import in self.module.imports:
-      result.append(os.path.relpath(full_import.path,
-                                    os.path.dirname(self.module.path)))
+      result.append(
+          os.path.relpath(full_import.path, os.path.dirname(self.module.path)))
     return result
 
   def _GetStructsFromMethods(self):
@@ -863,20 +857,17 @@
 
   def _FuzzHandleName(self, kind):
     if mojom.IsInterfaceRequestKind(kind) or mojom.IsPendingReceiverKind(kind):
-      return '{0}.{1}Request'.format(kind.kind.module.namespace,
-                                     kind.kind.name)
+      return '{0}.{1}Request'.format(kind.kind.module.namespace, kind.kind.name)
     elif mojom.IsInterfaceKind(kind):
-      return '{0}.{1}Ptr'.format(kind.module.namespace,
-                                 kind.name)
+      return '{0}.{1}Ptr'.format(kind.module.namespace, kind.name)
     elif mojom.IsPendingRemoteKind(kind):
-      return '{0}.{1}Ptr'.format(kind.kind.module.namespace,
-                                 kind.kind.name)
-    elif (mojom.IsAssociatedInterfaceRequestKind(kind) or
-          mojom.IsPendingAssociatedReceiverKind(kind)):
+      return '{0}.{1}Ptr'.format(kind.kind.module.namespace, kind.kind.name)
+    elif (mojom.IsAssociatedInterfaceRequestKind(kind)
+          or mojom.IsPendingAssociatedReceiverKind(kind)):
       return '{0}.{1}AssociatedRequest'.format(kind.kind.module.namespace,
                                                kind.kind.name)
-    elif (mojom.IsAssociatedInterfaceKind(kind) or
-          mojom.IsPendingAssociatedRemoteKind(kind)):
+    elif (mojom.IsAssociatedInterfaceKind(kind)
+          or mojom.IsPendingAssociatedRemoteKind(kind)):
       return '{0}.{1}AssociatedPtr'.format(kind.kind.module.namespace,
                                            kind.kind.name)
     elif mojom.IsSharedBufferKind(kind):
diff --git a/net/BUILD.gn b/net/BUILD.gn
index 7915b57b..5bdbe49 100644
--- a/net/BUILD.gn
+++ b/net/BUILD.gn
@@ -182,8 +182,6 @@
     "cert/ct_policy_enforcer.h",
     "cert/ct_policy_status.h",
     "cert/ct_verifier.h",
-    "cert/ct_verify_result.cc",
-    "cert/ct_verify_result.h",
     "cert/do_nothing_ct_verifier.cc",
     "cert/do_nothing_ct_verifier.h",
     "cert/internal/cert_error_id.cc",
diff --git a/net/cert/cert_verify_result.cc b/net/cert/cert_verify_result.cc
index 5d88b7fb..f3c8740 100644
--- a/net/cert/cert_verify_result.cc
+++ b/net/cert/cert_verify_result.cc
@@ -8,6 +8,8 @@
 
 #include "base/values.h"
 #include "net/base/net_errors.h"
+#include "net/cert/ct_policy_status.h"
+#include "net/cert/ct_signed_certificate_timestamp_log_param.h"
 #include "net/cert/x509_certificate.h"
 #include "net/cert/x509_certificate_net_log_param.h"
 
@@ -38,6 +40,9 @@
   public_key_hashes = other.public_key_hashes;
   ocsp_result = other.ocsp_result;
 
+  scts = other.scts;
+  policy_compliance = other.policy_compliance;
+
   ClearAllUserData();
   CloneDataFrom(other);
 
@@ -58,6 +63,10 @@
   public_key_hashes.clear();
   ocsp_result = OCSPVerifyResult();
 
+  scts.clear();
+  policy_compliance =
+      ct::CTPolicyCompliance::CT_POLICY_COMPLIANCE_DETAILS_NOT_AVAILABLE;
+
   ClearAllUserData();
 }
 
@@ -89,6 +98,8 @@
     hashes.Append(public_key_hash.ToString());
   results.SetKey("public_key_hashes", std::move(hashes));
 
+  results.SetKey("scts", net::NetLogSignedCertificateTimestampParams(&scts));
+
   return std::move(results);
 }
 
diff --git a/net/cert/cert_verify_result.h b/net/cert/cert_verify_result.h
index 5663b28..35dee119 100644
--- a/net/cert/cert_verify_result.h
+++ b/net/cert/cert_verify_result.h
@@ -11,13 +11,19 @@
 #include "base/supports_user_data.h"
 #include "net/base/net_export.h"
 #include "net/cert/cert_status_flags.h"
+#include "net/cert/ct_policy_status.h"
 #include "net/cert/ocsp_verify_result.h"
+#include "net/cert/signed_certificate_timestamp_and_status.h"
 #include "net/cert/x509_cert_types.h"
 
 namespace base {
 class Value;
 }
 
+namespace ct {
+enum class CTPolicyCompliance;
+}  // namespace ct
+
 namespace net {
 
 class X509Certificate;
@@ -97,6 +103,16 @@
 
   // Verification of stapled OCSP response, if present.
   OCSPVerifyResult ocsp_result;
+
+  // `scts` contains the result of verifying any provided or embedded SCTs for
+  // this certificate against the set of known logs. Consumers should not simply
+  // check this for the presence of a successfully verified SCT to determine CT
+  // compliance. Instead look at `policy_compliance`.
+  SignedCertificateTimestampAndStatusList scts;
+
+  // The result of evaluating whether the certificate complies with the
+  // Certificate Transparency policy.
+  ct::CTPolicyCompliance policy_compliance;
 };
 
 }  // namespace net
diff --git a/net/cert/ct_verify_result.cc b/net/cert/ct_verify_result.cc
deleted file mode 100644
index 9da8828d..0000000
--- a/net/cert/ct_verify_result.cc
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "net/cert/ct_verify_result.h"
-
-#include "net/cert/ct_policy_status.h"
-
-namespace net {
-
-namespace ct {
-
-CTVerifyResult::CTVerifyResult()
-    : policy_compliance(
-          ct::CTPolicyCompliance::CT_POLICY_COMPLIANCE_DETAILS_NOT_AVAILABLE),
-      policy_compliance_required(false) {}
-
-CTVerifyResult::CTVerifyResult(const CTVerifyResult& other) = default;
-
-CTVerifyResult::~CTVerifyResult() = default;
-
-SCTList SCTsMatchingStatus(
-    const SignedCertificateTimestampAndStatusList& sct_and_status_list,
-    SCTVerifyStatus match_status) {
-  SCTList result;
-  for (const auto& sct_and_status : sct_and_status_list)
-    if (sct_and_status.status == match_status)
-      result.push_back(sct_and_status.sct);
-
-  return result;
-}
-
-}  // namespace ct
-
-}  // namespace net
diff --git a/net/cert/ct_verify_result.h b/net/cert/ct_verify_result.h
deleted file mode 100644
index 742ec65..0000000
--- a/net/cert/ct_verify_result.h
+++ /dev/null
@@ -1,49 +0,0 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef NET_CERT_CT_VERIFY_RESULT_H_
-#define NET_CERT_CT_VERIFY_RESULT_H_
-
-#include <vector>
-
-#include "net/base/net_export.h"
-#include "net/cert/signed_certificate_timestamp_and_status.h"
-
-namespace net {
-
-namespace ct {
-
-enum class CTPolicyCompliance;
-
-// Holds Signed Certificate Timestamps, depending on their verification
-// results, and information about CT policies that were applied on the
-// connection.
-struct NET_EXPORT CTVerifyResult {
-  CTVerifyResult();
-  CTVerifyResult(const CTVerifyResult& other);
-  ~CTVerifyResult();
-
-  // All SCTs and their statuses
-  SignedCertificateTimestampAndStatusList scts;
-
-  // The result of evaluating whether the connection complies with the
-  // CT certificate policy.
-  CTPolicyCompliance policy_compliance;
-  // True if the connection was required to comply with the CT certificate
-  // policy. This value is not meaningful if |policy_compliance| is
-  // COMPLIANCE_DETAILS_NOT_AVAILABLE.
-  bool policy_compliance_required;
-};
-
-// Returns a list of SCTs from |sct_and_status_list| whose status matches
-// |match_status|.
-SCTList NET_EXPORT SCTsMatchingStatus(
-    const SignedCertificateTimestampAndStatusList& sct_and_status_list,
-    SCTVerifyStatus match_status);
-
-}  // namespace ct
-
-}  // namespace net
-
-#endif  // NET_CERT_CT_VERIFY_RESULT_H_
diff --git a/net/cookies/cookie_monster.cc b/net/cookies/cookie_monster.cc
index 140b61a..d72b57f 100644
--- a/net/cookies/cookie_monster.cc
+++ b/net/cookies/cookie_monster.cc
@@ -1236,8 +1236,13 @@
     if (!already_expired) {
       // See InitializeHistograms() for details.
       if (cc->IsPersistent()) {
-        histogram_expiration_duration_minutes_->Add(
-            (cc->ExpiryDate() - creation_date).InMinutes());
+        if (cc->IsSecure()) {
+          histogram_expiration_duration_minutes_secure_->Add(
+              (cc->ExpiryDate() - creation_date).InMinutes());
+        } else {
+          histogram_expiration_duration_minutes_non_secure_->Add(
+              (cc->ExpiryDate() - creation_date).InMinutes());
+        }
       }
 
       // Histogram the type of scheme used on URLs that set cookies. This
@@ -1297,8 +1302,13 @@
       continue;
 
     if (cookie.IsPersistent()) {
-      histogram_expiration_duration_minutes_->Add(
-          (cookie.ExpiryDate() - creation_time).InMinutes());
+      if (cookie.IsSecure()) {
+        histogram_expiration_duration_minutes_secure_->Add(
+            (cookie.ExpiryDate() - creation_time).InMinutes());
+      } else {
+        histogram_expiration_duration_minutes_non_secure_->Add(
+            (cookie.ExpiryDate() - creation_time).InMinutes());
+      }
     }
 
     CookieAccessResult access_result;
@@ -1885,9 +1895,13 @@
   DCHECK(thread_checker_.CalledOnValidThread());
 
   // From UMA_HISTOGRAM_CUSTOM_COUNTS
-  histogram_expiration_duration_minutes_ = base::Histogram::FactoryGet(
-      "Cookie.ExpirationDurationMinutes", 1, kMinutesInTenYears, 50,
+  histogram_expiration_duration_minutes_secure_ = base::Histogram::FactoryGet(
+      "Cookie.ExpirationDurationMinutesSecure", 1, kMinutesInTenYears, 50,
       base::Histogram::kUmaTargetedHistogramFlag);
+  histogram_expiration_duration_minutes_non_secure_ =
+      base::Histogram::FactoryGet("Cookie.ExpirationDurationMinutesNonSecure",
+                                  1, kMinutesInTenYears, 50,
+                                  base::Histogram::kUmaTargetedHistogramFlag);
   histogram_count_ = base::Histogram::FactoryGet(
       "Cookie.Count", 1, 4000, 50, base::Histogram::kUmaTargetedHistogramFlag);
 
diff --git a/net/cookies/cookie_monster.h b/net/cookies/cookie_monster.h
index 57ce9d6..0ec31e3 100644
--- a/net/cookies/cookie_monster.h
+++ b/net/cookies/cookie_monster.h
@@ -596,7 +596,8 @@
 
   // Histogram variables; see CookieMonster::InitializeHistograms() in
   // cookie_monster.cc for details.
-  base::HistogramBase* histogram_expiration_duration_minutes_;
+  base::HistogramBase* histogram_expiration_duration_minutes_secure_;
+  base::HistogramBase* histogram_expiration_duration_minutes_non_secure_;
   base::HistogramBase* histogram_count_;
   base::HistogramBase* histogram_cookie_type_;
   base::HistogramBase* histogram_cookie_source_scheme_;
diff --git a/net/cookies/cookie_monster_unittest.cc b/net/cookies/cookie_monster_unittest.cc
index a4b72d5..0295819e 100644
--- a/net/cookies/cookie_monster_unittest.cc
+++ b/net/cookies/cookie_monster_unittest.cc
@@ -2551,7 +2551,7 @@
   // since the histogram should have been initialized by the CM construction
   // above.
   base::HistogramBase* expired_histogram = base::Histogram::FactoryGet(
-      "Cookie.ExpirationDurationMinutes", 1, 10 * 365 * 24 * 60, 50,
+      "Cookie.ExpirationDurationMinutesSecure", 1, 10 * 365 * 24 * 60, 50,
       base::Histogram::kUmaTargetedHistogramFlag);
 
   std::unique_ptr<base::HistogramSamples> samples1(
diff --git a/net/dns/dns_config.cc b/net/dns/dns_config.cc
index 3265807..45a26ede 100644
--- a/net/dns/dns_config.cc
+++ b/net/dns/dns_config.cc
@@ -10,8 +10,8 @@
 
 namespace net {
 
-// Default values are taken from glibc resolv.h except timeout which is set to
-// |kDnsDefaultTimeoutMs|.
+// Default values are taken from glibc resolv.h except |fallback_period| which
+// is set to |kDnsDefaultFallbackPeriod|.
 DnsConfig::DnsConfig() : DnsConfig(std::vector<IPEndPoint>()) {}
 
 DnsConfig::DnsConfig(const DnsConfig& other) = default;
@@ -25,7 +25,7 @@
       unhandled_options(false),
       append_to_multi_label_name(true),
       ndots(1),
-      timeout(kDnsDefaultTimeout),
+      fallback_period(kDnsDefaultFallbackPeriod),
       attempts(2),
       doh_attempts(1),
       rotate(false),
@@ -57,7 +57,7 @@
          (dns_over_tls_hostname == d.dns_over_tls_hostname) &&
          (search == d.search) && (unhandled_options == d.unhandled_options) &&
          (append_to_multi_label_name == d.append_to_multi_label_name) &&
-         (ndots == d.ndots) && (timeout == d.timeout) &&
+         (ndots == d.ndots) && (fallback_period == d.fallback_period) &&
          (attempts == d.attempts) && (doh_attempts == d.doh_attempts) &&
          (rotate == d.rotate) && (use_local_ipv6 == d.use_local_ipv6) &&
          (dns_over_https_servers == d.dns_over_https_servers) &&
@@ -74,7 +74,7 @@
   unhandled_options = d.unhandled_options;
   append_to_multi_label_name = d.append_to_multi_label_name;
   ndots = d.ndots;
-  timeout = d.timeout;
+  fallback_period = d.fallback_period;
   attempts = d.attempts;
   doh_attempts = d.doh_attempts;
   rotate = d.rotate;
@@ -103,7 +103,7 @@
   dict.SetBoolKey("unhandled_options", unhandled_options);
   dict.SetBoolKey("append_to_multi_label_name", append_to_multi_label_name);
   dict.SetIntKey("ndots", ndots);
-  dict.SetDoubleKey("timeout", timeout.InSecondsF());
+  dict.SetDoubleKey("timeout", fallback_period.InSecondsF());
   dict.SetIntKey("attempts", attempts);
   dict.SetIntKey("doh_attempts", doh_attempts);
   dict.SetBoolKey("rotate", rotate);
diff --git a/net/dns/dns_config.h b/net/dns/dns_config.h
index 96e8540..f1537321 100644
--- a/net/dns/dns_config.h
+++ b/net/dns/dns_config.h
@@ -22,8 +22,9 @@
 
 namespace net {
 
-// Default to 1 second timeout (before exponential backoff).
-constexpr base::TimeDelta kDnsDefaultTimeout = base::TimeDelta::FromSeconds(1);
+// Default to 1 second fallback period (before exponential backoff).
+constexpr base::TimeDelta kDnsDefaultFallbackPeriod =
+    base::TimeDelta::FromSeconds(1);
 
 // DnsConfig stores configuration of the system resolver.
 struct NET_EXPORT DnsConfig {
@@ -78,7 +79,7 @@
   // Minimum number of dots before global resolution precedes |search|.
   int ndots;
   // Time between retransmissions, see res_state.retrans.
-  base::TimeDelta timeout;
+  base::TimeDelta fallback_period;
   // Maximum number of attempts, see res_state.retry.
   int attempts;
   // Maximum number of times a DoH server is attempted per attempted per DNS
diff --git a/net/dns/dns_config_service_posix.cc b/net/dns/dns_config_service_posix.cc
index 5a4aead..4d4df80fe 100644
--- a/net/dns/dns_config_service_posix.cc
+++ b/net/dns/dns_config_service_posix.cc
@@ -189,8 +189,8 @@
       return error;
   }
 #endif  // defined(OS_MAC)
-  // Override timeout value to match default setting on Windows.
-  dns_config->timeout = kDnsDefaultTimeout;
+  // Override |fallback_period| value to match default setting on Windows.
+  dns_config->fallback_period = kDnsDefaultFallbackPeriod;
   return result;
 #else  // defined(OS_ANDROID)
   dns_config->nameservers.clear();
@@ -537,7 +537,7 @@
   }
 
   dns_config->ndots = res.ndots;
-  dns_config->timeout = base::TimeDelta::FromSeconds(res.retrans);
+  dns_config->fallback_period = base::TimeDelta::FromSeconds(res.retrans);
   dns_config->attempts = res.retry;
 #if defined(RES_ROTATE)
   dns_config->rotate = res.options & RES_ROTATE;
diff --git a/net/dns/dns_config_service_posix_unittest.cc b/net/dns/dns_config_service_posix_unittest.cc
index a98dffb7..e8ce230a 100644
--- a/net/dns/dns_config_service_posix_unittest.cc
+++ b/net/dns/dns_config_service_posix_unittest.cc
@@ -118,7 +118,7 @@
 
 void InitializeExpectedConfig(DnsConfig* config) {
   config->ndots = 2;
-  config->timeout = base::TimeDelta::FromSeconds(4);
+  config->fallback_period = base::TimeDelta::FromSeconds(4);
   config->attempts = 7;
   config->rotate = true;
   config->append_to_multi_label_name = true;
diff --git a/net/dns/dns_response.cc b/net/dns/dns_response.cc
index 860eebbc5..e34e0c8 100644
--- a/net/dns/dns_response.cc
+++ b/net/dns/dns_response.cc
@@ -443,6 +443,11 @@
   return base::NetToHost16(header()->ancount);
 }
 
+unsigned DnsResponse::authority_count() const {
+  DCHECK(parser_.IsValid());
+  return base::NetToHost16(header()->nscount);
+}
+
 unsigned DnsResponse::additional_answer_count() const {
   DCHECK(parser_.IsValid());
   return base::NetToHost16(header()->arcount);
@@ -482,8 +487,8 @@
 }
 
 DnsResponse::Result DnsResponse::ParseToAddressList(
-    AddressList* addr_list,
-    base::TimeDelta* ttl) const {
+    AddressList* out_addr_list,
+    base::Optional<base::TimeDelta>* out_ttl) const {
   DCHECK(IsValid());
   // DnsTransaction already verified that |response| matches the issued query.
   // We still need to determine if there is a valid chain of CNAMEs from the
@@ -502,7 +507,7 @@
                              ? IPAddress::kIPv6AddressSize
                              : IPAddress::kIPv4AddressSize;
 
-  uint32_t ttl_sec = std::numeric_limits<uint32_t>::max();
+  base::Optional<base::TimeDelta> ttl;
   IPAddressList ip_addresses;
   DnsRecordParser parser = Parser();
   DnsResourceRecord record;
@@ -512,6 +517,7 @@
     if (!parser.ReadRecord(&record))
       return DNS_MALFORMED_RESPONSE;
 
+    base::TimeDelta record_ttl = base::TimeDelta::FromSeconds(record.ttl);
     if (record.type == dns_protocol::kTypeCNAME) {
       // Following the CNAME chain, only if no addresses seen.
       if (!ip_addresses.empty())
@@ -524,7 +530,7 @@
           parser.ReadName(record.rdata.begin(), &expected_name))
         return DNS_MALFORMED_CNAME;
 
-      ttl_sec = std::min(ttl_sec, record.ttl);
+      ttl = std::min(ttl.value_or(base::TimeDelta::Max()), record_ttl);
     } else if (record.type == expected_type) {
       if (record.rdata.size() != expected_size)
         return DNS_SIZE_MISMATCH;
@@ -532,7 +538,7 @@
       if (!base::EqualsCaseInsensitiveASCII(record.name, expected_name))
         return DNS_NAME_MISMATCH;
 
-      ttl_sec = std::min(ttl_sec, record.ttl);
+      ttl = std::min(ttl.value_or(base::TimeDelta::Max()), record_ttl);
       ip_addresses.push_back(
           IPAddress(reinterpret_cast<const uint8_t*>(record.rdata.data()),
                     record.rdata.length()));
@@ -542,18 +548,27 @@
   // NXDOMAIN or NODATA cases respectively.
   if (rcode() == dns_protocol::kRcodeNXDOMAIN ||
       (ancount == 0 && rcode() == dns_protocol::kRcodeNOERROR)) {
+    bool soa_found = false;
     unsigned nscount = base::NetToHost16(header()->nscount);
     for (unsigned i = 0; i < nscount; ++i) {
-      if (parser.ReadRecord(&record) && record.type == dns_protocol::kTypeSOA)
-        ttl_sec = std::min(ttl_sec, record.ttl);
+      if (parser.ReadRecord(&record) && record.type == dns_protocol::kTypeSOA) {
+        soa_found = true;
+        base::TimeDelta record_ttl = base::TimeDelta::FromSeconds(record.ttl);
+        ttl = std::min(ttl.value_or(base::TimeDelta::Max()), record_ttl);
+      }
     }
+
+    // Per RFC2308, section 5, never cache negative results unless an SOA
+    // record is found.
+    if (!soa_found)
+      ttl.reset();
   }
 
   // getcanonname in eglibc returns the first owner name of an A or AAAA RR.
   // If the response passed all the checks so far, then |expected_name| is it.
-  *addr_list = AddressList::CreateFromIPAddressList(ip_addresses,
-                                                    expected_name);
-  *ttl = base::TimeDelta::FromSeconds(ttl_sec);
+  *out_addr_list =
+      AddressList::CreateFromIPAddressList(ip_addresses, expected_name);
+  *out_ttl = ttl;
   return DNS_PARSE_OK;
 }
 
diff --git a/net/dns/dns_response.h b/net/dns/dns_response.h
index b7fa79a..7eda8076 100644
--- a/net/dns/dns_response.h
+++ b/net/dns/dns_response.h
@@ -186,6 +186,7 @@
   uint8_t rcode() const;
 
   unsigned answer_count() const;
+  unsigned authority_count() const;
   unsigned additional_answer_count() const;
 
   // Accessors to the question. The qname is unparsed.
@@ -202,7 +203,8 @@
 
   // Extracts an AddressList from this response. Returns SUCCESS if succeeded.
   // Otherwise returns a detailed error number.
-  Result ParseToAddressList(AddressList* addr_list, base::TimeDelta* ttl) const;
+  Result ParseToAddressList(AddressList* out_addr_list,
+                            base::Optional<base::TimeDelta>* out_ttl) const;
 
  private:
   bool WriteHeader(base::BigEndianWriter* writer,
diff --git a/net/dns/dns_response_unittest.cc b/net/dns/dns_response_unittest.cc
index 17705d7f..794358a 100644
--- a/net/dns/dns_response_unittest.cc
+++ b/net/dns/dns_response_unittest.cc
@@ -574,15 +574,44 @@
   }
 }
 
+static const uint8_t kResponseNoDataWithSoa[] = {
+    // Header
+    0x00, 0x00, 0x81, 0x80, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+    // Question (name: "query" type: A)
+    0x05, 'q', 'u', 'e', 'r', 'y', 0x00, 0x00, 0x01, 0x00, 0x01,
+    // Answers (empty)
+    // Authority records (single minimally faked SOA with TTL: 2 days)
+    0xc0, 0x0c, 0x00, 0x06, 0x00, 0x01, 0x00, 0x02, 0xa3, 0x00, 0x00, 0x00};
+
+static const uint8_t kResponseNxdomainCnameWithSoa[] = {
+    // Header
+    0x00, 0x00, 0x81, 0x83, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00,
+    // Question (name: "query" type: A)
+    0x05, 'q', 'u', 'e', 'r', 'y', 0x00, 0x00, 0x01, 0x00, 0x01,
+    // Answers (CNAME "query"->"canon" TTL: 48 minutes)
+    0xc0, 0x0c, 0x00, 0x05, 0x00, 0x01, 0x00, 0x00, 0x0b, 0x40, 0x00, 0x07,
+    0x05, 'c', 'a', 'n', 'o', 'n', 0x00,
+    // Authority records (single minimally faked SOA with TTL: 2 days)
+    0xc0, 0x0c, 0x00, 0x06, 0x00, 0x01, 0x00, 0x02, 0xa3, 0x00, 0x00, 0x00};
+
+static const uint8_t kResponseNxdomainCnameWithoutSoa[] = {
+    // Header
+    0x00, 0x00, 0x81, 0x83, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
+    // Question (name: "query" type: A)
+    0x05, 'q', 'u', 'e', 'r', 'y', 0x00, 0x00, 0x01, 0x00, 0x01,
+    // Answers (CNAME "query"->"canon" TTL: 48 minutes)
+    0xc0, 0x0c, 0x00, 0x05, 0x00, 0x01, 0x00, 0x00, 0x0b, 0x40, 0x00, 0x07,
+    0x05, 'c', 'a', 'n', 'o', 'n', 0x00};
+
 TEST(DnsResponseTest, ParseToAddressList) {
   const struct TestCase {
-    size_t query_size;
+    size_t answers_offset;
     const uint8_t* response_data;
     size_t response_size;
     const char* const* expected_addresses;
     size_t num_expected_addresses;
     const char* expected_cname;
-    int expected_ttl_sec;
+    base::Optional<base::TimeDelta> expected_ttl;
   } cases[] = {
       {
           kT0QuerySize,
@@ -591,7 +620,7 @@
           kT0IpAddresses,
           base::size(kT0IpAddresses),
           kT0CanonName,
-          kT0TTL,
+          kT0Ttl,
       },
       {
           kT1QuerySize,
@@ -600,7 +629,7 @@
           kT1IpAddresses,
           base::size(kT1IpAddresses),
           kT1CanonName,
-          kT1TTL,
+          kT1Ttl,
       },
       {
           kT2QuerySize,
@@ -609,7 +638,7 @@
           kT2IpAddresses,
           base::size(kT2IpAddresses),
           kT2CanonName,
-          kT2TTL,
+          kT2Ttl,
       },
       {
           kT3QuerySize,
@@ -618,15 +647,42 @@
           kT3IpAddresses,
           base::size(kT3IpAddresses),
           kT3CanonName,
-          kT3TTL,
+          kT3Ttl,
+      },
+      {
+          12 + 11,
+          kResponseNoDataWithSoa,
+          base::size(kResponseNoDataWithSoa),
+          {} /* expected_addresses */,
+          0 /* num_expected_addresses */,
+          "query",
+          base::TimeDelta::FromDays(2),
+      },
+      {
+          12 + 11,
+          kResponseNxdomainCnameWithSoa,
+          base::size(kResponseNxdomainCnameWithSoa),
+          {} /* expected_addresses */,
+          0 /* num_expected_addresses */,
+          "canon",
+          base::TimeDelta::FromMinutes(48),
+      },
+      {
+          12 + 11,
+          kResponseNxdomainCnameWithoutSoa,
+          base::size(kResponseNxdomainCnameWithoutSoa),
+          {} /* expected_addresses */,
+          0 /* num_expected_addresses */,
+          "canon",
+          base::nullopt,
       },
   };
 
   for (size_t i = 0; i < base::size(cases); ++i) {
     const TestCase& t = cases[i];
-    DnsResponse response(t.response_data, t.response_size, t.query_size);
+    DnsResponse response(t.response_data, t.response_size, t.answers_offset);
     AddressList addr_list;
-    base::TimeDelta ttl;
+    base::Optional<base::TimeDelta> ttl;
     EXPECT_EQ(DnsResponse::DNS_PARSE_OK,
               response.ParseToAddressList(&addr_list, &ttl));
     std::vector<const char*> expected_addresses(
@@ -634,7 +690,7 @@
         t.expected_addresses + t.num_expected_addresses);
     VerifyAddressList(expected_addresses, addr_list);
     EXPECT_EQ(t.expected_cname, addr_list.canonical_name());
-    EXPECT_EQ(base::TimeDelta::FromSeconds(t.expected_ttl_sec), ttl);
+    EXPECT_EQ(t.expected_ttl, ttl);
   }
 }
 
@@ -751,7 +807,7 @@
 
     DnsResponse response(t.data, t.size, kQuerySize);
     AddressList addr_list;
-    base::TimeDelta ttl;
+    base::Optional<base::TimeDelta> ttl;
     EXPECT_EQ(t.expected_result,
               response.ParseToAddressList(&addr_list, &ttl));
   }
diff --git a/net/dns/dns_test_util.h b/net/dns/dns_test_util.h
index 7d79a35..c5002177 100644
--- a/net/dns/dns_test_util.h
+++ b/net/dns/dns_test_util.h
@@ -59,7 +59,7 @@
   "74.125.226.177", "74.125.226.178"
 };
 static const char kT0CanonName[] = "www.l.google.com";
-static const int kT0TTL = 0x000000e4;
+static const base::TimeDelta kT0Ttl = base::TimeDelta::FromSeconds(0x000000e4);
 // +1 for the CNAME record.
 static const unsigned kT0RecordCount = base::size(kT0IpAddresses) + 1;
 
@@ -89,7 +89,7 @@
   "64.233.169.121"
 };
 static const char kT1CanonName[] = "ghs.l.google.com";
-static const int kT1TTL = 0x0000010b;
+static const base::TimeDelta kT1Ttl = base::TimeDelta::FromSeconds(0x0000010b);
 // +1 for the CNAME record.
 static const unsigned kT1RecordCount = base::size(kT1IpAddresses) + 1;
 
@@ -118,7 +118,7 @@
   "129.10.116.81"
 };
 static const char kT2CanonName[] = "vulcan.ccs.neu.edu";
-static const int kT2TTL = 0x0000012c;
+static const base::TimeDelta kT2Ttl = base::TimeDelta::FromSeconds(0x0000012c);
 // +1 for the CNAME record.
 static const unsigned kT2RecordCount = base::size(kT2IpAddresses) + 1;
 
@@ -160,7 +160,7 @@
   "74.125.226.176", "74.125.226.177"
 };
 static const char kT3CanonName[] = "www.l.google.com";
-static const int kT3TTL = 0x00000015;
+static const base::TimeDelta kT3Ttl = base::TimeDelta::FromSeconds(0x00000015);
 // +2 for the CNAME records, +1 for TXT record.
 static const unsigned kT3RecordCount = base::size(kT3IpAddresses) + 3;
 
@@ -181,7 +181,7 @@
     0x00, 0x01, 0x2b, 0x00, 0x04, 0xac, 0xd9, 0x06, 0xc3};
 
 static const char* const kT4IpAddresses[] = {"172.217.6.195"};
-static const int kT4TTL = 0x0000012b;
+static const base::TimeDelta kT4Ttl = base::TimeDelta::FromSeconds(0x0000012b);
 static const unsigned kT4RecordCount = base::size(kT0IpAddresses);
 
 class AddressSorter;
diff --git a/net/dns/dns_transaction.cc b/net/dns/dns_transaction.cc
index cb3e48b..5190163 100644
--- a/net/dns/dns_transaction.cc
+++ b/net/dns/dns_transaction.cc
@@ -985,7 +985,7 @@
           probe_stats->probe_attempts[attempt_number].get();
       const DnsResponse* response = attempt->GetResponse();
       AddressList addresses;
-      base::TimeDelta ttl;
+      base::Optional<base::TimeDelta> ttl;
       if (response &&
           attempt->GetResponse()->ParseToAddressList(&addresses, &ttl) ==
               DnsResponse::DNS_PARSE_OK &&
@@ -1030,9 +1030,9 @@
 
 // Implements DnsTransaction. Configuration is supplied by DnsSession.
 // The suffix list is built according to the DnsConfig from the session.
-// The timeout for each DnsUDPAttempt is given by
-// ResolveContext::NextClassicTimeout. The first server to attempt on each query
-// is given by ResolveContext::NextFirstServerIndex, and the order is
+// The fallback period for each DnsUDPAttempt is given by
+// ResolveContext::NextClassicFallbackPeriod(). The first server to attempt on
+// each query is given by ResolveContext::NextFirstServerIndex, and the order is
 // round-robin afterwards. Each server is attempted DnsConfig::attempts times.
 class DnsTransactionImpl : public DnsTransaction,
                            public base::SupportsWeakPtr<DnsTransactionImpl> {
@@ -1243,9 +1243,11 @@
     }
 
     if (result.rv == ERR_IO_PENDING) {
-      base::TimeDelta timeout = resolve_context_->NextClassicTimeout(
-          server_index, attempt_number, session_.get());
-      timer_.Start(FROM_HERE, timeout, this, &DnsTransactionImpl::OnTimeout);
+      base::TimeDelta fallback_period =
+          resolve_context_->NextClassicFallbackPeriod(
+              server_index, attempt_number, session_.get());
+      timer_.Start(FROM_HERE, fallback_period, this,
+                   &DnsTransactionImpl::OnFallbackPeriodExpired);
     }
 
     return result;
@@ -1303,9 +1305,10 @@
         &DnsTransactionImpl::OnAttemptComplete, base::Unretained(this),
         attempt_number, true /* record_rtt */, base::TimeTicks::Now()));
     if (rv == ERR_IO_PENDING) {
-      base::TimeDelta timeout =
-          resolve_context_->NextDohTimeout(doh_server_index, session_.get());
-      timer_.Start(FROM_HERE, timeout, this, &DnsTransactionImpl::OnTimeout);
+      base::TimeDelta fallback_period = resolve_context_->NextDohFallbackPeriod(
+          doh_server_index, session_.get());
+      timer_.Start(FROM_HERE, fallback_period, this,
+                   &DnsTransactionImpl::OnFallbackPeriodExpired);
     }
     return AttemptResult(rv, attempts_.back().get());
   }
@@ -1332,9 +1335,10 @@
     RecordAttemptUma(DnsAttemptType::kTcpTruncationRetry);
 
     if (result.rv == ERR_IO_PENDING) {
-      // On TCP upgrade, use 2x the upgraded timeout.
-      base::TimeDelta timeout = timer_.GetCurrentDelay() * 2;
-      timer_.Start(FROM_HERE, timeout, this, &DnsTransactionImpl::OnTimeout);
+      // On TCP upgrade, use 2x the upgraded fallback period.
+      base::TimeDelta fallback_period = timer_.GetCurrentDelay() * 2;
+      timer_.Start(FROM_HERE, fallback_period, this,
+                   &DnsTransactionImpl::OnFallbackPeriodExpired);
     }
 
     return result;
@@ -1481,11 +1485,11 @@
           DCHECK(result.attempt);
 
           // If attempt is not the most recent attempt, means this error is for
-          // an attempt that already timed out and was treated as complete but
-          // allowed to continue attempting in parallel with new attempts (see
-          // the ERR_DNS_TIMED_OUT case above). As the failure was already
-          // recorded at timeout time and is no longer being waited on, ignore
-          // this failure.
+          // a previous attempt that passed its fallback period and was treated
+          // as complete but allowed to continue attempting in parallel with new
+          // attempts (see the ERR_DNS_TIMED_OUT case above). As the failure was
+          // already recorded at fallback time and is no longer being waited on,
+          // ignore this failure.
           if (result.attempt != attempts_.back().get()) {
             return AttemptResult(ERR_IO_PENDING, nullptr);
           }
@@ -1515,7 +1519,7 @@
     }
   }
 
-  void OnTimeout() {
+  void OnFallbackPeriodExpired() {
     if (callback_.is_null())
       return;
     DCHECK(!attempts_.empty());
diff --git a/net/dns/dns_transaction_unittest.cc b/net/dns/dns_transaction_unittest.cc
index 6154eb3..ba9e780b 100644
--- a/net/dns/dns_transaction_unittest.cc
+++ b/net/dns/dns_transaction_unittest.cc
@@ -63,7 +63,7 @@
 
 namespace {
 
-base::TimeDelta kTimeout = base::TimeDelta::FromSeconds(1);
+base::TimeDelta kFallbackPeriod = base::TimeDelta::FromSeconds(1);
 
 const char kMockHostname[] = "mock.http";
 
@@ -715,7 +715,7 @@
   }
 
   // Add expected query of |dotted_name| and |qtype| and no response.
-  void AddQueryAndTimeout(
+  void AddHangingQuery(
       const char* dotted_name,
       uint16_t qtype,
       DnsQuery::PaddingStrategy padding_strategy =
@@ -880,8 +880,8 @@
     ConfigureNumServers(1);
     // and no retransmissions,
     config_.attempts = 1;
-    // and an arbitrary timeout.
-    config_.timeout = kTimeout;
+    // and an arbitrary fallback period.
+    config_.fallback_period = kFallbackPeriod;
 
     request_context_ = std::make_unique<TestURLRequestContext>();
     resolve_context_ = std::make_unique<ResolveContext>(
@@ -1179,25 +1179,29 @@
   config_.attempts = 3;
   ConfigureFactory();
 
-  AddQueryAndTimeout(kT0HostName, kT0Qtype);
-  AddQueryAndTimeout(kT0HostName, kT0Qtype);
-  AddQueryAndTimeout(kT0HostName, kT0Qtype);
+  AddHangingQuery(kT0HostName, kT0Qtype);
+  AddHangingQuery(kT0HostName, kT0Qtype);
+  AddHangingQuery(kT0HostName, kT0Qtype);
 
   TransactionHelper helper0(kT0HostName, kT0Qtype, false /* secure */,
                             ERR_DNS_TIMED_OUT, resolve_context_.get());
 
-  // Finish when the third attempt times out.
+  // Finish when the third attempt expires its fallback period.
   EXPECT_FALSE(helper0.Run(transaction_factory_.get()));
-  FastForwardBy(resolve_context_->NextClassicTimeout(0, 0, session_.get()));
+  FastForwardBy(
+      resolve_context_->NextClassicFallbackPeriod(0, 0, session_.get()));
   EXPECT_FALSE(helper0.has_completed());
-  FastForwardBy(resolve_context_->NextClassicTimeout(0, 1, session_.get()));
+  FastForwardBy(
+      resolve_context_->NextClassicFallbackPeriod(0, 1, session_.get()));
   EXPECT_FALSE(helper0.has_completed());
-  FastForwardBy(resolve_context_->NextClassicTimeout(0, 2, session_.get()));
+  FastForwardBy(
+      resolve_context_->NextClassicFallbackPeriod(0, 2, session_.get()));
   EXPECT_TRUE(helper0.has_completed());
 }
 
 TEST_F(DnsTransactionTestWithMockTime, ServerFallbackAndRotate) {
-  // Test that we fallback on both server failure and timeout.
+  // Test that we fallback on both server failure and fallback period
+  // expiration.
   config_.attempts = 2;
   // The next request should start from the next server.
   config_.rotate = true;
@@ -1205,9 +1209,9 @@
   ConfigureFactory();
 
   // Responses for first request.
-  AddQueryAndTimeout(kT0HostName, kT0Qtype);
+  AddHangingQuery(kT0HostName, kT0Qtype);
   AddAsyncQueryAndRcode(kT0HostName, kT0Qtype, dns_protocol::kRcodeSERVFAIL);
-  AddQueryAndTimeout(kT0HostName, kT0Qtype);
+  AddHangingQuery(kT0HostName, kT0Qtype);
   AddAsyncQueryAndRcode(kT0HostName, kT0Qtype, dns_protocol::kRcodeSERVFAIL);
   AddAsyncQueryAndRcode(kT0HostName, kT0Qtype, dns_protocol::kRcodeNXDOMAIN);
   // Responses for second request.
@@ -2473,29 +2477,29 @@
   EXPECT_EQ(observer.dict_count(), 3);
 }
 
-// Test for when a slow DoH response is delayed until after the initial timeout
-// and no more attempts are configured.
+// Test for when a slow DoH response is delayed until after the initial fallback
+// period and no more attempts are configured.
 TEST_F(DnsTransactionTestWithMockTime, SlowHttpsResponse_SingleAttempt) {
   config_.doh_attempts = 1;
   ConfigureDohServers(false /* use_post */);
 
-  AddQueryAndTimeout(kT0HostName, kT0Qtype,
-                     DnsQuery::PaddingStrategy::BLOCK_LENGTH_128, 0 /* id */,
-                     false /* enqueue_transaction_id */);
+  AddHangingQuery(kT0HostName, kT0Qtype,
+                  DnsQuery::PaddingStrategy::BLOCK_LENGTH_128, 0 /* id */,
+                  false /* enqueue_transaction_id */);
 
   TransactionHelper helper(kT0HostName, kT0Qtype, true /* secure */,
                            ERR_DNS_TIMED_OUT, resolve_context_.get());
   ASSERT_FALSE(helper.Run(transaction_factory_.get()));
 
-  // Only one attempt configured, so expect immediate failure after timeout
+  // Only one attempt configured, so expect immediate failure after fallback
   // period.
-  FastForwardBy(resolve_context_->NextDohTimeout(0 /* doh_server_index */,
-                                                 session_.get()));
+  FastForwardBy(resolve_context_->NextDohFallbackPeriod(
+      0 /* doh_server_index */, session_.get()));
   EXPECT_TRUE(helper.has_completed());
 }
 
-// Test for when a slow DoH response is delayed until after the initial timeout
-// but a retry is configured.
+// Test for when a slow DoH response is delayed until after the initial fallback
+// period but a retry is configured.
 TEST_F(DnsTransactionTestWithMockTime, SlowHttpsResponse_TwoAttempts) {
   config_.doh_attempts = 2;
   ConfigureDohServers(false /* use_post */);
@@ -2517,12 +2521,12 @@
   ASSERT_TRUE(sequenced_socket_data->IsPaused());
 
   // Another attempt configured, so transaction should not fail after initial
-  // timeout. Setup the second attempt to never receive a response.
-  AddQueryAndTimeout(kT0HostName, kT0Qtype,
-                     DnsQuery::PaddingStrategy::BLOCK_LENGTH_128, 0 /* id */,
-                     false /* enqueue_transaction_id */);
-  FastForwardBy(resolve_context_->NextDohTimeout(0 /* doh_server_index */,
-                                                 session_.get()));
+  // fallback period. Setup the second attempt to never receive a response.
+  AddHangingQuery(kT0HostName, kT0Qtype,
+                  DnsQuery::PaddingStrategy::BLOCK_LENGTH_128, 0 /* id */,
+                  false /* enqueue_transaction_id */);
+  FastForwardBy(resolve_context_->NextDohFallbackPeriod(
+      0 /* doh_server_index */, session_.get()));
   EXPECT_FALSE(helper.has_completed());
 
   // Expect first attempt to continue in parallel with retry, so expect the
diff --git a/net/dns/fuzzed_host_resolver_util.cc b/net/dns/fuzzed_host_resolver_util.cc
index feaaa6f5..48e353dd 100644
--- a/net/dns/fuzzed_host_resolver_util.cc
+++ b/net/dns/fuzzed_host_resolver_util.cc
@@ -132,10 +132,10 @@
   config.ndots = data_provider->ConsumeIntegralInRange(0, 3);
   config.attempts = data_provider->ConsumeIntegralInRange(1, 3);
 
-  // Timeouts don't really work for fuzzing. Even a timeout of 0 milliseconds
-  // will be increased after the first timeout, resulting in inconsistent
-  // behavior.
-  config.timeout = base::TimeDelta::FromDays(10);
+  // Fallback periods don't really work for fuzzing. Even a period of 0
+  // milliseconds will be increased after the first expiration, resulting in
+  // inconsistent behavior.
+  config.fallback_period = base::TimeDelta::FromDays(10);
 
   config.rotate = data_provider->ConsumeBool();
 
diff --git a/net/dns/host_resolver_manager.cc b/net/dns/host_resolver_manager.cc
index 21449c0..293c5ce 100644
--- a/net/dns/host_resolver_manager.cc
+++ b/net/dns/host_resolver_manager.cc
@@ -1389,7 +1389,7 @@
                                               HostCache::Entry* out_results) {
     DCHECK(response);
     AddressList addresses;
-    base::TimeDelta ttl;
+    base::Optional<base::TimeDelta> ttl;
     DnsResponse::Result parse_result =
         response->ParseToAddressList(&addresses, &ttl);
 
@@ -1622,6 +1622,29 @@
       }
     }
 
+    // For NXDOMAIN or NODATA (NOERROR with 0 answers), attempt to find a TTL
+    // via an SOA record.
+    if (response->rcode() == dns_protocol::kRcodeNXDOMAIN ||
+        (response->answer_count() == 0 &&
+         response->rcode() == dns_protocol::kRcodeNOERROR)) {
+      bool soa_found = false;
+      for (unsigned i = 0; i < response->authority_count(); ++i) {
+        DnsResourceRecord record;
+        if (parser.ReadRecord(&record) &&
+            record.type == dns_protocol::kTypeSOA) {
+          soa_found = true;
+          base::TimeDelta ttl = base::TimeDelta::FromSeconds(record.ttl);
+          *out_response_ttl =
+              std::min(out_response_ttl->value_or(base::TimeDelta::Max()), ttl);
+        }
+      }
+
+      // Per RFC2308, section 5, never cache negative results unless an SOA
+      // record is found.
+      if (!soa_found)
+        out_response_ttl->reset();
+    }
+
     return DnsResponse::DNS_PARSE_OK;
   }
 
diff --git a/net/dns/host_resolver_manager_unittest.cc b/net/dns/host_resolver_manager_unittest.cc
index 65206892..d9092521 100644
--- a/net/dns/host_resolver_manager_unittest.cc
+++ b/net/dns/host_resolver_manager_unittest.cc
@@ -7066,8 +7066,8 @@
   overrides.append_to_multi_label_name = false;
   const int ndots = 5;
   overrides.ndots = ndots;
-  const base::TimeDelta timeout = base::TimeDelta::FromSeconds(10);
-  overrides.timeout = timeout;
+  const base::TimeDelta fallback_period = base::TimeDelta::FromSeconds(10);
+  overrides.fallback_period = fallback_period;
   const int attempts = 20;
   overrides.attempts = attempts;
   const int doh_attempts = 19;
@@ -7097,7 +7097,7 @@
   EXPECT_EQ(search, overridden_config->search);
   EXPECT_FALSE(overridden_config->append_to_multi_label_name);
   EXPECT_EQ(ndots, overridden_config->ndots);
-  EXPECT_EQ(timeout, overridden_config->timeout);
+  EXPECT_EQ(fallback_period, overridden_config->fallback_period);
   EXPECT_EQ(attempts, overridden_config->attempts);
   EXPECT_EQ(doh_attempts, overridden_config->doh_attempts);
   EXPECT_TRUE(overridden_config->rotate);
@@ -7179,7 +7179,8 @@
   EXPECT_EQ(original_config.hosts, overridden_config->hosts);
   EXPECT_TRUE(overridden_config->append_to_multi_label_name);
   EXPECT_EQ(original_config.ndots, overridden_config->ndots);
-  EXPECT_EQ(original_config.timeout, overridden_config->timeout);
+  EXPECT_EQ(original_config.fallback_period,
+            overridden_config->fallback_period);
   EXPECT_EQ(original_config.attempts, overridden_config->attempts);
   EXPECT_TRUE(overridden_config->rotate);
   EXPECT_FALSE(overridden_config->use_local_ipv6);
@@ -7793,6 +7794,8 @@
   CreateResolver();
   UseMockDnsClient(CreateValidDnsConfig(), std::move(rules));
 
+  EXPECT_EQ(resolve_context_->host_cache()->size(), 0u);
+
   HostResolver::ResolveHostParameters parameters;
   parameters.dns_query_type = DnsQueryType::TXT;
 
@@ -7815,6 +7818,22 @@
                                        foo_records.begin(), foo_records.end()));
   EXPECT_NE(results.end(), std::search(results.begin(), results.end(),
                                        bar_records.begin(), bar_records.end()));
+
+  // Expect result to be cached.
+  EXPECT_EQ(resolve_context_->host_cache()->size(), 1u);
+  parameters.source = HostResolverSource::LOCAL_ONLY;
+  ResolveHostResponseHelper cached_response(resolver_->CreateRequest(
+      HostPortPair("host", 108), NetworkIsolationKey(), NetLogWithSource(),
+      parameters, resolve_context_.get(), resolve_context_->host_cache()));
+  EXPECT_THAT(cached_response.result_error(), IsOk());
+  ASSERT_THAT(cached_response.request()->GetTextResults(),
+              testing::Optional(testing::UnorderedElementsAre(
+                  "foo1", "foo2", "foo3", "bar1", "bar2")));
+  results = cached_response.request()->GetTextResults().value();
+  EXPECT_NE(results.end(), std::search(results.begin(), results.end(),
+                                       foo_records.begin(), foo_records.end()));
+  EXPECT_NE(results.end(), std::search(results.begin(), results.end(),
+                                       bar_records.begin(), bar_records.end()));
 }
 
 TEST_F(HostResolverManagerDnsTest, TxtQuery_InvalidConfig) {
@@ -7845,6 +7864,8 @@
   CreateResolver();
   UseMockDnsClient(CreateValidDnsConfig(), std::move(rules));
 
+  EXPECT_EQ(resolve_context_->host_cache()->size(), 0u);
+
   HostResolver::ResolveHostParameters parameters;
   parameters.dns_query_type = DnsQueryType::TXT;
 
@@ -7856,6 +7877,18 @@
   EXPECT_FALSE(response.request()->GetTextResults());
   EXPECT_FALSE(response.request()->GetHostnameResults());
   EXPECT_FALSE(response.request()->GetIntegrityResultsForTesting());
+
+  // Expect result to be cached.
+  EXPECT_EQ(resolve_context_->host_cache()->size(), 1u);
+  parameters.source = HostResolverSource::LOCAL_ONLY;
+  ResolveHostResponseHelper cached_response(resolver_->CreateRequest(
+      HostPortPair("host", 108), NetworkIsolationKey(), NetLogWithSource(),
+      parameters, resolve_context_.get(), resolve_context_->host_cache()));
+  EXPECT_THAT(cached_response.result_error(), IsError(ERR_NAME_NOT_RESOLVED));
+  EXPECT_FALSE(cached_response.request()->GetAddressResults());
+  EXPECT_FALSE(cached_response.request()->GetTextResults());
+  EXPECT_FALSE(cached_response.request()->GetHostnameResults());
+  EXPECT_FALSE(cached_response.request()->GetIntegrityResultsForTesting());
 }
 
 TEST_F(HostResolverManagerDnsTest, TxtQuery_Failure) {
@@ -7883,6 +7916,9 @@
   EXPECT_FALSE(response.request()->GetTextResults());
   EXPECT_FALSE(response.request()->GetHostnameResults());
   EXPECT_FALSE(response.request()->GetIntegrityResultsForTesting());
+
+  // Expect result not cached.
+  EXPECT_EQ(resolve_context_->host_cache()->size(), 0u);
 }
 
 TEST_F(HostResolverManagerDnsTest, TxtQuery_Timeout) {
@@ -7910,6 +7946,9 @@
   EXPECT_FALSE(response.request()->GetTextResults());
   EXPECT_FALSE(response.request()->GetHostnameResults());
   EXPECT_FALSE(response.request()->GetIntegrityResultsForTesting());
+
+  // Expect result not cached.
+  EXPECT_EQ(resolve_context_->host_cache()->size(), 0u);
 }
 
 TEST_F(HostResolverManagerDnsTest, TxtQuery_Empty) {
@@ -7926,6 +7965,8 @@
   CreateResolver();
   UseMockDnsClient(CreateValidDnsConfig(), std::move(rules));
 
+  EXPECT_EQ(resolve_context_->host_cache()->size(), 0u);
+
   HostResolver::ResolveHostParameters parameters;
   parameters.dns_query_type = DnsQueryType::TXT;
 
@@ -7937,6 +7978,18 @@
   EXPECT_FALSE(response.request()->GetTextResults());
   EXPECT_FALSE(response.request()->GetHostnameResults());
   EXPECT_FALSE(response.request()->GetIntegrityResultsForTesting());
+
+  // Expect result to be cached.
+  EXPECT_EQ(resolve_context_->host_cache()->size(), 1u);
+  parameters.source = HostResolverSource::LOCAL_ONLY;
+  ResolveHostResponseHelper cached_response(resolver_->CreateRequest(
+      HostPortPair("host", 108), NetworkIsolationKey(), NetLogWithSource(),
+      parameters, resolve_context_.get(), resolve_context_->host_cache()));
+  EXPECT_THAT(cached_response.result_error(), IsError(ERR_NAME_NOT_RESOLVED));
+  EXPECT_FALSE(cached_response.request()->GetAddressResults());
+  EXPECT_FALSE(cached_response.request()->GetTextResults());
+  EXPECT_FALSE(cached_response.request()->GetHostnameResults());
+  EXPECT_FALSE(cached_response.request()->GetIntegrityResultsForTesting());
 }
 
 TEST_F(HostResolverManagerDnsTest, TxtQuery_Malformed) {
@@ -7964,6 +8017,9 @@
   EXPECT_FALSE(response.request()->GetTextResults());
   EXPECT_FALSE(response.request()->GetHostnameResults());
   EXPECT_FALSE(response.request()->GetIntegrityResultsForTesting());
+
+  // Expect result not cached.
+  EXPECT_EQ(resolve_context_->host_cache()->size(), 0u);
 }
 
 TEST_F(HostResolverManagerDnsTest, TxtQuery_MismatchedName) {
@@ -7988,6 +8044,9 @@
   EXPECT_FALSE(response.request()->GetTextResults());
   EXPECT_FALSE(response.request()->GetHostnameResults());
   EXPECT_FALSE(response.request()->GetIntegrityResultsForTesting());
+
+  // Expect result not cached.
+  EXPECT_EQ(resolve_context_->host_cache()->size(), 0u);
 }
 
 TEST_F(HostResolverManagerDnsTest, TxtQuery_WrongType) {
@@ -8013,6 +8072,9 @@
   EXPECT_FALSE(response.request()->GetTextResults());
   EXPECT_FALSE(response.request()->GetHostnameResults());
   EXPECT_FALSE(response.request()->GetIntegrityResultsForTesting());
+
+  // Expect result not cached.
+  EXPECT_EQ(resolve_context_->host_cache()->size(), 0u);
 }
 
 // Same as TxtQuery except we specify DNS HostResolverSource instead of relying
@@ -8035,6 +8097,8 @@
   CreateResolver();
   UseMockDnsClient(CreateValidDnsConfig(), std::move(rules));
 
+  EXPECT_EQ(resolve_context_->host_cache()->size(), 0u);
+
   HostResolver::ResolveHostParameters parameters;
   parameters.source = HostResolverSource::DNS;
   parameters.dns_query_type = DnsQueryType::TXT;
@@ -8058,6 +8122,22 @@
                                        foo_records.begin(), foo_records.end()));
   EXPECT_NE(results.end(), std::search(results.begin(), results.end(),
                                        bar_records.begin(), bar_records.end()));
+
+  // Expect result to be cached.
+  EXPECT_EQ(resolve_context_->host_cache()->size(), 1u);
+  ResolveHostResponseHelper cached_response(resolver_->CreateRequest(
+      HostPortPair("host", 108), NetworkIsolationKey(), NetLogWithSource(),
+      parameters, resolve_context_.get(), resolve_context_->host_cache()));
+  EXPECT_THAT(cached_response.result_error(), IsOk());
+  EXPECT_TRUE(cached_response.request()->GetStaleInfo());
+  ASSERT_THAT(cached_response.request()->GetTextResults(),
+              testing::Optional(testing::UnorderedElementsAre(
+                  "foo1", "foo2", "foo3", "bar1", "bar2")));
+  results = cached_response.request()->GetTextResults().value();
+  EXPECT_NE(results.end(), std::search(results.begin(), results.end(),
+                                       foo_records.begin(), foo_records.end()));
+  EXPECT_NE(results.end(), std::search(results.begin(), results.end(),
+                                       bar_records.begin(), bar_records.end()));
 }
 
 TEST_F(HostResolverManagerDnsTest, PtrQuery) {
diff --git a/net/dns/public/dns_config_overrides.cc b/net/dns/public/dns_config_overrides.cc
index ae7c1f9..68bff684 100644
--- a/net/dns/public/dns_config_overrides.cc
+++ b/net/dns/public/dns_config_overrides.cc
@@ -26,7 +26,7 @@
 bool DnsConfigOverrides::operator==(const DnsConfigOverrides& other) const {
   return nameservers == other.nameservers && search == other.search &&
          append_to_multi_label_name == other.append_to_multi_label_name &&
-         ndots == other.ndots && timeout == other.timeout &&
+         ndots == other.ndots && fallback_period == other.fallback_period &&
          attempts == other.attempts && doh_attempts == other.doh_attempts &&
          rotate == other.rotate && use_local_ipv6 == other.use_local_ipv6 &&
          dns_over_https_servers == other.dns_over_https_servers &&
@@ -50,7 +50,7 @@
   overrides.search = defaults.search;
   overrides.append_to_multi_label_name = defaults.append_to_multi_label_name;
   overrides.ndots = defaults.ndots;
-  overrides.timeout = defaults.timeout;
+  overrides.fallback_period = defaults.fallback_period;
   overrides.attempts = defaults.attempts;
   overrides.doh_attempts = defaults.doh_attempts;
   overrides.rotate = defaults.rotate;
@@ -67,8 +67,8 @@
 
 bool DnsConfigOverrides::OverridesEverything() const {
   return nameservers && search && append_to_multi_label_name && ndots &&
-         timeout && attempts && doh_attempts && rotate && use_local_ipv6 &&
-         dns_over_https_servers && secure_dns_mode &&
+         fallback_period && attempts && doh_attempts && rotate &&
+         use_local_ipv6 && dns_over_https_servers && secure_dns_mode &&
          allow_dns_over_https_upgrade && disabled_upgrade_providers &&
          clear_hosts;
 }
@@ -87,8 +87,8 @@
     overridden.append_to_multi_label_name = append_to_multi_label_name.value();
   if (ndots)
     overridden.ndots = ndots.value();
-  if (timeout)
-    overridden.timeout = timeout.value();
+  if (fallback_period)
+    overridden.fallback_period = fallback_period.value();
   if (attempts)
     overridden.attempts = attempts.value();
   if (doh_attempts)
diff --git a/net/dns/public/dns_config_overrides.h b/net/dns/public/dns_config_overrides.h
index fd7eb5c..dcef613 100644
--- a/net/dns/public/dns_config_overrides.h
+++ b/net/dns/public/dns_config_overrides.h
@@ -51,7 +51,7 @@
   base::Optional<std::vector<std::string>> search;
   base::Optional<bool> append_to_multi_label_name;
   base::Optional<int> ndots;
-  base::Optional<base::TimeDelta> timeout;
+  base::Optional<base::TimeDelta> fallback_period;
   base::Optional<int> attempts;
   base::Optional<int> doh_attempts;
   base::Optional<bool> rotate;
diff --git a/net/dns/resolve_context.cc b/net/dns/resolve_context.cc
index 1a2b7fb..74ed85c 100644
--- a/net/dns/resolve_context.cc
+++ b/net/dns/resolve_context.cc
@@ -29,34 +29,37 @@
 
 namespace {
 
-// Set min timeout, in case we are talking to a local DNS proxy.
-const base::TimeDelta kMinTimeout = base::TimeDelta::FromMilliseconds(10);
+// Min fallback period between queries, in case we are talking to a local DNS
+// proxy.
+const base::TimeDelta kMinFallbackPeriod =
+    base::TimeDelta::FromMilliseconds(10);
 
-// Default maximum timeout between queries, even with exponential backoff.
-// (Can be overridden by field trial.)
-const base::TimeDelta kDefaultMaxTimeout = base::TimeDelta::FromSeconds(5);
+// Default maximum fallback period between queries, even with exponential
+// backoff. (Can be overridden by field trial.)
+const base::TimeDelta kDefaultMaxFallbackPeriod =
+    base::TimeDelta::FromSeconds(5);
 
 // Maximum RTT that will fit in the RTT histograms.
 const base::TimeDelta kRttMax = base::TimeDelta::FromSeconds(30);
 // Number of buckets in the histogram of observed RTTs.
 const size_t kRttBucketCount = 350;
-// Target percentile in the RTT histogram used for retransmission timeout.
+// Target percentile in the RTT histogram used for fallback period.
 const int kRttPercentile = 99;
 // Number of samples to seed the histogram with.
 const base::HistogramBase::Count kNumSeeds = 2;
 
-base::TimeDelta GetDefaultTimeout(const DnsConfig& config) {
+base::TimeDelta GetDefaultFallbackPeriod(const DnsConfig& config) {
   NetworkChangeNotifier::ConnectionType type =
       NetworkChangeNotifier::GetConnectionType();
   return GetTimeDeltaForConnectionTypeFromFieldTrialOrDefault(
-      "AsyncDnsInitialTimeoutMsByConnectionType", config.timeout, type);
+      "AsyncDnsInitialTimeoutMsByConnectionType", config.fallback_period, type);
 }
 
-base::TimeDelta GetMaxTimeout() {
+base::TimeDelta GetMaxFallbackPeriod() {
   NetworkChangeNotifier::ConnectionType type =
       NetworkChangeNotifier::GetConnectionType();
   return GetTimeDeltaForConnectionTypeFromFieldTrialOrDefault(
-      "AsyncDnsMaxTimeoutMsByConnectionType", kDefaultMaxTimeout, type);
+      "AsyncDnsMaxTimeoutMsByConnectionType", kDefaultMaxFallbackPeriod, type);
 }
 
 class RttBuckets : public base::BucketRanges {
@@ -79,7 +82,7 @@
     base::TimeDelta rtt_estimate) {
   std::unique_ptr<base::SampleVector> histogram =
       std::make_unique<base::SampleVector>(GetRttBuckets());
-  // Seed histogram with 2 samples at |rtt_estimate| timeout.
+  // Seed histogram with 2 samples at |rtt_estimate|.
   histogram->Accumulate(base::checked_cast<base::HistogramBase::Sample>(
                             rtt_estimate.InMilliseconds()),
                         kNumSeeds);
@@ -101,7 +104,7 @@
     : url_request_context_(url_request_context),
       host_cache_(enable_caching ? HostCache::CreateDefaultCache() : nullptr),
       isolation_info_(IsolationInfo::CreateTransient()) {
-  max_timeout_ = GetMaxTimeout();
+  max_fallback_period_ = GetMaxFallbackPeriod();
 }
 
 ResolveContext::~ResolveContext() = default;
@@ -219,8 +222,10 @@
 
   ServerStats* stats = GetServerStats(server_index, is_doh_server);
 
-  base::TimeDelta base_timeout = NextTimeoutHelper(stats, 0 /* num_backoffs */);
-  RecordRttForUma(server_index, is_doh_server, rtt, rv, base_timeout, session);
+  base::TimeDelta base_fallback_period =
+      NextFallbackPeriodHelper(stats, 0 /* num_backoffs */);
+  RecordRttForUma(server_index, is_doh_server, rtt, rv, base_fallback_period,
+                  session);
 
   // RTT values shouldn't be less than 0, but it shouldn't cause a crash if
   // they are anyway, so clip to 0. See https://crbug.com/753568.
@@ -233,23 +238,27 @@
       1);
 }
 
-base::TimeDelta ResolveContext::NextClassicTimeout(size_t classic_server_index,
-                                                   int attempt,
-                                                   const DnsSession* session) {
+base::TimeDelta ResolveContext::NextClassicFallbackPeriod(
+    size_t classic_server_index,
+    int attempt,
+    const DnsSession* session) {
   if (!IsCurrentSession(session))
-    return std::min(GetDefaultTimeout(session->config()), max_timeout_);
+    return std::min(GetDefaultFallbackPeriod(session->config()),
+                    max_fallback_period_);
 
-  return NextTimeoutHelper(
+  return NextFallbackPeriodHelper(
       GetServerStats(classic_server_index, false /* is _doh_server */),
       attempt / current_session_->config().nameservers.size());
 }
 
-base::TimeDelta ResolveContext::NextDohTimeout(size_t doh_server_index,
-                                               const DnsSession* session) {
+base::TimeDelta ResolveContext::NextDohFallbackPeriod(
+    size_t doh_server_index,
+    const DnsSession* session) {
   if (!IsCurrentSession(session))
-    return std::min(GetDefaultTimeout(session->config()), max_timeout_);
+    return std::min(GetDefaultFallbackPeriod(session->config()),
+                    max_fallback_period_);
 
-  return NextTimeoutHelper(
+  return NextFallbackPeriodHelper(
       GetServerStats(doh_server_index, true /* is _doh_server */),
       0 /* num_backoffs */);
 }
@@ -280,8 +289,8 @@
   current_session_.reset();
   classic_server_stats_.clear();
   doh_server_stats_.clear();
-  initial_timeout_ = base::TimeDelta();
-  max_timeout_ = GetMaxTimeout();
+  initial_fallback_period_ = base::TimeDelta();
+  max_fallback_period_ = GetMaxFallbackPeriod();
 
   if (!new_session) {
     NotifyDohStatusObserversOfSessionChanged();
@@ -290,14 +299,16 @@
 
   current_session_ = new_session->GetWeakPtr();
 
-  initial_timeout_ = GetDefaultTimeout(current_session_->config());
+  initial_fallback_period_ =
+      GetDefaultFallbackPeriod(current_session_->config());
 
   for (size_t i = 0; i < new_session->config().nameservers.size(); ++i) {
-    classic_server_stats_.emplace_back(GetRttHistogram(initial_timeout_));
+    classic_server_stats_.emplace_back(
+        GetRttHistogram(initial_fallback_period_));
   }
   for (size_t i = 0; i < new_session->config().dns_over_https_servers.size();
        ++i) {
-    doh_server_stats_.emplace_back(GetRttHistogram(initial_timeout_));
+    doh_server_stats_.emplace_back(GetRttHistogram(initial_fallback_period_));
   }
 
   CHECK_EQ(new_session->config().nameservers.size(),
@@ -353,11 +364,13 @@
   }
 }
 
-base::TimeDelta ResolveContext::NextTimeoutHelper(ServerStats* server_stats,
-                                                  int num_backoffs) {
-  // Respect initial timeout (from config or field trial) if it exceeds max.
-  if (initial_timeout_ > max_timeout_)
-    return initial_timeout_;
+base::TimeDelta ResolveContext::NextFallbackPeriodHelper(
+    ServerStats* server_stats,
+    int num_backoffs) {
+  // Respect initial fallback period (from config or field trial) if it exceeds
+  // max.
+  if (initial_fallback_period_ > max_fallback_period_)
+    return initial_fallback_period_;
 
   static_assert(std::numeric_limits<base::HistogramBase::Count>::is_signed,
                 "histogram base count assumed to be signed");
@@ -373,19 +386,19 @@
     ++index;
   }
 
-  base::TimeDelta timeout =
+  base::TimeDelta fallback_period =
       base::TimeDelta::FromMilliseconds(GetRttBuckets()->range(index));
 
-  timeout = std::max(timeout, kMinTimeout);
+  fallback_period = std::max(fallback_period, kMinFallbackPeriod);
 
-  return std::min(timeout * (1 << num_backoffs), max_timeout_);
+  return std::min(fallback_period * (1 << num_backoffs), max_fallback_period_);
 }
 
 void ResolveContext::RecordRttForUma(size_t server_index,
                                      bool is_doh_server,
                                      base::TimeDelta rtt,
                                      int rv,
-                                     base::TimeDelta base_timeout,
+                                     base::TimeDelta base_fallback_period,
                                      const DnsSession* session) {
   DCHECK(IsCurrentSession(session));
 
@@ -403,15 +416,17 @@
       DCHECK(is_doh_server);
 
       // Only for SecureValidated requests, record the ratio between successful
-      // RTT and the base timeout for the server. Note that RTT could be much
-      // longer than the timeout as previous attempts are often allowed to
-      // continue in parallel with new attempts made by the transaction. Scale
-      // the ratio up by 10 for sub-integer granularity.
-      // TODO(crbug.com/1105138): Remove after determining good timeout logic.
-      int timeout_ratio = base::ClampFloor(rtt / base_timeout * 10);
+      // RTT and the base fallback period for the server. Note that RTT could be
+      // much longer than the fallback period as previous attempts are often
+      // allowed to continue in parallel with new attempts made by the
+      // transaction. Scale the ratio up by 10 for sub-integer granularity.
+      // TODO(crbug.com/1105138): Remove after determining good fallback period
+      // logic.
+      int fallback_period_ratio =
+          base::ClampFloor(rtt / base_fallback_period * 10);
       UMA_HISTOGRAM_COUNTS_1000(
           "Net.DNS.DnsTransaction.SecureValidated.SuccessTimeoutRatio",
-          timeout_ratio);
+          fallback_period_ratio);
     }
   } else {
     base::UmaHistogramMediumTimes(
diff --git a/net/dns/resolve_context.h b/net/dns/resolve_context.h
index 1a96eff1..98d53dc7 100644
--- a/net/dns/resolve_context.h
+++ b/net/dns/resolve_context.h
@@ -90,7 +90,7 @@
   // session.
   size_t NumAvailableDohServers(const DnsSession* session) const;
 
-  // Record that server failed to respond (due to SRV_FAIL or timeout). If
+  // Record that server failed to respond (due to SRV_FAIL or fallback). If
   // |is_doh_server| and the number of failures has surpassed a threshold,
   // sets the DoH probe state to unavailable. Noop if |session| is not the
   // current session. Should only be called with with server failure |rv|s,
@@ -115,15 +115,18 @@
                  int rv,
                  const DnsSession* session);
 
-  // Return the timeout for the next query. |attempt| counts from 0 and is used
-  // for exponential backoff.
-  base::TimeDelta NextClassicTimeout(size_t classic_server_index,
-                                     int attempt,
-                                     const DnsSession* session);
+  // Return the period the next query should run before fallback to next attempt
+  // or out of the transaction. (Not actually a "timeout" because queries are
+  // not typically cancelled as additional attempts are made.) |attempt| counts
+  // from 0 and is used for exponential backoff.
+  base::TimeDelta NextClassicFallbackPeriod(size_t classic_server_index,
+                                            int attempt,
+                                            const DnsSession* session);
 
-  // Return the timeout for the next DoH query.
-  base::TimeDelta NextDohTimeout(size_t doh_server_index,
-                                 const DnsSession* session);
+  // Return the period the next DoH query should run before fallback to next
+  // attempt or out of the transaction.
+  base::TimeDelta NextDohFallbackPeriod(size_t doh_server_index,
+                                        const DnsSession* session);
 
   void RegisterDohStatusObserver(DohStatusObserver* observer);
   void UnregisterDohStatusObserver(const DohStatusObserver* observer);
@@ -175,7 +178,7 @@
     // current connection.
     bool current_connection_success = false;
 
-    // Last time when server returned failure or timeout.
+    // Last time when server returned failure or exceeded fallback period.
     base::TimeTicks last_failure;
     // Last time when server returned success.
     base::TimeTicks last_success;
@@ -195,15 +198,16 @@
   // ServerStats found.
   ServerStats* GetServerStats(size_t server_index, bool is_doh_server);
 
-  // Return the timeout for the next query.
-  base::TimeDelta NextTimeoutHelper(ServerStats* server_stats, int attempt);
+  // Return the fallback period for the next query.
+  base::TimeDelta NextFallbackPeriodHelper(ServerStats* server_stats,
+                                           int attempt);
 
   // Record the time to perform a query.
   void RecordRttForUma(size_t server_index,
                        bool is_doh_server,
                        base::TimeDelta rtt,
                        int rv,
-                       base::TimeDelta base_timeout,
+                       base::TimeDelta base_fallback_period,
                        const DnsSession* session);
   std::string GetQueryTypeForUma(size_t server_index,
                                  bool is_doh_server,
@@ -221,8 +225,8 @@
 
   std::unique_ptr<HostCache> host_cache_;
 
-  // Current maximum server timeout. Updated on connection change.
-  base::TimeDelta max_timeout_;
+  // Current maximum server fallback period. Updated on connection change.
+  base::TimeDelta max_fallback_period_;
 
   base::ObserverList<DohStatusObserver,
                      true /* check_empty */,
@@ -241,7 +245,7 @@
   base::WeakPtr<const DnsSession> current_session_;
   // Current index into |config_.nameservers| to begin resolution with.
   int classic_server_index_ = 0;
-  base::TimeDelta initial_timeout_;
+  base::TimeDelta initial_fallback_period_;
   // Track runtime statistics of each classic (insecure) DNS server.
   std::vector<ServerStats> classic_server_stats_;
   // Track runtime statistics of each DoH server.
diff --git a/net/dns/resolve_context_unittest.cc b/net/dns/resolve_context_unittest.cc
index c246b34..10849b9 100644
--- a/net/dns/resolve_context_unittest.cc
+++ b/net/dns/resolve_context_unittest.cc
@@ -867,8 +867,9 @@
   EXPECT_EQ(doh_itr->GetNextAttemptIndex(), 2u);
 }
 
-// Expect default calculated timeout to be within 10ms of |DnsConfig::timeout|.
-TEST_F(ResolveContextTest, Timeout_Default) {
+// Expect default calculated fallback period to be within 10ms of
+// |DnsConfig::fallback_period|.
+TEST_F(ResolveContextTest, FallbackPeriod_Default) {
   ResolveContext context(nullptr /* url_request_context */,
                          false /* enable_caching */);
   DnsConfig config =
@@ -878,58 +879,63 @@
                                             false /* network_change */);
 
   base::TimeDelta delta =
-      context.NextClassicTimeout(0 /* server_index */, 0 /* attempt */,
-                                 session.get()) -
-      config.timeout;
+      context.NextClassicFallbackPeriod(0 /* server_index */, 0 /* attempt */,
+                                        session.get()) -
+      config.fallback_period;
   EXPECT_LE(delta, base::TimeDelta::FromMilliseconds(10));
-  delta = context.NextDohTimeout(0 /* doh_server_index */, session.get()) -
-          config.timeout;
+  delta =
+      context.NextDohFallbackPeriod(0 /* doh_server_index */, session.get()) -
+      config.fallback_period;
   EXPECT_LE(delta, base::TimeDelta::FromMilliseconds(10));
 }
 
-// Expect short calculated timeout to be within 10ms of |DnsConfig::timeout|.
-TEST_F(ResolveContextTest, Timeout_ShortConfigured) {
+// Expect short calculated fallback period to be within 10ms of
+// |DnsConfig::fallback_period|.
+TEST_F(ResolveContextTest, FallbackPeriod_ShortConfigured) {
   ResolveContext context(nullptr /* url_request_context */,
                          false /* enable_caching */);
   DnsConfig config =
       CreateDnsConfig(2 /* num_servers */, 2 /* num_doh_servers */);
-  config.timeout = base::TimeDelta::FromMilliseconds(15);
+  config.fallback_period = base::TimeDelta::FromMilliseconds(15);
   scoped_refptr<DnsSession> session = CreateDnsSession(config);
   context.InvalidateCachesAndPerSessionData(session.get(),
                                             false /* network_change */);
 
   base::TimeDelta delta =
-      context.NextClassicTimeout(0 /* server_index */, 0 /* attempt */,
-                                 session.get()) -
-      config.timeout;
+      context.NextClassicFallbackPeriod(0 /* server_index */, 0 /* attempt */,
+                                        session.get()) -
+      config.fallback_period;
   EXPECT_LE(delta, base::TimeDelta::FromMilliseconds(10));
-  delta = context.NextDohTimeout(0 /* doh_server_index */, session.get()) -
-          config.timeout;
+  delta =
+      context.NextDohFallbackPeriod(0 /* doh_server_index */, session.get()) -
+      config.fallback_period;
   EXPECT_LE(delta, base::TimeDelta::FromMilliseconds(10));
 }
 
-// Expect long calculated timeout to be equal to |DnsConfig::timeout|.
-// (Default max timeout is 5 seconds, so NextTimeout should return exactly
-// the config timeout.)
-TEST_F(ResolveContextTest, Timeout_LongConfigured) {
+// Expect long calculated fallback period to be equal to
+// |DnsConfig::fallback_period|. (Default max fallback period is 5 seconds, so
+// NextClassicFallbackPeriod() should return exactly the config fallback
+// period.)
+TEST_F(ResolveContextTest, FallbackPeriod_LongConfigured) {
   ResolveContext context(nullptr /* url_request_context */,
                          false /* enable_caching */);
   DnsConfig config =
       CreateDnsConfig(2 /* num_servers */, 2 /* num_doh_servers */);
-  config.timeout = base::TimeDelta::FromSeconds(15);
+  config.fallback_period = base::TimeDelta::FromSeconds(15);
   scoped_refptr<DnsSession> session = CreateDnsSession(config);
   context.InvalidateCachesAndPerSessionData(session.get(),
                                             false /* network_change */);
 
-  EXPECT_EQ(context.NextClassicTimeout(0 /* server_index */, 0 /* attempt */,
-                                       session.get()),
-            config.timeout);
-  EXPECT_EQ(context.NextDohTimeout(0 /* doh_server_index */, session.get()),
-            config.timeout);
+  EXPECT_EQ(context.NextClassicFallbackPeriod(0 /* server_index */,
+                                              0 /* attempt */, session.get()),
+            config.fallback_period);
+  EXPECT_EQ(
+      context.NextDohFallbackPeriod(0 /* doh_server_index */, session.get()),
+      config.fallback_period);
 }
 
-// Expect timeouts to increase on recording long round-trip times.
-TEST_F(ResolveContextTest, Timeout_LongRtt) {
+// Expect fallback periods to increase on recording long round-trip times.
+TEST_F(ResolveContextTest, FallbackPeriod_LongRtt) {
   ResolveContext context(nullptr /* url_request_context */,
                          false /* enable_caching */);
   DnsConfig config =
@@ -945,28 +951,31 @@
                       base::TimeDelta::FromMinutes(10), OK, session.get());
   }
 
-  // Expect servers with high recorded RTT to have increased timeouts (>10ms).
+  // Expect servers with high recorded RTT to have increased fallback periods
+  // (>10ms).
   base::TimeDelta delta =
-      context.NextClassicTimeout(0u /* server_index */, 0 /* attempt */,
-                                 session.get()) -
-      config.timeout;
+      context.NextClassicFallbackPeriod(0u /* server_index */, 0 /* attempt */,
+                                        session.get()) -
+      config.fallback_period;
   EXPECT_GT(delta, base::TimeDelta::FromMilliseconds(10));
-  delta = context.NextDohTimeout(1u, session.get()) - config.timeout;
+  delta =
+      context.NextDohFallbackPeriod(1u, session.get()) - config.fallback_period;
   EXPECT_GT(delta, base::TimeDelta::FromMilliseconds(10));
 
   // Servers without recorded RTT expected to remain the same (<=10ms).
-  delta = context.NextClassicTimeout(1u /* server_index */, 0 /* attempt */,
-                                     session.get()) -
-          config.timeout;
+  delta = context.NextClassicFallbackPeriod(1u /* server_index */,
+                                            0 /* attempt */, session.get()) -
+          config.fallback_period;
   EXPECT_LE(delta, base::TimeDelta::FromMilliseconds(10));
-  delta = context.NextDohTimeout(0u /* doh_server_index */, session.get()) -
-          config.timeout;
+  delta =
+      context.NextDohFallbackPeriod(0u /* doh_server_index */, session.get()) -
+      config.fallback_period;
   EXPECT_LE(delta, base::TimeDelta::FromMilliseconds(10));
 }
 
-// Expect recording round-trip times to have no affect on timeout without a
-// current session.
-TEST_F(ResolveContextTest, Timeout_NoSession) {
+// Expect recording round-trip times to have no affect on fallback period
+// without a current session.
+TEST_F(ResolveContextTest, FallbackPeriod_NoSession) {
   ResolveContext context(nullptr /* url_request_context */,
                          false /* enable_caching */);
   DnsConfig config =
@@ -981,18 +990,19 @@
   }
 
   base::TimeDelta delta =
-      context.NextClassicTimeout(0u /* server_index */, 0 /* attempt */,
-                                 session.get()) -
-      config.timeout;
+      context.NextClassicFallbackPeriod(0u /* server_index */, 0 /* attempt */,
+                                        session.get()) -
+      config.fallback_period;
   EXPECT_LE(delta, base::TimeDelta::FromMilliseconds(10));
-  delta = context.NextDohTimeout(1u /* doh_server_index */, session.get()) -
-          config.timeout;
+  delta =
+      context.NextDohFallbackPeriod(1u /* doh_server_index */, session.get()) -
+      config.fallback_period;
   EXPECT_LE(delta, base::TimeDelta::FromMilliseconds(10));
 }
 
-// Expect recording round-trip times to have no affect on timeout without a
-// current session.
-TEST_F(ResolveContextTest, Timeout_DifferentSession) {
+// Expect recording round-trip times to have no affect on fallback periods
+// without a current session.
+TEST_F(ResolveContextTest, FallbackPeriod_DifferentSession) {
   DnsConfig config1 =
       CreateDnsConfig(1 /* num_servers */, 3 /* num_doh_servers */);
   scoped_refptr<DnsSession> session1 = CreateDnsSession(config1);
@@ -1006,7 +1016,7 @@
   context.InvalidateCachesAndPerSessionData(session2.get(),
                                             true /* network_change */);
 
-  // Record RTT's to increase timeouts for current session.
+  // Record RTT's to increase fallback periods for current session.
   for (int i = 0; i < 50; ++i) {
     context.RecordRtt(0u /* server_index */, false /* is_doh_server */,
                       base::TimeDelta::FromMinutes(10), OK, session2.get());
@@ -1014,27 +1024,28 @@
                       base::TimeDelta::FromMinutes(10), OK, session2.get());
   }
 
-  // Expect normal short timeouts for other session.
+  // Expect normal short fallback periods for other session.
   base::TimeDelta delta =
-      context.NextClassicTimeout(0u /* server_index */, 0 /* attempt */,
-                                 session1.get()) -
-      config1.timeout;
+      context.NextClassicFallbackPeriod(0u /* server_index */, 0 /* attempt */,
+                                        session1.get()) -
+      config1.fallback_period;
   EXPECT_LE(delta, base::TimeDelta::FromMilliseconds(10));
-  delta = context.NextDohTimeout(0u /* doh_server_index */, session1.get()) -
-          config1.timeout;
+  delta =
+      context.NextDohFallbackPeriod(0u /* doh_server_index */, session1.get()) -
+      config1.fallback_period;
   EXPECT_LE(delta, base::TimeDelta::FromMilliseconds(10));
 
   // Recording RTT's for other session should have no effect on current session
-  // timeouts.
-  base::TimeDelta timeout = context.NextClassicTimeout(
+  // fallback periods.
+  base::TimeDelta fallback_period = context.NextClassicFallbackPeriod(
       0u /* server_index */, 0 /* attempt */, session2.get());
   for (int i = 0; i < 50; ++i) {
     context.RecordRtt(0u /* server_index */, false /* is_doh_server */,
                       base::TimeDelta::FromMilliseconds(1), OK, session1.get());
   }
-  EXPECT_EQ(timeout,
-            context.NextClassicTimeout(0u /* server_index */, 0 /* attempt */,
-                                       session2.get()));
+  EXPECT_EQ(fallback_period,
+            context.NextClassicFallbackPeriod(0u /* server_index */,
+                                              0 /* attempt */, session2.get()));
 }
 
 // Ensures that reported negative RTT values don't cause a crash. Regression
diff --git a/net/http/transport_security_state_static.json b/net/http/transport_security_state_static.json
index 933d251..4bcd2c8 100644
--- a/net/http/transport_security_state_static.json
+++ b/net/http/transport_security_state_static.json
@@ -3102,7 +3102,6 @@
     { "name": "hardh.at", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
     { "name": "haveeruexaminer.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
     { "name": "helloacm.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
-    { "name": "hurricanelabs.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
     { "name": "hyper-text.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
     { "name": "idndx.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
     { "name": "im-c-shop.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -3813,7 +3812,6 @@
     { "name": "roomhub.jp", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
     { "name": "rsajeey.info", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
     { "name": "rubi-ka.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
-    { "name": "ryansmithphotography.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
     { "name": "schnell-gold.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
     { "name": "selectel.ru", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
     { "name": "silver-heart.co.uk", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -7491,7 +7489,6 @@
     { "name": "liquidcomm.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
     { "name": "loadingdeck.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
     { "name": "locomotive.ca", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
-    { "name": "lovemomiji.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
     { "name": "lpak.nl", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
     { "name": "lynkos.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
     { "name": "m.nu", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -8113,7 +8110,6 @@
     { "name": "bashc.at", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
     { "name": "basicsolutionsus.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
     { "name": "baumstark.ca", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
-    { "name": "bazdell.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
     { "name": "bblovess.cn", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
     { "name": "bcbsmagentprofile.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
     { "name": "bcmlu.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -17676,7 +17672,6 @@
     { "name": "lunarsoft.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
     { "name": "malamutedoalasca.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
     { "name": "kofler.info", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
-    { "name": "linden.me", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
     { "name": "losless.fr", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
     { "name": "loongsg.xyz", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
     { "name": "lebal.se", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -19181,7 +19176,6 @@
     { "name": "concerto.amsterdam", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
     { "name": "coolgifs.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
     { "name": "crazycraftland.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
-    { "name": "cursos.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
     { "name": "corporateencryption.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
     { "name": "cralarm.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
     { "name": "dandenongroadapartments.com.au", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -20284,7 +20278,6 @@
     { "name": "openconcept.no", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
     { "name": "olightstore.ro", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
     { "name": "nuiguru.me", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
-    { "name": "paigeglass.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
     { "name": "nosbenevolesontdutalent.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
     { "name": "open-letters.de", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
     { "name": "onlinefashion.it", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -26540,7 +26533,6 @@
     { "name": "everain.me", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
     { "name": "epicvistas.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
     { "name": "ebop.ch", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
-    { "name": "eworksmedia.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
     { "name": "exeintel.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
     { "name": "example.wf", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
     { "name": "evilarmy.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -26999,7 +26991,6 @@
     { "name": "itis.gov", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
     { "name": "iskai.net", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
     { "name": "ichasco.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
-    { "name": "ilamparas.mx", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
     { "name": "islief.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
     { "name": "ipal.tel", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
     { "name": "interboursegeneva.ch", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -31047,7 +31038,6 @@
     { "name": "jungleculture.co.za", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
     { "name": "www-8522.am", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
     { "name": "savecrypto.org", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
-    { "name": "vigoxatelier.tech", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
     { "name": "sproing.ca", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
     { "name": "webveloper.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
     { "name": "sintesysglobal.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -31155,7 +31145,6 @@
     { "name": "halitopuroprodutos.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
     { "name": "hanys.xyz", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
     { "name": "haogoodair.ca", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
-    { "name": "heartview.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
     { "name": "helpstarloja.com.br", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
     { "name": "homesandal.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
     { "name": "hotcandlestick.com", "policy": "bulk-18-weeks", "mode": "force-https", "include_subdomains": true },
@@ -35379,7 +35368,6 @@
     { "name": "reepay.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "registerforevent.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "regraph.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
-    { "name": "reimaginebelonging.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "reinfer.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "reisekosten-gorilla.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "remodelwithlegacy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -37078,7 +37066,6 @@
     { "name": "eff-bee-eye.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "egarden.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "electricalagoura.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
-    { "name": "elguadia.faith", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "elitesensual.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "elucron.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "empower.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -37269,7 +37256,6 @@
     { "name": "namazvakitleri.com.tr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "nani.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "natchmatch.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
-    { "name": "nationalcprfoundation.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "natlec.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "naturalkitchen.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "ncc-qualityandsafety.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -40535,7 +40521,6 @@
     { "name": "retireyourpassword.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "rga.sh", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "rickvanderzwet.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
-    { "name": "robicue.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "rody-design.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "roodfruit.studio", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "roughcopy.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -44682,7 +44667,6 @@
     { "name": "registerex.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "rehabmail.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "reiki-france.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
-    { "name": "reimaginebelonging.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "rekisuta.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "rencontres-erotiques.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "retrovideospiele.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -48420,7 +48404,6 @@
     { "name": "windsorspi.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "withextraveg.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "wohlpa.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
-    { "name": "woltlab-demo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "woofsbakery.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "woomai.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "worldmeteo.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -51903,7 +51886,6 @@
     { "name": "wereoutthere.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "white-ibiza.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "williamscomposer.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
-    { "name": "williamsflintlocks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "willowbrook.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "woaiuhd.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "worldrecipes.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -52333,7 +52315,6 @@
     { "name": "idesoft.cloud", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "idesoftinnovacion.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "idesoftinnovacion.es", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
-    { "name": "ihcr.top", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "ijsclubwanneperveen.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "ikumi.us", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "imperiodigital.online", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -52526,7 +52507,6 @@
     { "name": "noomist.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "noroshi-burger.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "northdakotahealthnetwork.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
-    { "name": "nosproduitsdequalite.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "nowall.online", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "npregion.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "nshipster.co.kr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -55676,7 +55656,6 @@
     { "name": "locksmithhumbletx.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "longboat.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "loquo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
-    { "name": "loveai.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "lovemiku.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "lsy.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "lugimax.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -56205,7 +56184,6 @@
     { "name": "sunred.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "superidropulitrice.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "surfnetparents.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
-    { "name": "svak-gutachter.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "swe77.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "swe777.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "sweet-spatula.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -57406,7 +57384,6 @@
     { "name": "shrimpcam.pw", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "sim-usa.mobi", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "sincemydivorce.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
-    { "name": "sitiweb.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "six-o-one.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "skolnieks.lv", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "skulblaka.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -58467,7 +58444,6 @@
     { "name": "newhoperailroad.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "nexter.cloud", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "nguyencucthanh.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
-    { "name": "nice.im", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "nicolaiteglskov.dk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "nikpool.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "ningbo.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -60862,7 +60838,6 @@
     { "name": "how-old.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "hsturan.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "hulaginswoodworking.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
-    { "name": "i2verify.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "ibericarempresas.es", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "ibericarformula.es", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "ibericargestoso.es", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -62197,7 +62172,6 @@
     { "name": "267661.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "351113.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "382225.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
-    { "name": "54.sb", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "592227.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "599980.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "716227.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -63018,7 +62992,6 @@
     { "name": "673990.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "675660.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "675990.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
-    { "name": "679660.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "692660.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "692990.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "695660.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -63056,8 +63029,6 @@
     { "name": "ae86sb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "aero.parts", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "ag88.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
-    { "name": "agilicus.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
-    { "name": "agilicus.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "ai00.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "aisin.ae", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "akoofs.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -65902,7 +65873,6 @@
     { "name": "t9728.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "tcj.ir", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "tclb.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
-    { "name": "techvhow.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "tecnaa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "telestepina.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "terme.viterbo.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -69168,7 +69138,6 @@
     { "name": "redpatronus.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "rodrigoacevedo.com.uy", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "roh.one", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
-    { "name": "roi.ovh", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "rotring.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "rphyncice.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "russia.wtf", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -70737,7 +70706,6 @@
     { "name": "thecontentcloud.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "thecraftingstrider.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "thekiddz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
-    { "name": "theswimdoctors.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "thutucxuatnhapkhau.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "tipsdebellezaysalud.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "tobimi.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -74785,7 +74753,6 @@
     { "name": "shevet-achim.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "shgw186.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "shielddagger.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
-    { "name": "shiftpsych.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "shilpaonline.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "shitnikovo.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "shkololo.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -76590,7 +76557,6 @@
     { "name": "tian888.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "toronto-escorts.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "toyopac.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
-    { "name": "tranceattic.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "travelerofcharleston.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "tripasia.id", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "tube8.es", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -76936,7 +76902,6 @@
     { "name": "swindontennisclub.azurewebsites.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "syncplay.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "szww99.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
-    { "name": "tasadar.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "taubin.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "tehden.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "teriyakiweasel.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -79169,7 +79134,6 @@
     { "name": "computingsociety.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "comschool.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "contentmarathon.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
-    { "name": "coteibem.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "couponbre.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "cozumel-activities.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "crafted.cat", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -82832,7 +82796,6 @@
     { "name": "taskhorizon.audio", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "tebebo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "tech4arab.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
-    { "name": "tekingb.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "tektouch.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "theangelfishfoundation.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "theclonker.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -82907,7 +82870,6 @@
     { "name": "yourname.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "yuan.nctu.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "yuxiangyuan.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
-    { "name": "zfj.la", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "zhongxigo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "zihun.club", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "zngay.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -84837,7 +84799,6 @@
     { "name": "flugrecht.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "fourwaysplumber24-7.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "freeinfos.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
-    { "name": "fundamentalsofaccounting.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "funidelia-tr.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "funidelia.at", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "funidelia.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -85893,7 +85854,6 @@
     { "name": "age-encryption.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "agencesaintpierre.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "agproducts.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
-    { "name": "agremo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "albergolafiorita.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "alfadlmedical.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "allentertainment.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -86544,7 +86504,6 @@
     { "name": "pmg-p4p.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "poemerx.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "poemerx.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
-    { "name": "pollybarks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "pompeii.tickets", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "popup-stores.online", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "pornabee.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -87303,7 +87262,6 @@
     { "name": "agagent.vip", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "agahi90.ir", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "agds.pw", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
-    { "name": "agonworks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "algustionesa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "aliancapelobrasil.rio.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "alimentsduquebecaumenu.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -87525,7 +87483,6 @@
     { "name": "petitu.mx", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "phongthuyhoangmanh.vn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "pier1url.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
-    { "name": "pk8.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "pk9.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "planettimer.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "plantsupplement.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -87787,7 +87744,6 @@
     { "name": "byhenryvera.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "cachchoi138bet.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "cake-n-go.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
-    { "name": "cakedesignsbyjaclyn.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "californiamusicacademy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "camclips.pro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "cantinhodosossegosaojose.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -88453,7 +88409,6 @@
     { "name": "crestasantos.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "crowdstack.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "cubeo.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
-    { "name": "cyclowiz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "d64.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "dannyrohde.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "datenschutz-gruenwald.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -89094,7 +89049,6 @@
     { "name": "disinfestazione.napoli.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "diskussionsbereich.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "dlmit.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
-    { "name": "dochub.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "dolarenmexico.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "dolcett.pw", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "dolphinaris.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -89779,7 +89733,6 @@
     { "name": "simonheung.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "simplechoicesuper.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "sindastra.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
-    { "name": "sinnvoll-online.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "sinvideovault.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "siri.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "sitethe.best", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -90371,7 +90324,6 @@
     { "name": "fitandfightrijswijk.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "flamencoexplained.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "flatart.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
-    { "name": "floorrestore.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "flowscale.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "force-unleashed.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "force-unleashed.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -104866,7 +104818,6 @@
     { "name": "clevyrlabs.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "click4click.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "clinicasesteticas.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
-    { "name": "cloudmyhome.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "cloudmyhome.top", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "cloudmyhome.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "codetrack.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -105502,7 +105453,6 @@
     { "name": "happywheels1.online", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "hdmovies.blog", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "healthynutritionguide.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
-    { "name": "heeftmijnwebsitehttpsnodig.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "hermiyanto.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "herychreality.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "horos.es", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -106290,7 +106240,6 @@
     { "name": "sipln.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "smaden.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "smikom.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
-    { "name": "snitch.rocks", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "sntial.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "socktopus.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "sophiegraceshields.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -107218,7 +107167,6 @@
     { "name": "hottestguyoftech.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "howtocurekennelcough.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "htsm.top", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
-    { "name": "hunhee.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "hushbabysleep.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "hypertensionexplained.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "hypno-thera.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -108155,7 +108103,6 @@
     { "name": "w30019.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "wagn3r.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "wainbholle.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
-    { "name": "ward.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "wargov.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "wildbergh.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "wilmingtonzen.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -108329,7 +108276,6 @@
     { "name": "drjungspine.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "dunangel.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "e5xbps.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
-    { "name": "ebcfx.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "ebuyon.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "ecohousejapan.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "ecologiahoy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -109015,7 +108961,6 @@
     { "name": "lojaonlineshop.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "loopcore.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "lost-in-place.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
-    { "name": "maianhtravel.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "maiotik.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "maison-coutin.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "maksimyugai.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -109148,7 +109093,6 @@
     { "name": "soulplay.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "spfl.org.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "sprayontv.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
-    { "name": "ssshh.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "starseersprophecy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "statefundca.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "statefunddirect.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -109249,7 +109193,6 @@
     { "name": "xpsauto.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "xpsautomation.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "xvaldezendocrino.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
-    { "name": "xyz.blue", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "yamanami.tokyo", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "yourcrypto.tax", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "zamtech.co.jp", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -109892,7 +109835,6 @@
     { "name": "ferad.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "fernandezvilar.es", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "fibune.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
-    { "name": "findcheap.us", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "fleeb.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "flowlytics.host", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "fn-0.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -110241,7 +110183,6 @@
     { "name": "zotan.email", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "zotan.network", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "zotan.pw", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
-    { "name": "17avolemsaberlaveritat.cat", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "2vp-an.online", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "360kuvia.fi", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "360prokuvat.fi", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -110313,7 +110254,6 @@
     { "name": "cardschat.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "carevo.id", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "carsonkoziol.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
-    { "name": "caumont-normandie.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "cbcf.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "cbd-oil.ro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "ccaguavivadonaciones.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -110859,7 +110799,6 @@
     { "name": "bent-nails.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "besate.ec", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "bgm.bg", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
-    { "name": "bieville-beuville.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "bigcountry.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "biocbdolej.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "biocbdolja.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -110869,7 +110808,6 @@
     { "name": "blockexplorer.online", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "blockfi.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "boostplm.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
-    { "name": "bouville.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "brownwrapper.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "buggiano.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "bunbun.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -111226,8 +111164,6 @@
     { "name": "rioinbox.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "riverdale.net.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "rurian-gyohen.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
-    { "name": "saint-aubin-sur-scie.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
-    { "name": "saint-leonard.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "sakiborislam.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "samanexports.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "sechssiwwe.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -111304,7 +111240,6 @@
     { "name": "vedshastradata.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "velocitycu.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "venturebum.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
-    { "name": "veules-les-roses.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "vfxstudy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "viera.pe", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "viewpointsfromfacebook.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -112694,7 +112629,6 @@
     { "name": "franchiseguide.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "francuskie.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "freenetflow.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
-    { "name": "freethehustle.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "ftx.tech", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "funreaktor.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "fureais.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -112732,7 +112666,6 @@
     { "name": "hardhatengineer.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "harrisexteriors.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "helco.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
-    { "name": "helpwaarbenik.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "hkl-gruppe.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "hoistsdirect.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "holyfamilychurch.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -112969,7 +112902,6 @@
     { "name": "satyamshivamsundaram.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "saul-eslake.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "savewithtrove.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
-    { "name": "sayurstock.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "scoresensei.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "sdelatmrt.spb.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "secrets-marketing.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -113040,7 +112972,6 @@
     { "name": "thediabetesnews.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "thegoodheartedwoman.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "theracismforum.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
-    { "name": "thinkscar.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "threatdetection.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "tinkmai.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "tobyx.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -113264,7 +113195,6 @@
     { "name": "duval.ovh", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "duval.pm", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "duval.re", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
-    { "name": "dvn.pt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "ecampusontario.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "ecgclic.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "ekoclin.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -113649,7 +113579,6 @@
     { "name": "topupandearn.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "totnhatvina.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "tpnky.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
-    { "name": "trimtone.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "tripguide.is", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "tusupermercado.pe", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "tuzor.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -113798,7 +113727,6 @@
     { "name": "case3d.ro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "catchall.tw", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "celebphotos.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
-    { "name": "celebrities.pictures", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "cendis.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "cerbottana.duckdns.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "cgmagonline.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -114591,7 +114519,6 @@
     { "name": "meaqua.love", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "medidordecampo.online", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "metalmonocle.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
-    { "name": "michaelglaser.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "milr.dk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "minermonitoring.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "misclick.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -116228,7 +116155,6 @@
     { "name": "fun-life.com.tw", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "furlan.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "fusionstudios.tk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
-    { "name": "futiwolf.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "futureofsex.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "fztsoru.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "gadgetadvisor.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -117222,7 +117148,6 @@
     { "name": "laptopcloseout.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "laricameche.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "lcwebsite.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
-    { "name": "leesa.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "lefroyee.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "leontworzy.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "lepalierjuridique.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -117724,7 +117649,6 @@
     { "name": "npath.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "nrf.co.ke", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "nutrindoideias.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
-    { "name": "nutsforfruits.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "oase-fuer-wohlbefinden.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "obalky-obaly.sk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "ocsamochodu.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -118158,7 +118082,6 @@
     { "name": "mayflowerfairytales.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "mcsdatum.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "mdcallianceparty.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
-    { "name": "mdnailspa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "medicardlimited.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "meetanshi.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "megalogi.ma", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -118169,7 +118092,6 @@
     { "name": "microl.ink", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "midnightcity.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "miku.bar", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
-    { "name": "milon-apps.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "mindthe5.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "mindthe5.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "minka.net.bo", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -118308,7 +118230,6 @@
     { "name": "thecigarlibrary.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "theeuropeanlibrary.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "thehomeofthefuture.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
-    { "name": "thehorsesadvocate.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "themevilles.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "thevirtuousdog.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "thewebguru.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -118364,7 +118285,6 @@
     { "name": "wadebet.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "wake.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "wartabangsa.id", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
-    { "name": "waukeshairon.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "wealthyspeakerschool.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "wearesuma.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "wemakeit.live", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -118594,7 +118514,6 @@
     { "name": "kazy111.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "keepitsimplebitcoin.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "kekarimi.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
-    { "name": "kieyne.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "kingcourriel.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "kinvault.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "klimaatkids.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -118903,7 +118822,6 @@
     { "name": "cotejardin.gent", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "councilwise.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "cpaporttraining.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
-    { "name": "craveativemedia.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "creatapeak.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "crowdstrike.tech", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "crypt-app.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -119127,7 +119045,6 @@
     { "name": "onporn.tube", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "onthewaypodcast.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "operd.gob.do", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
-    { "name": "opinandosannicolas.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "ostendus.club", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "oudedokken.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "ours-tudio.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -119267,7 +119184,6 @@
     { "name": "unikainfocom.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "uyuniscooterluggage.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "vaneyckexpo.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
-    { "name": "varoscak.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "verhaltenstherapie-weiden.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "verius.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "viasyscorp.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
@@ -119305,6 +119221,542 @@
     { "name": "zorox.sex", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "zporno.sex", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     { "name": "zz.gy", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "104.ua", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "14technology.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "2-euromuenzen.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "3987.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "3dagentur.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "4peace.gent", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "aalvarezs.cl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "abandoned.photo", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "aboticaprodutosnaturais.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "abplive.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "absb.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "access-odata.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "adomicilio.gt", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "adscambodia.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "ae86.tv", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "aeolservice.es", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "afas-apps.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "aisteru.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "akhepcat.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "akiekintveld.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "akinokae.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "alanonsantabarbara.info", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "alaskacruises.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "alles-kan.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "alleskan.gent", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "allesuitdekast.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "allureonparkway.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "alternative-reussite.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "anasaci.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "anja-vastgoed.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "anneeden.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "ansellchallenge.azurewebsites.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "apartamentscalpatoi.cat", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "apex-parts.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "apfnxg.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "appdrafter.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "appfolio.tech", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "aqiqahpremium.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "arabi-online.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "argentinaxp.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "asecus.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "astrophena.name", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "attain.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "auify.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "australianairbrushedtattoos.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "balibells.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "bancoserfinanza.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "banglatypography.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "baysideaba.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "bazar.bg", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "belmundo.gent", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "belmundo.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "benee-awraham.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "berela.com.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "beroepenhuis.gent", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "bestliege.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "bestofdrama.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "bigeasyfences.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "biokemonline.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "blauequelle.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "bluetroodon.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "bootlesshacker.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "borman.biz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "brandweergent.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "bsf-knowledgecity.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "btraviswrightmps.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "businessdrive.biz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "butcherpaxtattoo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "calvadia.duckdns.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "catme.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "cbca.gov", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "ccdiscussion.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "ccdlab.ooo", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "ccpaas.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "chadoisaac.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "chamber.sa", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "cheyennelohnen.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "christopherpfister.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "chromebookcompare.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "clevyr.ai", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "cloudandco.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "cmfcuro.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "cocula.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "code9000.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "cogknockers.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "commonapp.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "company-info-plugins.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "compareicomprei.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "contentyouproductions.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "cottica-kwaka.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "covid19.gov.ph", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "creditkarma.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "crescentcityironworks.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "crowdfavorite.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "cruisecheap.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "cruiseguy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "csarchispace.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "csimarket.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "csitarz.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "css-krebs.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "cultuurinonderwijs.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "cursive.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "customhash.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "cxda.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "cyberinc.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "cybernest.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "cybertik.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "cycling74.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "dachshundtalk.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "dashboard.gov.ph", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "dashboardph.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "dashboardphilippines.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "data-access-point.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "data-loader.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "data-replicator.cloud", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "data-replicator.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "database-excel-integration.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "database-word-integration.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "databasedrivers.cloud", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "datnenhamiltongarden.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "ddjia.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "dealstream.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "decathlon.com.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "defenceenterprise.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "defietsambassade.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "defietsambassadegent.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "delawarehousebuyers.online", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "devinslick.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "dewingerdfreinet.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "dfwm.vote", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "dfwmv.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "dfwmv.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "dfwmv.us", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "difc.ae", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "dld.to", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "dmwaste.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "docsend.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "dokidokimodding.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "domowejroboty.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "dontfuckwithmy.vote", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "dontfuckwithmyvote.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "dontfuckwithmyvote.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "dontfuckwithmyvote.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "dontfuckwithmyvote.us", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "dontfwithmy.vote", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "dontfwithmyvote.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "dontfwithmyvote.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "dontfwithmyvote.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "dontfwithmyvote.us", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "draakjefosfor.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "dragonfosfor.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "drivesly.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "e-servicerms.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "ecovetawindoors.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "eduroam.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "eemoor.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "eko-vitalis.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "eljay.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "elontime.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "emaratalyoum.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "endzeit-architekten.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "energozrouti.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "enotecabortone.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "eredmenye.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "es-sicherheit.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "espirituracer.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "esportslac.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "essentielsduweb.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "euro.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "ewatchers.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "eworkflow.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "extremecleaning.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "ezshopper.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "faapart107certifiedpilot.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "fabiobarros.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "faboolus.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "feedclean.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "fietsambassadegent.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "finance-equation.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "findenmed.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "findmespot.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "finvantive.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "fixfix.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "flagma.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "flagma.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "flagma.ua", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "flashlearners.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "foodsavers.gent", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "foodsaversgent.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "forsigo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "fortnite.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "forzamotorsport.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "fraservalleyhotdog.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "free-sql-query-tool.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "freshdesk-apps-by-invantive.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "fuiveningent.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "fumo.reisen", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "gabrielg.es", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "gameship.ga", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "geestelijkgezondgent.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "genealog.ong.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "gentblogt.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "gentbrugsemeersen.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "gentcongres.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "gentcongres.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "gentcongres.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "gentevenement.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "gentsefeesten.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "gentsefeesten.gent", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "gentslimopweg.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "gentverwent.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "get-my-report.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "ghentfilmoffice.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "ghentlivinglab.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "gidive.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "gitlab-apps.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "globalstar.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "glorycamrealty.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "go-site.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "goldenowl.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "gorodrabot.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "goskills.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "graceikahu.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "gravensteengent.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "greatergood.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "gruppa.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "gsiw.gent", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "guidesetc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "h6p.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "h8p.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "hairmitage.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "hastavem.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "havohravo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "hawat.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "help-me.today", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "hens.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "hhxiaozhan.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "himg.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "hirtz.pm", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "hof-rijnland.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "holdport.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "homecinema-fr.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "hulpverleningszonecentrum.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "hunterpetstore.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "icesemulator.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "icruise.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "ideditorial.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "iis.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "imamenu.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "immortalcorporation.tech", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "immortol.tech", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "indianarmy.me", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "infintechdesigns.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "inglesfoco.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "invantive-apps-for-dynamics-crm.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "invantive-apps-for-magento.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "invantive-apps-for-nmbrs.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "invantive-apps-for-salesforce.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "invantive-apps-for-stackoverflow.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "invantive-apps-voor-exact-online.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "invantive-apps-voor-loket.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "invantive-apps-voor-xml-auditfiles.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "invantive.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "invantive.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "invantive.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "invantive.es", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "invantive.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "invantive.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "invantive.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "ironraven.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "iu.edu.sa", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "jandesign.at", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "javedhasrat.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "jeremy.codes", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "jongenwijs.gent", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "joshu.am", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "justin3d.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "justyardsign.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "kaibinyang.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "katewrightmba.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "khimno.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "khotool.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "kinderopvang.gent", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "kingfast.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "kingfin.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "klapty.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "knabden.co.za", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "ku.ag", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "kylinseating.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "labambi.pl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "laginghanda.gov.ph", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "lamei-group.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "leadgem.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "lekota.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "lenczewski.ddns.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "lennar.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "lepkov.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "lez2020.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "lez2020.gent", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "lichtfestivalghent.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "lindbladcruises.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "liuqiao.pp.ua", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "livinglab.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "lligwy.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "loackerbusiness.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "lucasferraz.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "lumpov.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "lyricfind.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "macioszektv.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "madisonivy.space", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "maeterlinck100.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "maisonanimale.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "maizuru-ongaku-kan.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "makasetesan.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "makhmudov.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "mariowiki.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "maximemalfoy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "mealsnmemories.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "meayne.ddns.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "meiersmarkus.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "meldjeaan.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "memorablewords.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "mendix-apps.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "mgriff.id.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "miatgent.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "midasauctions.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "millikart.az", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "mirdon.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "mobiliteitgent.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "mobiliteitsbedrijfstadgent.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "mobitracker.co", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "modul8r.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "montserrat.ind.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "movedigital.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "munkavedelemaruhaz.hu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "my-calend.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "mycoordinates.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "mylearners.vic.gov.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "myrealestateautomation.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "mzrme.top", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "nagara.fr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "naranonsantabarbara.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "nassconorfolk.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "neemo.nz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "nelefon.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "nerwa.vic.gov.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "newmeproducts.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "nhakhoabella.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "nhsinform.scot", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "nmegent.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "nnov.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "nolaautomotiverepairs.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "nomio.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "npgcdn.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "nvsp.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "nyawork.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "nyfurnitureoutlets.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "octopus-apps.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "of2106.dnsalias.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "oldcraft-mc.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "oliverjoss.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "onderwijscentrum.gent", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "onderwijscentrumgent.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "online-sql-editor.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "onrealt.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "openarchivaris.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "orionadvisor.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "oshens.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "ov-chipkaart.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "palletsprojects.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "pampers.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "passgamer.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "pastelpixels.studio", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "paypodo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "pbo.vic.gov.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "perceptionsaestheticspa.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "pggalleria.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "pisearch.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "pleiar.no", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "pleier.no", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "pocketdeer.cc", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "politiegent.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "popimed.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "povar.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "preserverollinspass.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "priestessbali.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "privatedns.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "prm-parken.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "projectguru.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "promodoble.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "pt4.tech", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "puzzleetc.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "qfes.qld.gov.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "quickjobsfinder.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "rajivdeepinsights.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "rasmushaslund.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "rawbeautysource.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "rbs.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "redcarpetmonday.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "regentcruises.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "regional-rabatt.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "remwhile.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "resellrefreshrepeat.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "resmigazete.gov.tr", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "restic.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "richandsteph.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "richandsteph.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "ripplemarkeg.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "rollinspass.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "roostminneapolis.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "rsc.wiki", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "rspevents.ro", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "ruimtevoor.gent", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "sacredsecondhandbooks.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "salebaba.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "saralmai.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "scrap-car-removal.ca", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "sdguitdagingen.gent", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "sdipolanight.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "searchlight.community", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "seashkey.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "securesuite.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "seoified.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "seu.edu.sa", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "sevenwizes.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "sglazov.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "shareiva.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "sharren.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "shortbread.systems", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "simplonevents.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "sintbaafsabdij.gent", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "sintbaafsabdijgent.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "sjout.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "skyterraembrace.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "slimblogger.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "smartcar.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "soldamontanhabeachwear.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "sonimei.cn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "sorbire.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "soulconstructors.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "sounm.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "spcollege.edu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "speaklikeapro.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "speeli.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "sql-query-tool.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "sslsecureproxy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "stadgent.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "stadspaleizengent.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "stamgent.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "steeble.com.au", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "stem16plus.gent", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "stolarstvi-jiriholy.cz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "studentenmobiliteit.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "studiofpvet.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "stylearray.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "successminds.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "sven.ai", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "swha.xyz", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "symlink.io", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "system.md", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "tagarelaskidseteens.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "teachoo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "teamleader-apps-by-invantive.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "tecart.de", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "techcult.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "techguidereview.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "technavio.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "teeshirtspace.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "teml.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "tercosdemaria.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "theitaliantimes.it", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "thekitchenfarnborough.co.uk", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "thewrightflyer.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "thiasil.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "timespreader.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "timotheeduran.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "tinyhousesforsale-us.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "tiwilandcouncil.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "tolbertmgmt.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "toulis.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "translit.ru", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "trendyindi.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "trevacez.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "tridena.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "triplesixdesigns.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "tripoutside.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "trungtamvipkids.vn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "turkmenistanairlines.tm", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "tutiendadebdsm.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "tutormedia.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "twinfield-apps.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "two-step-verification.solutions", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "ubcutah.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "udid.fyi", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "ujustsee.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "unikrnb2b.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "unleashfido.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "valuta-tools.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "varna-airport.bg", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "velosity.site", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "visitgent.eu", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "visma-apps.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "visualstories.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "vivablogger.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "vredesregister.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "vredesregister.gent", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "water.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "wayficdesign.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "webiroha.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "webkitchen.kiev.ua", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "wehealasone.gov.ph", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "weladee.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "wideweb.host", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "willocks.nl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "wishpets.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "wmcpaphysicians.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "wmphonline.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "wmphvacations.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "woutiscoding.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "wsjf.org", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "wuxian.ml", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "xbox-mag.net", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "xlaw.com.br", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "xn------8cdbtj4bleaohnv2bl3cuy.xn--p1ai", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "xn--contrasea-s6a.cl", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "xn--d1acfdr6h.com.ua", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "yarnandy.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "yetivisite.ch", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "yishizuo.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "yolks.in", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "yolosh.se", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "yournextagency.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "youthingovernment.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "zorgenvoorjean.be", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "zuffel.com", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
+    { "name": "zulihome.vn", "policy": "bulk-1-year", "mode": "force-https", "include_subdomains": true },
     // END OF 1-YEAR BULK HSTS ENTRIES
 
     // Only eTLD+1 domains can be submitted automatically to hstspreload.org,
diff --git a/net/quic/crypto/proof_verifier_chromium.cc b/net/quic/crypto/proof_verifier_chromium.cc
index 89c016c..7e84edf 100644
--- a/net/quic/crypto/proof_verifier_chromium.cc
+++ b/net/quic/crypto/proof_verifier_chromium.cc
@@ -43,7 +43,6 @@
 quic::ProofVerifyDetails* ProofVerifyDetailsChromium::Clone() const {
   ProofVerifyDetailsChromium* other = new ProofVerifyDetailsChromium;
   other->cert_verify_result = cert_verify_result;
-  other->ct_verify_result = ct_verify_result;
   return other;
 }
 
@@ -412,18 +411,20 @@
     // external communication.
     cert_transparency_verifier_->Verify(
         hostname_, cert_.get(), std::string(), cert_sct_,
-        &verify_details_->ct_verify_result.scts, net_log_);
+        &verify_details_->cert_verify_result.scts, net_log_);
 
-    ct::SCTList verified_scts = ct::SCTsMatchingStatus(
-        verify_details_->ct_verify_result.scts, ct::SCT_STATUS_OK);
-
-    verify_details_->ct_verify_result.policy_compliance =
+    ct::SCTList verified_scts;
+    for (const auto& sct_and_status : cert_verify_result.scts) {
+      if (sct_and_status.status == ct::SCT_STATUS_OK)
+        verified_scts.push_back(sct_and_status.sct);
+    }
+    verify_details_->cert_verify_result.policy_compliance =
         policy_enforcer_->CheckCompliance(
             cert_verify_result.verified_cert.get(), verified_scts, net_log_);
     if (verify_details_->cert_verify_result.cert_status & CERT_STATUS_IS_EV) {
-      if (verify_details_->ct_verify_result.policy_compliance !=
+      if (verify_details_->cert_verify_result.policy_compliance !=
               ct::CTPolicyCompliance::CT_POLICY_COMPLIES_VIA_SCTS &&
-          verify_details_->ct_verify_result.policy_compliance !=
+          verify_details_->cert_verify_result.policy_compliance !=
               ct::CTPolicyCompliance::CT_POLICY_BUILD_NOT_TIMELY) {
         verify_details_->cert_verify_result.cert_status |=
             CERT_STATUS_CT_COMPLIANCE_FAILED;
@@ -436,7 +437,7 @@
       if (verify_details_->cert_verify_result.is_issued_by_known_root) {
         UMA_HISTOGRAM_ENUMERATION(
             "Net.CertificateTransparency.EVCompliance2.QUIC",
-            verify_details_->ct_verify_result.policy_compliance,
+            cert_verify_result.policy_compliance,
             ct::CTPolicyCompliance::CT_POLICY_COUNT);
       }
     }
@@ -446,7 +447,7 @@
     if (verify_details_->cert_verify_result.is_issued_by_known_root) {
       UMA_HISTOGRAM_ENUMERATION(
           "Net.CertificateTransparency.ConnectionComplianceStatus2.QUIC",
-          verify_details_->ct_verify_result.policy_compliance,
+          verify_details_->cert_verify_result.policy_compliance,
           ct::CTPolicyCompliance::CT_POLICY_COUNT);
     }
 
@@ -457,12 +458,11 @@
             cert_verify_result.is_issued_by_known_root,
             cert_verify_result.public_key_hashes,
             cert_verify_result.verified_cert.get(), cert_.get(),
-            verify_details_->ct_verify_result.scts,
+            cert_verify_result.scts,
             TransportSecurityState::ENABLE_EXPECT_CT_REPORTS,
-            verify_details_->ct_verify_result.policy_compliance,
+            cert_verify_result.policy_compliance,
             proof_verifier_->network_isolation_key_);
     if (ct_requirement_status != TransportSecurityState::CT_NOT_REQUIRED) {
-      verify_details_->ct_verify_result.policy_compliance_required = true;
       if (verify_details_->cert_verify_result.is_issued_by_known_root) {
         // Record the CT compliance of connections for which compliance is
         // required; this helps answer the question: "Of all connections that
@@ -471,19 +471,16 @@
         UMA_HISTOGRAM_ENUMERATION(
             "Net.CertificateTransparency.CTRequiredConnectionComplianceStatus2."
             "QUIC",
-            verify_details_->ct_verify_result.policy_compliance,
+            cert_verify_result.policy_compliance,
             ct::CTPolicyCompliance::CT_POLICY_COUNT);
       }
-    } else {
-      verify_details_->ct_verify_result.policy_compliance_required = false;
     }
 
     if (sct_auditing_delegate_ &&
         sct_auditing_delegate_->IsSCTAuditingEnabled()) {
       sct_auditing_delegate_->MaybeEnqueueReport(
           HostPortPair(hostname_, port_),
-          cert_verify_result.verified_cert.get(),
-          verify_details_->ct_verify_result.scts);
+          cert_verify_result.verified_cert.get(), cert_verify_result.scts);
     }
 
     switch (ct_requirement_status) {
diff --git a/net/quic/crypto/proof_verifier_chromium.h b/net/quic/crypto/proof_verifier_chromium.h
index 4884840..8468a9d 100644
--- a/net/quic/crypto/proof_verifier_chromium.h
+++ b/net/quic/crypto/proof_verifier_chromium.h
@@ -15,7 +15,6 @@
 #include "net/base/net_export.h"
 #include "net/base/network_isolation_key.h"
 #include "net/cert/cert_verify_result.h"
-#include "net/cert/ct_verify_result.h"
 #include "net/cert/x509_certificate.h"
 #include "net/log/net_log_with_source.h"
 #include "net/third_party/quiche/src/quic/core/crypto/proof_verifier.h"
@@ -41,7 +40,6 @@
   quic::ProofVerifyDetails* Clone() const override;
 
   CertVerifyResult cert_verify_result;
-  ct::CTVerifyResult ct_verify_result;
 
   // pinning_failure_log contains a message produced by
   // TransportSecurityState::PKPState::CheckPublicKeyPins in the event of a
diff --git a/net/quic/crypto/proof_verifier_chromium_test.cc b/net/quic/crypto/proof_verifier_chromium_test.cc
index ec52f9d..7e8166b8 100644
--- a/net/quic/crypto/proof_verifier_chromium_test.cc
+++ b/net/quic/crypto/proof_verifier_chromium_test.cc
@@ -190,17 +190,17 @@
   void CheckSCT(bool sct_expected_ok) {
     ProofVerifyDetailsChromium* proof_details =
         reinterpret_cast<ProofVerifyDetailsChromium*>(details_.get());
-    const ct::CTVerifyResult& ct_verify_result =
-        proof_details->ct_verify_result;
+    const CertVerifyResult& cert_verify_result =
+        proof_details->cert_verify_result;
     if (sct_expected_ok) {
-      ASSERT_TRUE(ct::CheckForSingleVerifiedSCTInResult(ct_verify_result.scts,
+      EXPECT_TRUE(ct::CheckForSingleVerifiedSCTInResult(cert_verify_result.scts,
                                                         kLogDescription));
-      ASSERT_TRUE(ct::CheckForSCTOrigin(
-          ct_verify_result.scts,
+      EXPECT_TRUE(ct::CheckForSCTOrigin(
+          cert_verify_result.scts,
           ct::SignedCertificateTimestamp::SCT_FROM_TLS_EXTENSION));
     } else {
-      ASSERT_EQ(1U, ct_verify_result.scts.size());
-      EXPECT_EQ(ct::SCT_STATUS_LOG_UNKNOWN, ct_verify_result.scts[0].status);
+      ASSERT_EQ(1U, cert_verify_result.scts.size());
+      EXPECT_EQ(ct::SCT_STATUS_LOG_UNKNOWN, cert_verify_result.scts[0].status);
     }
   }
 
@@ -1066,112 +1066,6 @@
   }
 }
 
-// Tests that when CT is required but the connection is not compliant, the
-// relevant flag is set in the CTVerifyResult.
-TEST_F(ProofVerifierChromiumTest, CTRequirementsFlagNotMet) {
-  dummy_result_.is_issued_by_known_root = true;
-  MockCertVerifier dummy_verifier;
-  dummy_verifier.AddResultForCert(test_cert_.get(), dummy_result_, OK);
-
-  // Set up CT.
-  MockRequireCTDelegate require_ct_delegate;
-  transport_security_state_.SetRequireCTDelegate(&require_ct_delegate);
-  EXPECT_CALL(require_ct_delegate, IsCTRequiredForHost(_, _, _))
-      .WillRepeatedly(Return(TransportSecurityState::RequireCTDelegate::
-                                 CTRequirementLevel::REQUIRED));
-  EXPECT_CALL(ct_policy_enforcer_, CheckCompliance(_, _, _))
-      .WillRepeatedly(
-          Return(ct::CTPolicyCompliance::CT_POLICY_NOT_DIVERSE_SCTS));
-
-  ProofVerifierChromium proof_verifier(
-      &dummy_verifier, &ct_policy_enforcer_, &transport_security_state_,
-      ct_verifier_.get(), nullptr, {}, NetworkIsolationKey());
-
-  {
-    std::unique_ptr<DummyProofVerifierCallback> callback(
-        new DummyProofVerifierCallback);
-    proof_verifier.VerifyProof(
-        kTestHostname, kTestPort, kTestConfig, kTestTransportVersion,
-        kTestChloHash, certs_, kTestEmptySCT, GetTestSignature(),
-        verify_context_.get(), &error_details_, &details_, std::move(callback));
-
-    // The flag should be set in the CTVerifyResult.
-    ProofVerifyDetailsChromium* proof_details =
-        reinterpret_cast<ProofVerifyDetailsChromium*>(details_.get());
-    const ct::CTVerifyResult& ct_verify_result =
-        proof_details->ct_verify_result;
-    EXPECT_TRUE(ct_verify_result.policy_compliance_required);
-  }
-
-  {
-    std::unique_ptr<DummyProofVerifierCallback> callback(
-        new DummyProofVerifierCallback);
-    proof_verifier.VerifyCertChain(
-        kTestHostname, kTestPort, certs_, kTestEmptyOCSPResponse, kTestEmptySCT,
-        verify_context_.get(), &error_details_, &details_, std::move(callback));
-
-    // The flag should be set in the CTVerifyResult.
-    ProofVerifyDetailsChromium* proof_details =
-        reinterpret_cast<ProofVerifyDetailsChromium*>(details_.get());
-    const ct::CTVerifyResult& ct_verify_result =
-        proof_details->ct_verify_result;
-    EXPECT_TRUE(ct_verify_result.policy_compliance_required);
-  }
-}
-
-// Tests that when CT is required and the connection is compliant, the relevant
-// flag is set in the CTVerifyResult.
-TEST_F(ProofVerifierChromiumTest, CTRequirementsFlagMet) {
-  dummy_result_.is_issued_by_known_root = true;
-  MockCertVerifier dummy_verifier;
-  dummy_verifier.AddResultForCert(test_cert_.get(), dummy_result_, OK);
-
-  // Set up CT.
-  MockRequireCTDelegate require_ct_delegate;
-  transport_security_state_.SetRequireCTDelegate(&require_ct_delegate);
-  EXPECT_CALL(require_ct_delegate, IsCTRequiredForHost(_, _, _))
-      .WillRepeatedly(Return(TransportSecurityState::RequireCTDelegate::
-                                 CTRequirementLevel::REQUIRED));
-  EXPECT_CALL(ct_policy_enforcer_, CheckCompliance(_, _, _))
-      .WillRepeatedly(
-          Return(ct::CTPolicyCompliance::CT_POLICY_COMPLIES_VIA_SCTS));
-
-  ProofVerifierChromium proof_verifier(
-      &dummy_verifier, &ct_policy_enforcer_, &transport_security_state_,
-      ct_verifier_.get(), nullptr, {}, NetworkIsolationKey());
-
-  {
-    std::unique_ptr<DummyProofVerifierCallback> callback(
-        new DummyProofVerifierCallback);
-    proof_verifier.VerifyProof(
-        kTestHostname, kTestPort, kTestConfig, kTestTransportVersion,
-        kTestChloHash, certs_, kTestEmptySCT, GetTestSignature(),
-        verify_context_.get(), &error_details_, &details_, std::move(callback));
-
-    // The flag should be set in the CTVerifyResult.
-    ProofVerifyDetailsChromium* proof_details =
-        reinterpret_cast<ProofVerifyDetailsChromium*>(details_.get());
-    const ct::CTVerifyResult& ct_verify_result =
-        proof_details->ct_verify_result;
-    EXPECT_TRUE(ct_verify_result.policy_compliance_required);
-  }
-
-  {
-    std::unique_ptr<DummyProofVerifierCallback> callback(
-        new DummyProofVerifierCallback);
-    proof_verifier.VerifyCertChain(
-        kTestHostname, kTestPort, certs_, kTestEmptyOCSPResponse, kTestEmptySCT,
-        verify_context_.get(), &error_details_, &details_, std::move(callback));
-
-    // The flag should be set in the CTVerifyResult.
-    ProofVerifyDetailsChromium* proof_details =
-        reinterpret_cast<ProofVerifyDetailsChromium*>(details_.get());
-    const ct::CTVerifyResult& ct_verify_result =
-        proof_details->ct_verify_result;
-    EXPECT_TRUE(ct_verify_result.policy_compliance_required);
-  }
-}
-
 TEST_F(ProofVerifierChromiumTest, UnknownRootRejected) {
   dummy_result_.is_issued_by_known_root = false;
 
diff --git a/net/quic/quic_chromium_client_session.cc b/net/quic/quic_chromium_client_session.cc
index 6e08826..cf052b6 100644
--- a/net/quic/quic_chromium_client_session.cc
+++ b/net/quic/quic_chromium_client_session.cc
@@ -29,6 +29,7 @@
 #include "net/base/network_isolation_key.h"
 #include "net/base/privacy_mode.h"
 #include "net/base/url_util.h"
+#include "net/cert/signed_certificate_timestamp_and_status.h"
 #include "net/http/transport_security_state.h"
 #include "net/log/net_log_event_type.h"
 #include "net/log/net_log_source_type.h"
@@ -1299,7 +1300,8 @@
   ssl_info->pinning_failure_log = pinning_failure_log_;
   ssl_info->is_fatal_cert_error = is_fatal_cert_error_;
 
-  ssl_info->UpdateCertificateTransparencyInfo(*ct_verify_result_);
+  ssl_info->signed_certificate_timestamps = cert_verify_result_->scts;
+  ssl_info->ct_policy_compliance = cert_verify_result_->policy_compliance;
 
   const auto& crypto_params = crypto_stream_->crypto_negotiated_params();
   uint16_t cipher_suite;
@@ -2523,9 +2525,6 @@
   cert_verify_result_.reset(
       new CertVerifyResult(verify_details_chromium->cert_verify_result));
   pinning_failure_log_ = verify_details_chromium->pinning_failure_log;
-  std::unique_ptr<ct::CTVerifyResult> ct_verify_result_copy(
-      new ct::CTVerifyResult(verify_details_chromium->ct_verify_result));
-  ct_verify_result_ = std::move(ct_verify_result_copy);
   logger_->OnCertificateVerified(*cert_verify_result_);
   pkp_bypassed_ = verify_details_chromium->pkp_bypassed;
   is_fatal_cert_error_ = verify_details_chromium->is_fatal_cert_error;
diff --git a/net/quic/quic_chromium_client_session.h b/net/quic/quic_chromium_client_session.h
index c4d7513..7883a77f 100644
--- a/net/quic/quic_chromium_client_session.h
+++ b/net/quic/quic_chromium_client_session.h
@@ -28,7 +28,6 @@
 #include "net/base/net_error_details.h"
 #include "net/base/net_export.h"
 #include "net/base/proxy_server.h"
-#include "net/cert/ct_verify_result.h"
 #include "net/log/net_log_with_source.h"
 #include "net/quic/quic_chromium_client_stream.h"
 #include "net/quic/quic_chromium_packet_reader.h"
@@ -871,7 +870,6 @@
   SSLConfigService* ssl_config_service_;
   std::unique_ptr<QuicServerInfo> server_info_;
   std::unique_ptr<CertVerifyResult> cert_verify_result_;
-  std::unique_ptr<ct::CTVerifyResult> ct_verify_result_;
   std::string pinning_failure_log_;
   bool pkp_bypassed_;
   bool is_fatal_cert_error_;
diff --git a/net/quic/quic_chromium_client_session_test.cc b/net/quic/quic_chromium_client_session_test.cc
index eaee30b..b0906b09d 100644
--- a/net/quic/quic_chromium_client_session_test.cc
+++ b/net/quic/quic_chromium_client_session_test.cc
@@ -334,9 +334,8 @@
   details.cert_verify_result.verified_cert =
       ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem");
   details.cert_verify_result.is_issued_by_known_root = true;
-  details.ct_verify_result.policy_compliance =
+  details.cert_verify_result.policy_compliance =
       ct::CTPolicyCompliance::CT_POLICY_COMPLIES_VIA_SCTS;
-  details.ct_verify_result.policy_compliance_required = true;
 
   CompleteCryptoHandshake();
   session_->OnProofVerifyDetailsAvailable(details);
@@ -351,10 +350,8 @@
   EXPECT_EQ(details.cert_verify_result.cert_status, ssl_info.cert_status);
   EXPECT_EQ(details.cert_verify_result.is_issued_by_known_root,
             ssl_info.is_issued_by_known_root);
-  EXPECT_EQ(details.ct_verify_result.policy_compliance,
+  EXPECT_EQ(details.cert_verify_result.policy_compliance,
             ssl_info.ct_policy_compliance);
-  EXPECT_EQ(details.ct_verify_result.policy_compliance_required,
-            ssl_info.ct_policy_compliance_required);
 }
 
 // Just like GetSSLInfo1, but uses different values.
@@ -373,9 +370,8 @@
   details.cert_verify_result.verified_cert =
       ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem");
   details.cert_verify_result.is_issued_by_known_root = false;
-  details.ct_verify_result.policy_compliance =
+  details.cert_verify_result.policy_compliance =
       ct::CTPolicyCompliance::CT_POLICY_NOT_ENOUGH_SCTS;
-  details.ct_verify_result.policy_compliance_required = false;
 
   CompleteCryptoHandshake();
   session_->OnProofVerifyDetailsAvailable(details);
@@ -390,10 +386,8 @@
   EXPECT_EQ(details.cert_verify_result.cert_status, ssl_info.cert_status);
   EXPECT_EQ(details.cert_verify_result.is_issued_by_known_root,
             ssl_info.is_issued_by_known_root);
-  EXPECT_EQ(details.ct_verify_result.policy_compliance,
+  EXPECT_EQ(details.cert_verify_result.policy_compliance,
             ssl_info.ct_policy_compliance);
-  EXPECT_EQ(details.ct_verify_result.policy_compliance_required,
-            ssl_info.ct_policy_compliance_required);
 }
 
 TEST_P(QuicChromiumClientSessionTest, IsFatalErrorNotSetForNonFatalError) {
@@ -1690,7 +1684,7 @@
       ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem");
   ASSERT_TRUE(details.cert_verify_result.verified_cert.get());
   details.cert_verify_result.is_issued_by_known_root = true;
-  details.ct_verify_result.policy_compliance =
+  details.cert_verify_result.policy_compliance =
       ct::CTPolicyCompliance::CT_POLICY_NOT_ENOUGH_SCTS;
 
   CompleteCryptoHandshake();
diff --git a/net/socket/ssl_client_socket_impl.cc b/net/socket/ssl_client_socket_impl.cc
index cf4e52b..f8aca964 100644
--- a/net/socket/ssl_client_socket_impl.cc
+++ b/net/socket/ssl_client_socket_impl.cc
@@ -45,6 +45,7 @@
 #include "net/cert/ct_verifier.h"
 #include "net/cert/internal/parse_certificate.h"
 #include "net/cert/sct_auditing_delegate.h"
+#include "net/cert/sct_status_flags.h"
 #include "net/cert/x509_certificate_net_log_param.h"
 #include "net/cert/x509_util.h"
 #include "net/der/parse_values.h"
@@ -604,7 +605,8 @@
   ssl_info->pinning_failure_log = pinning_failure_log_;
   ssl_info->ocsp_result = server_cert_verify_result_.ocsp_result;
   ssl_info->is_fatal_cert_error = is_fatal_cert_error_;
-  AddCTInfoToSSLInfo(ssl_info);
+  ssl_info->signed_certificate_timestamps = server_cert_verify_result_.scts;
+  ssl_info->ct_policy_compliance = server_cert_verify_result_.policy_compliance;
 
   const SSL_CIPHER* cipher = SSL_get_current_cipher(ssl_.get());
   CHECK(cipher);
@@ -1542,19 +1544,21 @@
   // external communication.
   context_->cert_transparency_verifier()->Verify(
       host_and_port().host(), server_cert_verify_result_.verified_cert.get(),
-      ocsp_response, sct_list, &ct_verify_result_.scts, net_log_);
+      ocsp_response, sct_list, &server_cert_verify_result_.scts, net_log_);
 
-  ct::SCTList verified_scts =
-      ct::SCTsMatchingStatus(ct_verify_result_.scts, ct::SCT_STATUS_OK);
-
-  ct_verify_result_.policy_compliance =
+  ct::SCTList verified_scts;
+  for (const auto& sct_and_status : server_cert_verify_result_.scts) {
+    if (sct_and_status.status == ct::SCT_STATUS_OK)
+      verified_scts.push_back(sct_and_status.sct);
+  }
+  server_cert_verify_result_.policy_compliance =
       context_->ct_policy_enforcer()->CheckCompliance(
           server_cert_verify_result_.verified_cert.get(), verified_scts,
           net_log_);
   if (server_cert_verify_result_.cert_status & CERT_STATUS_IS_EV) {
-    if (ct_verify_result_.policy_compliance !=
+    if (server_cert_verify_result_.policy_compliance !=
             ct::CTPolicyCompliance::CT_POLICY_COMPLIES_VIA_SCTS &&
-        ct_verify_result_.policy_compliance !=
+        server_cert_verify_result_.policy_compliance !=
             ct::CTPolicyCompliance::CT_POLICY_BUILD_NOT_TIMELY) {
       server_cert_verify_result_.cert_status |=
           CERT_STATUS_CT_COMPLIANCE_FAILED;
@@ -1566,7 +1570,7 @@
     // compliance.
     if (server_cert_verify_result_.is_issued_by_known_root) {
       UMA_HISTOGRAM_ENUMERATION("Net.CertificateTransparency.EVCompliance2.SSL",
-                                ct_verify_result_.policy_compliance,
+                                server_cert_verify_result_.policy_compliance,
                                 ct::CTPolicyCompliance::CT_POLICY_COUNT);
     }
   }
@@ -1576,7 +1580,7 @@
   if (server_cert_verify_result_.is_issued_by_known_root) {
     UMA_HISTOGRAM_ENUMERATION(
         "Net.CertificateTransparency.ConnectionComplianceStatus2.SSL",
-        ct_verify_result_.policy_compliance,
+        server_cert_verify_result_.policy_compliance,
         ct::CTPolicyCompliance::CT_POLICY_COUNT);
   }
 
@@ -1585,12 +1589,11 @@
           host_and_port_, server_cert_verify_result_.is_issued_by_known_root,
           server_cert_verify_result_.public_key_hashes,
           server_cert_verify_result_.verified_cert.get(), server_cert_.get(),
-          ct_verify_result_.scts,
+          server_cert_verify_result_.scts,
           TransportSecurityState::ENABLE_EXPECT_CT_REPORTS,
-          ct_verify_result_.policy_compliance,
+          server_cert_verify_result_.policy_compliance,
           ssl_config_.network_isolation_key);
   if (ct_requirement_status != TransportSecurityState::CT_NOT_REQUIRED) {
-    ct_verify_result_.policy_compliance_required = true;
     if (server_cert_verify_result_.is_issued_by_known_root) {
       // Record the CT compliance of connections for which compliance is
       // required; this helps answer the question: "Of all connections that are
@@ -1598,18 +1601,16 @@
       UMA_HISTOGRAM_ENUMERATION(
           "Net.CertificateTransparency.CTRequiredConnectionComplianceStatus2."
           "SSL",
-          ct_verify_result_.policy_compliance,
+          server_cert_verify_result_.policy_compliance,
           ct::CTPolicyCompliance::CT_POLICY_COUNT);
     }
-  } else {
-    ct_verify_result_.policy_compliance_required = false;
   }
 
   if (context_->sct_auditing_delegate() &&
       context_->sct_auditing_delegate()->IsSCTAuditingEnabled()) {
     context_->sct_auditing_delegate()->MaybeEnqueueReport(
         host_and_port_, server_cert_verify_result_.verified_cert.get(),
-        ct_verify_result_.scts);
+        server_cert_verify_result_.scts);
   }
 
   switch (ct_requirement_status) {
@@ -1705,10 +1706,6 @@
   return 1;
 }
 
-void SSLClientSocketImpl::AddCTInfoToSSLInfo(SSLInfo* ssl_info) const {
-  ssl_info->UpdateCertificateTransparencyInfo(ct_verify_result_);
-}
-
 SSLClientSessionCache::Key SSLClientSocketImpl::GetSessionCacheKey(
     base::Optional<IPAddress> dest_ip_addr) const {
   SSLClientSessionCache::Key key;
diff --git a/net/socket/ssl_client_socket_impl.h b/net/socket/ssl_client_socket_impl.h
index 7388274..d0113326 100644
--- a/net/socket/ssl_client_socket_impl.h
+++ b/net/socket/ssl_client_socket_impl.h
@@ -22,7 +22,6 @@
 #include "net/base/io_buffer.h"
 #include "net/cert/cert_verifier.h"
 #include "net/cert/cert_verify_result.h"
-#include "net/cert/ct_verify_result.h"
 #include "net/log/net_log_with_source.h"
 #include "net/socket/next_proto.h"
 #include "net/socket/socket_bio_adapter.h"
@@ -158,14 +157,6 @@
   // Called from the SSL layer whenever a new session is established.
   int NewSessionCallback(SSL_SESSION* session);
 
-  // Adds the Certificate Transparency info from ct_verify_result_ to
-  // |ssl_info|.
-  // SCTs are held in three separate vectors in ct_verify_result, each
-  // vetor representing a particular verification state, this method associates
-  // each of the SCTs with the corresponding SCTVerifyStatus as it adds it to
-  // the |ssl_info|.signed_certificate_timestamps list.
-  void AddCTInfoToSSLInfo(SSLInfo* ssl_info) const;
-
   // Returns a session cache key for this socket.
   SSLClientSessionCache::Key GetSessionCacheKey(
       base::Optional<IPAddress> dest_ip_addr) const;
@@ -255,9 +246,6 @@
   // Result from Cert Verifier.
   int cert_verification_result_;
 
-  // Certificate Transparency: Verifier and result holder.
-  ct::CTVerifyResult ct_verify_result_;
-
   // OpenSSL stuff
   bssl::UniquePtr<SSL> ssl_;
 
diff --git a/net/socket/ssl_client_socket_unittest.cc b/net/socket/ssl_client_socket_unittest.cc
index 9063ef48..0a3fe64d 100644
--- a/net/socket/ssl_client_socket_unittest.cc
+++ b/net/socket/ssl_client_socket_unittest.cc
@@ -4319,76 +4319,6 @@
       static_cast<int>(ct::CTPolicyCompliance::CT_POLICY_NOT_ENOUGH_SCTS), 1);
 }
 
-// Test that when CT is required (in this case, by an Expect-CT opt-in) but the
-// connection is not compliant, the relevant flag is set on the SSLInfo.
-TEST_P(SSLClientSocketVersionTest, CTRequirementsFlagNotMet) {
-  ASSERT_TRUE(
-      StartEmbeddedTestServer(EmbeddedTestServer::CERT_OK, GetServerConfig()));
-  scoped_refptr<X509Certificate> server_cert =
-      embedded_test_server()->GetCertificate();
-
-  // Certificate is trusted and chains to a public root.
-  CertVerifyResult verify_result;
-  verify_result.is_issued_by_known_root = true;
-  verify_result.verified_cert = server_cert;
-  verify_result.public_key_hashes =
-      MakeHashValueVector(kGoodHashValueVectorInput);
-  cert_verifier_->AddResultForCert(server_cert.get(), verify_result, OK);
-
-  // Set up the Expect-CT opt-in.
-  const base::Time current_time(base::Time::Now());
-  const base::Time expiry = current_time + base::TimeDelta::FromSeconds(1000);
-  transport_security_state_->AddExpectCT(host_port_pair().host(), expiry,
-                                         true /* enforce */, GURL(),
-                                         NetworkIsolationKey());
-
-  EXPECT_CALL(*ct_policy_enforcer_, CheckCompliance(server_cert.get(), _, _))
-      .WillRepeatedly(
-          Return(ct::CTPolicyCompliance::CT_POLICY_NOT_ENOUGH_SCTS));
-
-  SSLConfig ssl_config;
-  int rv;
-  ASSERT_TRUE(CreateAndConnectSSLClientSocket(ssl_config, &rv));
-  SSLInfo ssl_info;
-  ASSERT_TRUE(sock_->GetSSLInfo(&ssl_info));
-  EXPECT_TRUE(ssl_info.ct_policy_compliance_required);
-}
-
-// Test that when CT is required (in this case, by an Expect-CT opt-in) and the
-// connection is compliant, the relevant flag is set on the SSLInfo.
-TEST_P(SSLClientSocketVersionTest, CTRequirementsFlagMet) {
-  ASSERT_TRUE(
-      StartEmbeddedTestServer(EmbeddedTestServer::CERT_OK, GetServerConfig()));
-  scoped_refptr<X509Certificate> server_cert =
-      embedded_test_server()->GetCertificate();
-
-  // Certificate is trusted and chains to a public root.
-  CertVerifyResult verify_result;
-  verify_result.is_issued_by_known_root = true;
-  verify_result.verified_cert = server_cert;
-  verify_result.public_key_hashes =
-      MakeHashValueVector(kGoodHashValueVectorInput);
-  cert_verifier_->AddResultForCert(server_cert.get(), verify_result, OK);
-
-  // Set up the Expect-CT opt-in.
-  const base::Time current_time(base::Time::Now());
-  const base::Time expiry = current_time + base::TimeDelta::FromSeconds(1000);
-  transport_security_state_->AddExpectCT(host_port_pair().host(), expiry,
-                                         true /* enforce */, GURL(),
-                                         NetworkIsolationKey());
-
-  EXPECT_CALL(*ct_policy_enforcer_, CheckCompliance(server_cert.get(), _, _))
-      .WillRepeatedly(
-          Return(ct::CTPolicyCompliance::CT_POLICY_COMPLIES_VIA_SCTS));
-
-  SSLConfig ssl_config;
-  int rv;
-  ASSERT_TRUE(CreateAndConnectSSLClientSocket(ssl_config, &rv));
-  SSLInfo ssl_info;
-  ASSERT_TRUE(sock_->GetSSLInfo(&ssl_info));
-  EXPECT_TRUE(ssl_info.ct_policy_compliance_required);
-}
-
 // Test that when CT is required (in this case, by a CT delegate), the CT
 // required histogram is not recorded for a locally installed root.
 TEST_P(SSLClientSocketVersionTest, CTRequiredHistogramNonCompliantLocalRoot) {
diff --git a/net/ssl/ssl_info.cc b/net/ssl/ssl_info.cc
index 0ca220a..744b285 100644
--- a/net/ssl/ssl_info.cc
+++ b/net/ssl/ssl_info.cc
@@ -20,14 +20,4 @@
   *this = SSLInfo();
 }
 
-void SSLInfo::UpdateCertificateTransparencyInfo(
-    const ct::CTVerifyResult& ct_verify_result) {
-  signed_certificate_timestamps.insert(signed_certificate_timestamps.end(),
-                                       ct_verify_result.scts.begin(),
-                                       ct_verify_result.scts.end());
-
-  ct_policy_compliance = ct_verify_result.policy_compliance;
-  ct_policy_compliance_required = ct_verify_result.policy_compliance_required;
-}
-
 }  // namespace net
diff --git a/net/ssl/ssl_info.h b/net/ssl/ssl_info.h
index b8fe946..e7e14ec 100644
--- a/net/ssl/ssl_info.h
+++ b/net/ssl/ssl_info.h
@@ -13,7 +13,6 @@
 #include "net/base/net_export.h"
 #include "net/cert/cert_status_flags.h"
 #include "net/cert/ct_policy_status.h"
-#include "net/cert/ct_verify_result.h"
 #include "net/cert/ocsp_verify_result.h"
 #include "net/cert/sct_status_flags.h"
 #include "net/cert/signed_certificate_timestamp_and_status.h"
@@ -45,16 +44,6 @@
 
   bool is_valid() const { return cert.get() != nullptr; }
 
-  // Adds the SignedCertificateTimestamps and policy compliance details
-  // from ct_verify_result to |signed_certificate_timestamps| and
-  // |ct_policy_compliance_details|. SCTs are held in three separate
-  // vectors in ct_verify_result, each vetor representing a particular
-  // verification state, this method associates each of the SCTs with
-  // the corresponding SCTVerifyStatus as it adds it to the
-  // |signed_certificate_timestamps| list.
-  void UpdateCertificateTransparencyInfo(
-      const ct::CTVerifyResult& ct_verify_result);
-
   // The SSL certificate.
   scoped_refptr<X509Certificate> cert;
 
@@ -119,11 +108,6 @@
   ct::CTPolicyCompliance ct_policy_compliance =
       ct::CTPolicyCompliance::CT_POLICY_COMPLIANCE_DETAILS_NOT_AVAILABLE;
 
-  // True if the connection was required to comply with the CT cert policy. Only
-  // meaningful if |ct_policy_compliance| is not
-  // COMPLIANCE_DETAILS_NOT_AVAILABLE.
-  bool ct_policy_compliance_required = false;
-
   // OCSP stapling details.
   OCSPVerifyResult ocsp_result;
 
diff --git a/net/test/ct_test_util.cc b/net/test/ct_test_util.cc
index d01b59ca1..3ca286b 100644
--- a/net/test/ct_test_util.cc
+++ b/net/test/ct_test_util.cc
@@ -15,7 +15,6 @@
 #include "base/strings/stringprintf.h"
 #include "net/base/hex_utils.h"
 #include "net/cert/ct_serialization.h"
-#include "net/cert/ct_verify_result.h"
 #include "net/cert/merkle_tree_leaf.h"
 #include "net/cert/signed_tree_head.h"
 #include "net/cert/x509_certificate.h"
diff --git a/net/tools/dns_fuzz_stub/dns_fuzz_stub.cc b/net/tools/dns_fuzz_stub/dns_fuzz_stub.cc
index 7abb217..63b42fb5 100644
--- a/net/tools/dns_fuzz_stub/dns_fuzz_stub.cc
+++ b/net/tools/dns_fuzz_stub/dns_fuzz_stub.cc
@@ -15,6 +15,7 @@
 #include "base/files/file_util.h"
 #include "base/json/json_reader.h"
 #include "base/logging.h"
+#include "base/optional.h"
 #include "base/time/time.h"
 #include "base/values.h"
 #include "net/base/address_list.h"
@@ -153,7 +154,7 @@
   }
 
   net::AddressList address_list;
-  base::TimeDelta ttl;
+  base::Optional<base::TimeDelta> ttl;
   net::DnsResponse::Result result = response.ParseToAddressList(
       &address_list, &ttl);
   if (result != net::DnsResponse::DNS_PARSE_OK) {
@@ -166,7 +167,8 @@
   result_line << "Response: address_list={ ";
   for (unsigned int i = 0; i < address_list.size(); i++)
     result_line << address_list[i].ToString() << " ";
-  result_line << "}, ttl=" << ttl.InSeconds() << "s";
+  result_line << "}, ttl=" << ttl.value_or(base::TimeDelta()).InSeconds()
+              << "s";
 
   LOG(INFO) << result_line.str();
 }
diff --git a/net/url_request/url_request_http_job.cc b/net/url_request/url_request_http_job.cc
index f5e754f..ac868d1 100644
--- a/net/url_request/url_request_http_job.cc
+++ b/net/url_request/url_request_http_job.cc
@@ -149,15 +149,6 @@
       "Net.CertificateTransparency.RequestComplianceStatus",
       ssl_info.ct_policy_compliance,
       net::ct::CTPolicyCompliance::CT_POLICY_COUNT);
-  // Record the CT compliance of each request which was required to be CT
-  // compliant. This gives a picture of the sites that are supposed to be
-  // compliant and how well they do at actually being compliant.
-  if (ssl_info.ct_policy_compliance_required) {
-    UMA_HISTOGRAM_ENUMERATION(
-        "Net.CertificateTransparency.CTRequiredRequestComplianceStatus",
-        ssl_info.ct_policy_compliance,
-        net::ct::CTPolicyCompliance::CT_POLICY_COUNT);
-  }
 }
 
 template <typename CookieWithMetadata>
diff --git a/net/url_request/url_request_http_job_unittest.cc b/net/url_request/url_request_http_job_unittest.cc
index 723a911..2ea016c 100644
--- a/net/url_request/url_request_http_job_unittest.cc
+++ b/net/url_request/url_request_http_job_unittest.cc
@@ -88,8 +88,6 @@
 
 const char kCTComplianceHistogramName[] =
     "Net.CertificateTransparency.RequestComplianceStatus";
-const char kCTRequiredHistogramName[] =
-    "Net.CertificateTransparency.CTRequiredRequestComplianceStatus";
 
 // Inherit from URLRequestHttpJob to expose the priority and some
 // other hidden functions.
@@ -1040,7 +1038,6 @@
   ssl_socket_data.ssl_info.cert =
       ImportCertFromFile(GetTestCertsDirectory(), "ok_cert.pem");
   ssl_socket_data.ssl_info.is_issued_by_known_root = true;
-  ssl_socket_data.ssl_info.ct_policy_compliance_required = false;
   ssl_socket_data.ssl_info.ct_policy_compliance =
       ct::CTPolicyCompliance::CT_POLICY_NOT_DIVERSE_SCTS;
 
@@ -1086,7 +1083,6 @@
   ssl_socket_data.ssl_info.cert =
       ImportCertFromFile(GetTestCertsDirectory(), "ok_cert.pem");
   ssl_socket_data.ssl_info.is_issued_by_known_root = true;
-  ssl_socket_data.ssl_info.ct_policy_compliance_required = false;
   ssl_socket_data.ssl_info.ct_policy_compliance =
       ct::CTPolicyCompliance::CT_POLICY_NOT_DIVERSE_SCTS;
 
@@ -1113,9 +1109,6 @@
       kCTComplianceHistogramName,
       static_cast<int32_t>(ct::CTPolicyCompliance::CT_POLICY_NOT_DIVERSE_SCTS),
       1);
-  // CTRequiredRequestComplianceStatus should *not* have been recorded because
-  // it is only recorded for requests which are required to be compliant.
-  histograms.ExpectTotalCount(kCTRequiredHistogramName, 0);
 }
 
 // Tests that the CT compliance histograms are not recorded for
@@ -1126,7 +1119,6 @@
   ssl_socket_data.ssl_info.cert =
       ImportCertFromFile(GetTestCertsDirectory(), "ok_cert.pem");
   ssl_socket_data.ssl_info.is_issued_by_known_root = false;
-  ssl_socket_data.ssl_info.ct_policy_compliance_required = false;
   ssl_socket_data.ssl_info.ct_policy_compliance =
       ct::CTPolicyCompliance::CT_POLICY_NOT_DIVERSE_SCTS;
 
@@ -1150,7 +1142,6 @@
   EXPECT_THAT(delegate.request_status(), IsOk());
 
   histograms.ExpectTotalCount(kCTComplianceHistogramName, 0);
-  histograms.ExpectTotalCount(kCTRequiredHistogramName, 0);
 }
 
 // Tests that the CT compliance histogram is recorded when CT is required but
@@ -1161,7 +1152,6 @@
   ssl_socket_data.ssl_info.cert =
       ImportCertFromFile(GetTestCertsDirectory(), "ok_cert.pem");
   ssl_socket_data.ssl_info.is_issued_by_known_root = true;
-  ssl_socket_data.ssl_info.ct_policy_compliance_required = true;
   ssl_socket_data.ssl_info.ct_policy_compliance =
       ct::CTPolicyCompliance::CT_POLICY_NOT_DIVERSE_SCTS;
 
@@ -1188,10 +1178,6 @@
       kCTComplianceHistogramName,
       static_cast<int32_t>(ct::CTPolicyCompliance::CT_POLICY_NOT_DIVERSE_SCTS),
       1);
-  histograms.ExpectUniqueSample(
-      kCTRequiredHistogramName,
-      static_cast<int32_t>(ct::CTPolicyCompliance::CT_POLICY_NOT_DIVERSE_SCTS),
-      1);
 }
 
 // Tests that the CT compliance histograms are not recorded when there is an
@@ -1202,7 +1188,6 @@
   ssl_socket_data.ssl_info.cert =
       ImportCertFromFile(GetTestCertsDirectory(), "ok_cert.pem");
   ssl_socket_data.ssl_info.is_issued_by_known_root = true;
-  ssl_socket_data.ssl_info.ct_policy_compliance_required = true;
   ssl_socket_data.ssl_info.ct_policy_compliance =
       ct::CTPolicyCompliance::CT_POLICY_NOT_DIVERSE_SCTS;
   ssl_socket_data.ssl_info.cert_status = net::CERT_STATUS_DATE_INVALID;
@@ -1227,7 +1212,6 @@
   EXPECT_THAT(delegate.request_status(), IsOk());
 
   histograms.ExpectTotalCount(kCTComplianceHistogramName, 0);
-  histograms.ExpectTotalCount(kCTRequiredHistogramName, 0);
 }
 
 TEST_F(URLRequestHttpJobWithMockSocketsTest, EncodingAdvertisementOnRange) {
diff --git a/pdf/pdf_features.cc b/pdf/pdf_features.cc
index 9a48e35..fcc572f 100644
--- a/pdf/pdf_features.cc
+++ b/pdf/pdf_features.cc
@@ -11,7 +11,7 @@
                                           base::FEATURE_DISABLED_BY_DEFAULT};
 
 const base::Feature kPdfHonorJsContentSettings = {
-    "PdfHonorJsContentSettings", base::FEATURE_DISABLED_BY_DEFAULT};
+    "PdfHonorJsContentSettings", base::FEATURE_ENABLED_BY_DEFAULT};
 
 // "Incremental loading" refers to loading the PDF as it arrives.
 // TODO(crbug.com/1064175): Remove this once incremental loading is fixed.
diff --git a/printing/backend/mojom/BUILD.gn b/printing/backend/mojom/BUILD.gn
index a1067e8b..ec896b5 100644
--- a/printing/backend/mojom/BUILD.gn
+++ b/printing/backend/mojom/BUILD.gn
@@ -19,6 +19,7 @@
       ]
       traits_sources = [ "print_backend_mojom_traits.cc" ]
       traits_headers = [ "print_backend_mojom_traits.h" ]
+      traits_deps = [ "//printing:printing" ]
     },
   ]
 
diff --git a/remoting/protocol/webrtc_transport.cc b/remoting/protocol/webrtc_transport.cc
index b6fe0b34..d08c247 100644
--- a/remoting/protocol/webrtc_transport.cc
+++ b/remoting/protocol/webrtc_transport.cc
@@ -22,6 +22,7 @@
 #include "base/task_runner_util.h"
 #include "base/threading/thread_restrictions.h"
 #include "base/threading/thread_task_runner_handle.h"
+#include "base/threading/watchdog.h"
 #include "jingle/glue/thread_wrapper.h"
 #include "jingle/glue/utils.h"
 #include "remoting/base/constants.h"
@@ -88,6 +89,11 @@
 constexpr base::TimeDelta kWaitForDataChannelsClosedTimeout =
     base::TimeDelta::FromSeconds(5);
 
+// The maximum amount of time we will wait for a thread join before we crash the
+// host.
+constexpr base::TimeDelta kWaitForThreadJoinTimeout =
+    base::TimeDelta::FromSeconds(30);
+
 base::TimeDelta data_channel_state_polling_interval =
     kDefaultDataChannelStatePollingInterval;
 
@@ -329,6 +335,26 @@
   WebrtcEventLogData& event_log_data_;
 };
 
+// Helper class to monitor the thread join process (on a temporary thread) when
+// tearing down the peer connection, which has been observed to occasionally
+// block the network thread and zombify the host. This class crashes the ME2ME
+// host if the thread join process takes too long, so that the ME2ME daemon
+// process can respawn the host.
+// See: crbug.com/1130090
+class ThreadJoinWatchdog : public base::Watchdog {
+ public:
+  ThreadJoinWatchdog()
+      : base::Watchdog(kWaitForThreadJoinTimeout,
+                       "WebRTC Thread Join Watchdog",
+                       /* enabled= */ true) {}
+  ~ThreadJoinWatchdog() override = default;
+
+  void Alarm() override {
+    // Crash the host if thread join takes too long.
+    CHECK(false) << "WebRTC thread join process timed out.";
+  }
+};
+
 }  // namespace
 
 class WebrtcTransport::PeerConnectionWrapper
@@ -383,9 +409,13 @@
     dependencies.allocator = std::move(port_allocator);
     peer_connection_ = peer_connection_factory_->CreatePeerConnection(
         rtc_config, std::move(dependencies));
+
+    thread_join_watchdog_ = std::make_unique<ThreadJoinWatchdog>();
   }
 
   ~PeerConnectionWrapper() override {
+    thread_join_watchdog_->Arm();
+
     // PeerConnection creates threads internally, which are joined when the
     // connection is closed. See crbug.com/660081.
     ScopedAllowThreadJoinForWebRtcTransport allow_thread_join;
@@ -393,6 +423,11 @@
     peer_connection_ = nullptr;
     peer_connection_factory_ = nullptr;
     audio_module_ = nullptr;
+
+    if (before_disarm_thread_join_watchdog_callback_) {
+      std::move(before_disarm_thread_join_watchdog_callback_).Run();
+    }
+    thread_join_watchdog_->Disarm();
   }
 
   WebrtcAudioModule* audio_module() {
@@ -407,6 +442,14 @@
     return peer_connection_factory_.get();
   }
 
+  void SetThreadJoinWatchdogForTests(std::unique_ptr<base::Watchdog> watchdog) {
+    thread_join_watchdog_ = std::move(watchdog);
+  }
+
+  void SetBeforeDisarmThreadJoinWatchdogCallbackForTests(base::OnceClosure cb) {
+    before_disarm_thread_join_watchdog_callback_ = std::move(cb);
+  }
+
   // webrtc::PeerConnectionObserver interface.
   void OnSignalingChange(
       webrtc::PeerConnectionInterface::SignalingState new_state) override {
@@ -457,6 +500,8 @@
   scoped_refptr<webrtc::PeerConnectionFactoryInterface>
       peer_connection_factory_;
   scoped_refptr<webrtc::PeerConnectionInterface> peer_connection_;
+  std::unique_ptr<base::Watchdog> thread_join_watchdog_;
+  base::OnceClosure before_disarm_thread_join_watchdog_callback_;
 
   base::WeakPtr<WebrtcTransport> transport_;
 
@@ -1274,5 +1319,18 @@
   }
 }
 
+void WebrtcTransport::SetThreadJoinWatchdogForTests(
+    std::unique_ptr<base::Watchdog> watchdog) {
+  peer_connection_wrapper_->SetThreadJoinWatchdogForTests(  // IN-TEST
+      std::move(watchdog));
+}
+
+void WebrtcTransport::SetBeforeDisarmThreadJoinWatchdogCallbackForTests(
+    base::OnceClosure cb) {
+  peer_connection_wrapper_
+      ->SetBeforeDisarmThreadJoinWatchdogCallbackForTests(  // IN-TEST
+          std::move(cb));
+}
+
 }  // namespace protocol
 }  // namespace remoting
diff --git a/remoting/protocol/webrtc_transport.h b/remoting/protocol/webrtc_transport.h
index f092d69..ed797a1 100644
--- a/remoting/protocol/webrtc_transport.h
+++ b/remoting/protocol/webrtc_transport.h
@@ -10,6 +10,7 @@
 #include <tuple>
 #include <vector>
 
+#include "base/callback.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/weak_ptr.h"
@@ -27,6 +28,12 @@
 #include "remoting/signaling/signal_strategy.h"
 #include "third_party/webrtc/api/peer_connection_interface.h"
 
+namespace base {
+
+class Watchdog;
+
+}  // namespace base
+
 namespace remoting {
 namespace protocol {
 
@@ -134,6 +141,14 @@
   static void SetDataChannelPollingIntervalForTests(
       base::TimeDelta data_channel_state_polling_interval);
 
+  // Replaces the watchdog that monitors the thread join process when the peer
+  // connection is being torn down.
+  void SetThreadJoinWatchdogForTests(std::unique_ptr<base::Watchdog> watchdog);
+
+  // Sets a callback to be executed before disarming the thread join watchdog.
+  // Only used for testing.
+  void SetBeforeDisarmThreadJoinWatchdogCallbackForTests(base::OnceClosure cb);
+
  private:
   // PeerConnectionWrapper is responsible for PeerConnection creation,
   // ownership. It passes all events to the corresponding methods below. This is
diff --git a/remoting/protocol/webrtc_transport_unittest.cc b/remoting/protocol/webrtc_transport_unittest.cc
index cd19b146..95a9b69 100644
--- a/remoting/protocol/webrtc_transport_unittest.cc
+++ b/remoting/protocol/webrtc_transport_unittest.cc
@@ -11,7 +11,11 @@
 #include "base/macros.h"
 #include "base/run_loop.h"
 #include "base/strings/string_util.h"
+#include "base/test/bind_test_util.h"
 #include "base/test/task_environment.h"
+#include "base/threading/platform_thread.h"
+#include "base/threading/watchdog.h"
+#include "base/time/time.h"
 #include "jingle/glue/thread_wrapper.h"
 #include "net/base/io_buffer.h"
 #include "net/url_request/url_request_context_getter.h"
@@ -35,6 +39,9 @@
 const char kChannelName[] = "test_channel";
 const char kAuthKey[] = "test_auth_key";
 
+constexpr base::TimeDelta kWaitForThreadJoinTimeout =
+    base::TimeDelta::FromMilliseconds(200);
+
 class TestTransportEventHandler : public WebrtcTransport::EventHandler {
  public:
   typedef base::RepeatingCallback<void(ErrorCode error)> ErrorCallback;
@@ -147,6 +154,21 @@
   DISALLOW_COPY_AND_ASSIGN(TestMessagePipeEventHandler);
 };
 
+class FakeThreadJoinWatchdog : public base::Watchdog {
+ public:
+  explicit FakeThreadJoinWatchdog(bool* alarm_triggered)
+      : base::Watchdog(kWaitForThreadJoinTimeout,
+                       "Fake Thread Join Watchdog",
+                       /* enabled= */ true),
+        alarm_triggered_(alarm_triggered) {}
+  ~FakeThreadJoinWatchdog() override = default;
+
+  void Alarm() override { *alarm_triggered_ = true; }
+
+ private:
+  bool* alarm_triggered_;
+};
+
 }  // namespace
 
 class WebrtcTransportTest : public testing::Test {
@@ -184,24 +206,35 @@
   }
 
   void InitializeConnection() {
-    host_transport_.reset(
-        new WebrtcTransport(jingle_glue::JingleThreadWrapper::current(),
-                            TransportContext::ForTests(TransportRole::SERVER),
-                            &host_event_handler_));
+    host_transport_ = std::make_unique<WebrtcTransport>(
+        jingle_glue::JingleThreadWrapper::current(),
+        TransportContext::ForTests(TransportRole::SERVER),
+        &host_event_handler_);
+
+    host_transport_->SetThreadJoinWatchdogForTests(
+        std::make_unique<FakeThreadJoinWatchdog>(
+            &host_thread_join_alarm_triggered_));
+
     // If offer_to_receive_video and offer_to_receive_audio are both false,
     // there must be a stream present in order to generate a valid SDP offer.
     host_transport_->peer_connection()->AddTransceiver(
         cricket::MEDIA_TYPE_VIDEO);
 
-    host_authenticator_.reset(new FakeAuthenticator(FakeAuthenticator::ACCEPT));
+    host_authenticator_ =
+        std::make_unique<FakeAuthenticator>(FakeAuthenticator::ACCEPT);
     host_authenticator_->set_auth_key(kAuthKey);
 
-    client_transport_.reset(
-        new WebrtcTransport(jingle_glue::JingleThreadWrapper::current(),
-                            TransportContext::ForTests(TransportRole::CLIENT),
-                            &client_event_handler_));
-    client_authenticator_.reset(
-        new FakeAuthenticator(FakeAuthenticator::ACCEPT));
+    client_transport_ = std::make_unique<WebrtcTransport>(
+        jingle_glue::JingleThreadWrapper::current(),
+        TransportContext::ForTests(TransportRole::CLIENT),
+        &client_event_handler_);
+
+    client_transport_->SetThreadJoinWatchdogForTests(
+        std::make_unique<FakeThreadJoinWatchdog>(
+            &client_thread_join_alarm_triggered_));
+
+    client_authenticator_ =
+        std::make_unique<FakeAuthenticator>(FakeAuthenticator::ACCEPT);
     client_authenticator_->set_auth_key(kAuthKey);
   }
 
@@ -236,7 +269,7 @@
         base::BindRepeating(&WebrtcTransportTest::QuitRunLoopOnCounter,
                             base::Unretained(this), &counter));
 
-    run_loop_.reset(new base::RunLoop());
+    run_loop_ = std::make_unique<base::RunLoop>();
     run_loop_->Run();
 
     host_event_handler_.set_connected_callback({});
@@ -311,10 +344,12 @@
   std::unique_ptr<WebrtcTransport> host_transport_;
   TestTransportEventHandler host_event_handler_;
   std::unique_ptr<FakeAuthenticator> host_authenticator_;
+  bool host_thread_join_alarm_triggered_ = false;
 
   std::unique_ptr<WebrtcTransport> client_transport_;
   TestTransportEventHandler client_event_handler_;
   std::unique_ptr<FakeAuthenticator> client_authenticator_;
+  bool client_thread_join_alarm_triggered_ = false;
 
   std::unique_ptr<MessagePipe> client_message_pipe_;
   TestMessagePipeEventHandler client_message_pipe_event_handler_;
@@ -338,7 +373,7 @@
   client_authenticator_->set_auth_key("Incorrect Key");
   StartConnection();
 
-  run_loop_.reset(new base::RunLoop());
+  run_loop_ = std::make_unique<base::RunLoop>();
   run_loop_->Run();
 
   EXPECT_EQ(AUTHENTICATION_FAILED, client_error_);
@@ -353,7 +388,7 @@
   InitializeConnection();
   StartConnection();
 
-  run_loop_.reset(new base::RunLoop());
+  run_loop_ = std::make_unique<base::RunLoop>();
   run_loop_->Run();
 
   EXPECT_TRUE(client_message_pipe_);
@@ -363,7 +398,7 @@
   message.set_text("Hello");
   host_message_pipe_->Send(&message, {});
 
-  run_loop_.reset(new base::RunLoop());
+  run_loop_ = std::make_unique<base::RunLoop>();
   client_message_pipe_event_handler_.set_message_callback(
       run_loop_->QuitClosure());
   run_loop_->Run();
@@ -384,7 +419,7 @@
   ExpectClientDataStream();
   CreateHostDataStream();
 
-  run_loop_.reset(new base::RunLoop());
+  run_loop_ = std::make_unique<base::RunLoop>();
   run_loop_->Run();
 
   EXPECT_TRUE(client_message_pipe_);
@@ -399,7 +434,7 @@
   ExpectClientDataStream();
   CreateHostDataStream();
 
-  run_loop_.reset(new base::RunLoop());
+  run_loop_ = std::make_unique<base::RunLoop>();
   run_loop_->Run();
 
   EXPECT_TRUE(client_message_pipe_);
@@ -416,7 +451,7 @@
   // the other side.
   client_message_pipe_.reset();
 
-  run_loop_.reset(new base::RunLoop());
+  run_loop_ = std::make_unique<base::RunLoop>();
   run_loop_->Run();
 
   // Check that OnHostChannelClosed() has been called.
@@ -424,5 +459,73 @@
   EXPECT_FALSE(host_message_pipe_);
 }
 
+TEST_F(WebrtcTransportTest,
+       ThreadJoinBlockedDuringConnectionTeardown_WatchdogFired) {
+  InitializeConnection();
+
+  int counter = 2;
+  auto block_before_disarm = base::BindLambdaForTesting([&]() {
+    base::PlatformThread::Sleep(kWaitForThreadJoinTimeout * 2);
+    QuitRunLoopOnCounter(&counter);
+  });
+
+  host_transport_->SetBeforeDisarmThreadJoinWatchdogCallbackForTests(
+      block_before_disarm);
+  client_transport_->SetBeforeDisarmThreadJoinWatchdogCallbackForTests(
+      block_before_disarm);
+
+  StartConnection();
+  WaitUntilConnected();
+
+  ExpectClientDataStream();
+  CreateHostDataStream();
+
+  // Run loop for starting the data stream.
+  run_loop_ = std::make_unique<base::RunLoop>();
+  run_loop_->Run();
+
+  // Run loop for deleting the transports.
+  run_loop_ = std::make_unique<base::RunLoop>();
+  host_transport_.reset();
+  client_transport_.reset();
+  run_loop_->Run();
+
+  EXPECT_EQ(true, host_thread_join_alarm_triggered_);
+  EXPECT_EQ(true, client_thread_join_alarm_triggered_);
+}
+
+TEST_F(WebrtcTransportTest,
+       ThreadJoinNotBlockedDuringConnectionTeardown_WatchdogNotFired) {
+  InitializeConnection();
+
+  int counter = 2;
+  auto not_block_before_disarm =
+      base::BindLambdaForTesting([&]() { QuitRunLoopOnCounter(&counter); });
+
+  host_transport_->SetBeforeDisarmThreadJoinWatchdogCallbackForTests(
+      not_block_before_disarm);
+  client_transport_->SetBeforeDisarmThreadJoinWatchdogCallbackForTests(
+      not_block_before_disarm);
+
+  StartConnection();
+  WaitUntilConnected();
+
+  ExpectClientDataStream();
+  CreateHostDataStream();
+
+  // Run loop for starting the data stream.
+  run_loop_ = std::make_unique<base::RunLoop>();
+  run_loop_->Run();
+
+  // Run loop for deleting the transports.
+  run_loop_ = std::make_unique<base::RunLoop>();
+  host_transport_.reset();
+  client_transport_.reset();
+  run_loop_->Run();
+
+  EXPECT_EQ(false, host_thread_join_alarm_triggered_);
+  EXPECT_EQ(false, client_thread_join_alarm_triggered_);
+}
+
 }  // namespace protocol
 }  // namespace remoting
diff --git a/services/device/geolocation/BUILD.gn b/services/device/geolocation/BUILD.gn
index 851ddeb..46f7464b 100644
--- a/services/device/geolocation/BUILD.gn
+++ b/services/device/geolocation/BUILD.gn
@@ -9,13 +9,6 @@
   import("//build/config/android/rules.gni")  # For generate_jni().
 }
 
-# This file depends on the legacy global sources assignment filter. It should
-# be converted to check target platform before assigning source files to the
-# sources variable. Remove this import and set_sources_assignment_filter call
-# when the file has been converted. See https://crbug.com/1018739 for details.
-import("//build/config/deprecated_default_sources_assignment_filter.gni")
-set_sources_assignment_filter(deprecated_default_sources_assignment_filter)
-
 source_set("geolocation") {
   visibility = [
     ":*",
@@ -23,8 +16,6 @@
   ]
 
   sources = [
-    "empty_wifi_data_provider.cc",
-    "empty_wifi_data_provider.h",
     "geolocation_config.cc",
     "geolocation_config.h",
     "geolocation_context.cc",
@@ -34,14 +25,8 @@
     "geolocation_provider.h",
     "geolocation_provider_impl.cc",
     "geolocation_provider_impl.h",
-    "location_api_adapter_android.cc",
-    "location_api_adapter_android.h",
     "location_arbitrator.cc",
     "location_arbitrator.h",
-    "location_provider_android.cc",
-    "location_provider_android.h",
-    "network_location_provider.cc",
-    "network_location_provider.h",
     "network_location_request.cc",
     "network_location_request.h",
     "position_cache.h",
@@ -57,20 +42,8 @@
     "wifi_data.h",
     "wifi_data_provider.cc",
     "wifi_data_provider.h",
-    "wifi_data_provider_chromeos.cc",
-    "wifi_data_provider_chromeos.h",
-    "wifi_data_provider_common.cc",
-    "wifi_data_provider_common.h",
-    "wifi_data_provider_common_win.cc",
-    "wifi_data_provider_common_win.h",
-    "wifi_data_provider_linux.cc",
-    "wifi_data_provider_linux.h",
-    "wifi_data_provider_mac.h",
-    "wifi_data_provider_mac.mm",
     "wifi_data_provider_manager.cc",
     "wifi_data_provider_manager.h",
-    "wifi_data_provider_win.cc",
-    "wifi_data_provider_win.h",
     "wifi_polling_policy.cc",
     "wifi_polling_policy.h",
   ]
@@ -87,52 +60,30 @@
     "//services/device/public/mojom",
     "//services/network/public/cpp",
   ]
+
   if (is_android) {
-    sources -= [
-      "network_location_provider.cc",
-      "network_location_provider.h",
+    sources += [
+      "location_api_adapter_android.cc",
+      "location_api_adapter_android.h",
+      "location_provider_android.cc",
+      "location_provider_android.h",
     ]
     deps += [ ":geolocation_jni_headers" ]
-  }
-
-  # TODO(mcasas): prefer adding files than removing them (see cookbook.md).
-
-  # Dealing with *wifi_data_provider_*.cc is also a bit complicated given
-  # android, chromeos, linux and use_dbus.
-  if (is_android) {
-    sources -= [ "wifi_data_provider_common.cc" ]
-  }
-  if (is_chromeos || (is_linux && !use_dbus)) {
-    sources -= [ "wifi_data_provider_linux.cc" ]
-  }
-  if ((is_linux || is_chromeos) && use_dbus) {
-    sources -= [ "empty_wifi_data_provider.cc" ]
-    deps += [ "//dbus" ]
-  }
-  if (is_win || is_mac) {
-    sources -= [
-      "empty_wifi_data_provider.cc",
-      "empty_wifi_data_provider.h",
-    ]
-  }
-  if (is_chromeos) {
-    deps += [
-      "//chromeos/dbus/shill",
-      "//chromeos/network",
+  } else {
+    sources += [
+      "network_location_provider.cc",
+      "network_location_provider.h",
+      "wifi_data_provider_common.cc",
+      "wifi_data_provider_common.h",
     ]
   }
 
   if (is_mac) {
-    frameworks = [
-      "CoreWLAN.framework",
-      "Foundation.framework",
-      "CoreLocation.framework",
-    ]
+    frameworks = [ "CoreLocation.framework" ]
     sources += [
       "core_location_provider.h",
       "core_location_provider.mm",
     ]
-
     deps += [ "//services/device/public/cpp:device_features" ]
   }
 
@@ -141,9 +92,47 @@
       "win/location_provider_winrt.cc",
       "win/location_provider_winrt.h",
     ]
-
     deps += [ "//services/device/public/cpp:device_features" ]
   }
+
+  # Platform-specific WifiDataProvider implementations.
+  if (is_chromeos) {
+    sources += [
+      "wifi_data_provider_chromeos.cc",
+      "wifi_data_provider_chromeos.h",
+    ]
+    deps += [ "//chromeos/network" ]
+  } else if (is_linux && use_dbus) {
+    sources += [
+      "wifi_data_provider_linux.cc",
+      "wifi_data_provider_linux.h",
+    ]
+    deps += [ "//dbus" ]
+  } else if (is_mac) {
+    frameworks += [
+      "CoreWLAN.framework",
+      "Foundation.framework",
+    ]
+    sources += [
+      "wifi_data_provider_mac.h",
+      "wifi_data_provider_mac.mm",
+    ]
+  } else if (is_win) {
+    sources += [
+      "wifi_data_provider_common_win.cc",
+      "wifi_data_provider_common_win.h",
+      "wifi_data_provider_win.cc",
+      "wifi_data_provider_win.h",
+    ]
+  } else {
+    # WifiDataProviderManager declares a static factory method that is defined
+    # by the platform implementation. Platforms with no Wi-Fi data provider must
+    # include EmptyWifiDataProvider to provide this definition.
+    sources += [
+      "empty_wifi_data_provider.cc",
+      "empty_wifi_data_provider.h",
+    ]
+  }
 }
 
 if (is_android) {
@@ -194,4 +183,8 @@
     "//testing/gmock",
     "//testing/gtest",
   ]
+
+  if (is_chromeos) {
+    deps += [ "//chromeos/dbus/shill" ]
+  }
 }
diff --git a/services/network/network_context.cc b/services/network/network_context.cc
index 4de2f631..f7d84ab0 100644
--- a/services/network/network_context.cc
+++ b/services/network/network_context.cc
@@ -49,7 +49,6 @@
 #include "net/cert/caching_cert_verifier.h"
 #include "net/cert/cert_verifier.h"
 #include "net/cert/coalescing_cert_verifier.h"
-#include "net/cert/ct_verify_result.h"
 #include "net/cert_net/cert_net_fetcher_url_request.h"
 #include "net/cookies/cookie_monster.h"
 #include "net/dns/host_cache.h"
@@ -2353,7 +2352,6 @@
   auto pending_cert_verify = std::move(iter->second);
   cert_verifier_requests_.erase(iter);
 
-  net::ct::CTVerifyResult ct_verify_result;
 #if BUILDFLAG(IS_CT_SUPPORTED)
   if (result == net::OK) {
     net::X509Certificate* verified_cert =
@@ -2361,15 +2359,17 @@
     url_request_context_->cert_transparency_verifier()->Verify(
         pending_cert_verify->url.host(), verified_cert,
         pending_cert_verify->ocsp_result, pending_cert_verify->sct_list,
-        &ct_verify_result.scts,
+        &pending_cert_verify->result->scts,
         net::NetLogWithSource::Make(
             network_service_ ? url_request_context_->net_log() : nullptr,
             net::NetLogSourceType::CERT_VERIFIER_JOB));
 
-    net::ct::SCTList verified_scts = net::ct::SCTsMatchingStatus(
-        ct_verify_result.scts, net::ct::SCT_STATUS_OK);
-
-    ct_verify_result.policy_compliance =
+    net::ct::SCTList verified_scts;
+    for (const auto& sct_and_status : pending_cert_verify->result->scts) {
+      if (sct_and_status.status == net::ct::SCT_STATUS_OK)
+        verified_scts.push_back(sct_and_status.sct);
+    }
+    pending_cert_verify->result->policy_compliance =
         url_request_context_->ct_policy_enforcer()->CheckCompliance(
             verified_cert, verified_scts,
             net::NetLogWithSource::Make(
@@ -2379,9 +2379,9 @@
     // TODO(https://crbug.com/803774): We should determine whether EV & SXG
     // should be a thing (due to the online/offline signing difference)
     if (pending_cert_verify->result->cert_status & net::CERT_STATUS_IS_EV &&
-        ct_verify_result.policy_compliance !=
+        pending_cert_verify->result->policy_compliance !=
             net::ct::CTPolicyCompliance::CT_POLICY_COMPLIES_VIA_SCTS &&
-        ct_verify_result.policy_compliance !=
+        pending_cert_verify->result->policy_compliance !=
             net::ct::CTPolicyCompliance::CT_POLICY_BUILD_NOT_TIMELY) {
       pending_cert_verify->result->cert_status |=
           net::CERT_STATUS_CT_COMPLIANCE_FAILED;
@@ -2396,16 +2396,17 @@
             net::HostPortPair::FromURL(pending_cert_verify->url),
             pending_cert_verify->result->is_issued_by_known_root,
             pending_cert_verify->result->public_key_hashes, verified_cert,
-            pending_cert_verify->certificate.get(), ct_verify_result.scts,
+            pending_cert_verify->certificate.get(),
+            pending_cert_verify->result->scts,
             net::TransportSecurityState::ENABLE_EXPECT_CT_REPORTS,
-            ct_verify_result.policy_compliance,
+            pending_cert_verify->result->policy_compliance,
             net::NetworkIsolationKey::Todo());
 
     if (url_request_context_->sct_auditing_delegate() &&
         url_request_context_->sct_auditing_delegate()->IsSCTAuditingEnabled()) {
       url_request_context_->sct_auditing_delegate()->MaybeEnqueueReport(
           net::HostPortPair::FromURL(pending_cert_verify->url), verified_cert,
-          ct_verify_result.scts);
+          pending_cert_verify->result->scts);
     }
 
     switch (ct_requirement_status) {
@@ -2413,26 +2414,22 @@
         result = net::ERR_CERTIFICATE_TRANSPARENCY_REQUIRED;
         break;
       case net::TransportSecurityState::CT_REQUIREMENTS_MET:
-        ct_verify_result.policy_compliance_required = true;
         break;
       case net::TransportSecurityState::CT_NOT_REQUIRED:
         // CT is not required if the certificate does not chain to a publicly
         // trusted root certificate.
-        if (!pending_cert_verify->result->is_issued_by_known_root) {
-          ct_verify_result.policy_compliance_required = false;
+        if (!pending_cert_verify->result->is_issued_by_known_root)
           break;
-        }
         // For old certificates (issued before 2018-05-01),
         // CheckCTRequirements() may return CT_NOT_REQUIRED, so we check the
         // compliance status here.
         // TODO(https://crbug.com/851778): Remove this condition once we require
         // signing certificates to have CanSignHttpExchanges extension, because
         // such certificates should be naturally after 2018-05-01.
-        if (ct_verify_result.policy_compliance ==
+        if (pending_cert_verify->result->policy_compliance ==
                 net::ct::CTPolicyCompliance::CT_POLICY_COMPLIES_VIA_SCTS ||
-            ct_verify_result.policy_compliance ==
+            pending_cert_verify->result->policy_compliance ==
                 net::ct::CTPolicyCompliance::CT_POLICY_BUILD_NOT_TIMELY) {
-          ct_verify_result.policy_compliance_required = true;
           break;
         }
         // Require CT compliance, by overriding CT_NOT_REQUIRED and treat it as
@@ -2443,7 +2440,7 @@
 #endif  // BUILDFLAG(IS_CT_SUPPORTED)
 
   std::move(pending_cert_verify->callback)
-      .Run(result, *pending_cert_verify->result.get(), ct_verify_result);
+      .Run(result, *pending_cert_verify->result.get());
 }
 
 #if defined(OS_CHROMEOS)
diff --git a/services/network/public/cpp/data_element.cc b/services/network/public/cpp/data_element.cc
index 545797e..ad83f0a 100644
--- a/services/network/public/cpp/data_element.cc
+++ b/services/network/public/cpp/data_element.cc
@@ -40,15 +40,6 @@
   expected_modification_time_ = expected_modification_time;
 }
 
-void DataElement::SetToBlobRange(const std::string& blob_uuid,
-                                 uint64_t offset,
-                                 uint64_t length) {
-  type_ = mojom::DataElementType::kBlob;
-  blob_uuid_ = blob_uuid;
-  offset_ = offset;
-  length_ = length;
-}
-
 void DataElement::SetToDataPipe(
     mojo::PendingRemote<mojom::DataPipeGetter> data_pipe_getter) {
   DCHECK(data_pipe_getter);
@@ -116,9 +107,6 @@
       *os << "TYPE_FILE, path: " << x.path().AsUTF8Unsafe()
           << ", expected_modification_time: " << x.expected_modification_time();
       break;
-    case mojom::DataElementType::kBlob:
-      *os << "TYPE_BLOB, uuid: " << x.blob_uuid();
-      break;
     case mojom::DataElementType::kDataPipe:
       *os << "TYPE_DATA_PIPE";
       break;
@@ -145,8 +133,6 @@
     case mojom::DataElementType::kFile:
       return a.path() == b.path() &&
              a.expected_modification_time() == b.expected_modification_time();
-    case mojom::DataElementType::kBlob:
-      return a.blob_uuid() == b.blob_uuid();
     case mojom::DataElementType::kDataPipe:
       return false;
     case mojom::DataElementType::kChunkedDataPipe:
diff --git a/services/network/public/cpp/data_element.h b/services/network/public/cpp/data_element.h
index 42e096a..3024a07f 100644
--- a/services/network/public/cpp/data_element.h
+++ b/services/network/public/cpp/data_element.h
@@ -35,8 +35,8 @@
 
 namespace network {
 
-// Represents part of an upload body. This could be either one of bytes, file or
-// blob data.
+// Represents part of an upload body. This could be one of raw bytes, file data,
+// or a mojo pipe that streams data.
 class COMPONENT_EXPORT(NETWORK_CPP_BASE) DataElement {
  public:
   static const uint64_t kUnknownSize = std::numeric_limits<uint64_t>::max();
@@ -54,7 +54,6 @@
     return reinterpret_cast<const char*>(buf_.data());
   }
   const base::FilePath& path() const { return path_; }
-  const std::string& blob_uuid() const { return blob_uuid_; }
   uint64_t offset() const { return offset_; }
   uint64_t length() const { return length_; }
   const base::Time& expected_modification_time() const {
@@ -94,22 +93,12 @@
     length_ = buf_.size();
   }
 
-  // Sets TYPE_BLOB data.
-  void SetToBlob(const std::string& uuid) {
-    SetToBlobRange(uuid, 0, std::numeric_limits<uint64_t>::max());
-  }
-
   // Sets TYPE_FILE data with range.
   void SetToFilePathRange(const base::FilePath& path,
                           uint64_t offset,
                           uint64_t length,
                           const base::Time& expected_modification_time);
 
-  // Sets TYPE_BLOB data with range.
-  void SetToBlobRange(const std::string& blob_uuid,
-                      uint64_t offset,
-                      uint64_t length);
-
   // Sets TYPE_DATA_PIPE data. The data pipe consumer can safely wait for the
   // callback passed to Read() to be invoked before reading the request body.
   void SetToDataPipe(
@@ -149,8 +138,6 @@
   std::vector<uint8_t> buf_;
   // For TYPE_FILE.
   base::FilePath path_;
-  // For TYPE_BLOB.
-  std::string blob_uuid_;
   // For TYPE_DATA_PIPE.
   mojo::PendingRemote<mojom::DataPipeGetter> data_pipe_getter_;
   // For TYPE_CHUNKED_DATA_PIPE.
diff --git a/services/network/public/cpp/host_resolver_mojom_traits.cc b/services/network/public/cpp/host_resolver_mojom_traits.cc
index 56c05a5..7175738 100644
--- a/services/network/public/cpp/host_resolver_mojom_traits.cc
+++ b/services/network/public/cpp/host_resolver_mojom_traits.cc
@@ -167,7 +167,7 @@
     out->ndots = data.ndots();
   // if == -1, leave nullopt.
 
-  if (!data.ReadTimeout(&out->timeout))
+  if (!data.ReadFallbackPeriod(&out->fallback_period))
     return false;
 
   if (data.attempts() < -1)
diff --git a/services/network/public/cpp/host_resolver_mojom_traits.h b/services/network/public/cpp/host_resolver_mojom_traits.h
index 76e1fc8b..4b3a9d9 100644
--- a/services/network/public/cpp/host_resolver_mojom_traits.h
+++ b/services/network/public/cpp/host_resolver_mojom_traits.h
@@ -52,9 +52,9 @@
     return overrides.ndots.value_or(-1);
   }
 
-  static const base::Optional<base::TimeDelta>& timeout(
+  static const base::Optional<base::TimeDelta>& fallback_period(
       const net::DnsConfigOverrides& overrides) {
-    return overrides.timeout;
+    return overrides.fallback_period;
   }
 
   static int attempts(const net::DnsConfigOverrides& overrides) {
diff --git a/services/network/public/cpp/host_resolver_mojom_traits_unittest.cc b/services/network/public/cpp/host_resolver_mojom_traits_unittest.cc
index 0a0e094..8179234 100644
--- a/services/network/public/cpp/host_resolver_mojom_traits_unittest.cc
+++ b/services/network/public/cpp/host_resolver_mojom_traits_unittest.cc
@@ -33,7 +33,7 @@
   original.search.emplace({std::string("str")});
   original.append_to_multi_label_name = true;
   original.ndots = 2;
-  original.timeout = base::TimeDelta::FromHours(4);
+  original.fallback_period = base::TimeDelta::FromHours(4);
   original.attempts = 1;
   original.rotate = true;
   original.use_local_ipv6 = false;
diff --git a/services/network/public/cpp/net_ipc_param_traits.cc b/services/network/public/cpp/net_ipc_param_traits.cc
index bb2f1be..9567cfd 100644
--- a/services/network/public/cpp/net_ipc_param_traits.cc
+++ b/services/network/public/cpp/net_ipc_param_traits.cc
@@ -74,6 +74,8 @@
   WriteParam(m, p.is_issued_by_known_root);
   WriteParam(m, p.is_issued_by_additional_trust_anchor);
   WriteParam(m, p.ocsp_result);
+  WriteParam(m, p.scts);
+  WriteParam(m, p.policy_compliance);
 }
 
 bool ParamTraits<net::CertVerifyResult>::Read(const base::Pickle* m,
@@ -87,7 +89,8 @@
          ReadParam(m, iter, &r->public_key_hashes) &&
          ReadParam(m, iter, &r->is_issued_by_known_root) &&
          ReadParam(m, iter, &r->is_issued_by_additional_trust_anchor) &&
-         ReadParam(m, iter, &r->ocsp_result);
+         ReadParam(m, iter, &r->ocsp_result) && ReadParam(m, iter, &r->scts) &&
+         ReadParam(m, iter, &r->policy_compliance);
 }
 
 void ParamTraits<net::CertVerifyResult>::Log(const param_type& p,
@@ -95,26 +98,6 @@
   l->append("<CertVerifyResult>");
 }
 
-void ParamTraits<net::ct::CTVerifyResult>::Write(base::Pickle* m,
-                                                 const param_type& p) {
-  WriteParam(m, p.scts);
-  WriteParam(m, p.policy_compliance);
-  WriteParam(m, p.policy_compliance_required);
-}
-
-bool ParamTraits<net::ct::CTVerifyResult>::Read(const base::Pickle* m,
-                                                base::PickleIterator* iter,
-                                                param_type* r) {
-  return ReadParam(m, iter, &r->scts) &&
-         ReadParam(m, iter, &r->policy_compliance) &&
-         ReadParam(m, iter, &r->policy_compliance_required);
-}
-
-void ParamTraits<net::ct::CTVerifyResult>::Log(const param_type& p,
-                                               std::string* l) {
-  l->append("<CTVerifyResult>");
-}
-
 void ParamTraits<net::HashValue>::Write(base::Pickle* m, const param_type& p) {
   WriteParam(m, p.ToString());
 }
diff --git a/services/network/public/cpp/net_ipc_param_traits.h b/services/network/public/cpp/net_ipc_param_traits.h
index c3835ff3..53f7441 100644
--- a/services/network/public/cpp/net_ipc_param_traits.h
+++ b/services/network/public/cpp/net_ipc_param_traits.h
@@ -21,7 +21,6 @@
 #include "net/base/request_priority.h"
 #include "net/cert/cert_verify_result.h"
 #include "net/cert/ct_policy_status.h"
-#include "net/cert/ct_verify_result.h"
 #include "net/cert/signed_certificate_timestamp.h"
 #include "net/cert/signed_certificate_timestamp_and_status.h"
 #include "net/cert/x509_certificate.h"
@@ -82,16 +81,6 @@
 };
 
 template <>
-struct COMPONENT_EXPORT(NETWORK_CPP_BASE) ParamTraits<net::ct::CTVerifyResult> {
-  typedef net::ct::CTVerifyResult param_type;
-  static void Write(base::Pickle* m, const param_type& p);
-  static bool Read(const base::Pickle* m,
-                   base::PickleIterator* iter,
-                   param_type* r);
-  static void Log(const param_type& p, std::string* l);
-};
-
-template <>
 struct COMPONENT_EXPORT(NETWORK_CPP_BASE) ParamTraits<net::HashValue> {
   typedef net::HashValue param_type;
   static void Write(base::Pickle* m, const param_type& p);
diff --git a/services/network/public/cpp/network_ipc_param_traits.cc b/services/network/public/cpp/network_ipc_param_traits.cc
index 61ebf375..edab086 100644
--- a/services/network/public/cpp/network_ipc_param_traits.cc
+++ b/services/network/public/cpp/network_ipc_param_traits.cc
@@ -30,12 +30,6 @@
       WriteParam(m, p.expected_modification_time());
       break;
     }
-    case network::mojom::DataElementType::kBlob: {
-      WriteParam(m, p.blob_uuid());
-      WriteParam(m, p.offset());
-      WriteParam(m, p.length());
-      break;
-    }
     case network::mojom::DataElementType::kDataPipe: {
       WriteParam(m, p.CloneDataPipeGetter().PassPipe().release());
       break;
@@ -86,18 +80,6 @@
                             expected_modification_time);
       return true;
     }
-    case network::mojom::DataElementType::kBlob: {
-      std::string blob_uuid;
-      uint64_t offset, length;
-      if (!ReadParam(m, iter, &blob_uuid))
-        return false;
-      if (!ReadParam(m, iter, &offset))
-        return false;
-      if (!ReadParam(m, iter, &length))
-        return false;
-      r->SetToBlobRange(blob_uuid, offset, length);
-      return true;
-    }
     case network::mojom::DataElementType::kDataPipe: {
       mojo::MessagePipeHandle message_pipe;
       if (!ReadParam(m, iter, &message_pipe))
diff --git a/services/network/public/cpp/resource_request_body.cc b/services/network/public/cpp/resource_request_body.cc
index 6c3df6d..59c1b356 100644
--- a/services/network/public/cpp/resource_request_body.cc
+++ b/services/network/public/cpp/resource_request_body.cc
@@ -57,17 +57,6 @@
                                       expected_modification_time);
 }
 
-void ResourceRequestBody::AppendBlob(const std::string& uuid) {
-  AppendBlob(uuid, std::numeric_limits<uint64_t>::max());
-}
-
-void ResourceRequestBody::AppendBlob(const std::string& uuid, uint64_t length) {
-  DCHECK(EnableToAppendElement());
-
-  elements_.push_back(DataElement());
-  elements_.back().SetToBlobRange(uuid, 0 /* offset */, length);
-}
-
 void ResourceRequestBody::AppendDataPipe(
     mojo::PendingRemote<mojom::DataPipeGetter> data_pipe_getter) {
   DCHECK(EnableToAppendElement());
diff --git a/services/network/public/cpp/resource_request_body.h b/services/network/public/cpp/resource_request_body.h
index 466d64f..8c851736 100644
--- a/services/network/public/cpp/resource_request_body.h
+++ b/services/network/public/cpp/resource_request_body.h
@@ -45,19 +45,6 @@
                        uint64_t length,
                        const base::Time& expected_modification_time);
 
-  // Appends a blob. If the 2-parameter version is used, the resulting body can
-  // be read by Blink, which is needed when the body is sent to Blink, e.g., for
-  // service worker interception. The length must be size of the entire blob,
-  // not a subrange of it. If the length is unknown, use the 1-parameter
-  // version, but this means the body/blob won't be readable by Blink (that's OK
-  // if this ResourceRequestBody will only be sent to the browser process and
-  // won't be sent to Blink).
-  //
-  // TODO(crbug.com/846167): Remove these functions when NetworkService is
-  // enabled, as blobs are passed via AppendDataPipe in that case.
-  void AppendBlob(const std::string& uuid);
-  void AppendBlob(const std::string& uuid, uint64_t length);
-
   void AppendDataPipe(
       mojo::PendingRemote<mojom::DataPipeGetter> data_pipe_getter);
 
diff --git a/services/network/public/cpp/url_request_mojom_traits.cc b/services/network/public/cpp/url_request_mojom_traits.cc
index 9fc0da8..0bb41983 100644
--- a/services/network/public/cpp/url_request_mojom_traits.cc
+++ b/services/network/public/cpp/url_request_mojom_traits.cc
@@ -266,10 +266,6 @@
     network::debug::SetDeserializationCrashKeyString("data_element_path");
     return false;
   }
-  if (!data.ReadBlobUuid(&out->blob_uuid_)) {
-    network::debug::SetDeserializationCrashKeyString("data_element_blob_uuid");
-    return false;
-  }
   if (!data.ReadExpectedModificationTime(&out->expected_modification_time_)) {
     return false;
   }
diff --git a/services/network/public/cpp/url_request_mojom_traits.h b/services/network/public/cpp/url_request_mojom_traits.h
index ea30287..6995a9f 100644
--- a/services/network/public/cpp/url_request_mojom_traits.h
+++ b/services/network/public/cpp/url_request_mojom_traits.h
@@ -314,9 +314,6 @@
   static const base::FilePath& path(const network::DataElement& element) {
     return element.path_;
   }
-  static const std::string& blob_uuid(const network::DataElement& element) {
-    return element.blob_uuid_;
-  }
   static mojo::PendingRemote<network::mojom::DataPipeGetter> data_pipe_getter(
       const network::DataElement& element) {
     if (element.type_ != network::mojom::DataElementType::kDataPipe)
diff --git a/services/network/public/mojom/host_resolver.mojom b/services/network/public/mojom/host_resolver.mojom
index 221ae64..b274cbe 100644
--- a/services/network/public/mojom/host_resolver.mojom
+++ b/services/network/public/mojom/host_resolver.mojom
@@ -66,7 +66,7 @@
   int8 ndots = -1;  // -1 for no override.
 
   // Time between retransmissions, see res_state.retrans.
-  mojo_base.mojom.TimeDelta? timeout;
+  mojo_base.mojom.TimeDelta? fallback_period;
 
   // Maximum number of attempts, see res_state.retry.
   int32 attempts = -1;  // -1 for no override.
diff --git a/services/network/public/mojom/network_context.mojom b/services/network/public/mojom/network_context.mojom
index dfeaf3c..184e48c 100644
--- a/services/network/public/mojom/network_context.mojom
+++ b/services/network/public/mojom/network_context.mojom
@@ -1295,8 +1295,7 @@
                               url.mojom.Url url,
                               string ocsp_response,
                               string sct_list) => (int32 error_code,
-                                                   CertVerifyResult cv_result,
-                                                   CTVerifyResult ct_result);
+                                                   CertVerifyResult cv_result);
 
   // Parses response headers and returns a structured version to the caller.
   // This call originates from the browser process. Used for navigations when
diff --git a/services/network/public/mojom/network_param.mojom b/services/network/public/mojom/network_param.mojom
index 41f3103..8f9f5d0 100644
--- a/services/network/public/mojom/network_param.mojom
+++ b/services/network/public/mojom/network_param.mojom
@@ -14,9 +14,6 @@
 struct CertVerifyResult;
 
 [Native]
-struct CTVerifyResult;
-
-[Native]
 struct HttpResponseHeaders;
 
 struct HttpVersion {
diff --git a/services/network/public/mojom/url_loader.mojom b/services/network/public/mojom/url_loader.mojom
index ef862c8a..972ff20b 100644
--- a/services/network/public/mojom/url_loader.mojom
+++ b/services/network/public/mojom/url_loader.mojom
@@ -59,17 +59,13 @@
 enum DataElementType {
   kUnknown = -1,
 
-  // Only used for Upload with Network Service as of now:
   kDataPipe,
   kChunkedDataPipe,
   kReadOnceStream,
-
-  // Used for Upload when Network Service is disabled:
-  kBlob,
-  kFile,
-
-  // Commonly used in every case:
   kBytes,
+
+  // TODO(https://crbug.com/1132362):  Remove this.
+  kFile,
 };
 
 // Options that may only be set on URLRequests passed to a URLLoaderFactory
@@ -430,9 +426,6 @@
   array<uint8> buf;
   // For kFile
   mojo_base.mojom.FilePath path;
-  // For kBlob
-  // TODO(richard.li): Deprecate this once NetworkService is fully shipped.
-  string blob_uuid;
   // For kDataPipe
   pending_remote<network.mojom.DataPipeGetter>? data_pipe_getter;
   // For kChunkedDataPipe
diff --git a/services/network/url_loader.cc b/services/network/url_loader.cc
index e13745d..6589345 100644
--- a/services/network/url_loader.cc
+++ b/services/network/url_loader.cc
@@ -224,10 +224,6 @@
         element_readers.push_back(std::make_unique<FileElementReader>(
             body, file_task_runner, element, std::move(*opened_file++)));
         break;
-      case network::mojom::DataElementType::kBlob: {
-        CHECK(false) << "Network service always uses DATA_PIPE for blobs.";
-        break;
-      }
       case network::mojom::DataElementType::kDataPipe: {
         element_readers.push_back(std::make_unique<DataPipeElementReader>(
             body, element.CloneDataPipeGetter()));
diff --git a/storage/browser/quota/quota_features.cc b/storage/browser/quota/quota_features.cc
index 5fe119c..b638a01 100644
--- a/storage/browser/quota/quota_features.cc
+++ b/storage/browser/quota/quota_features.cc
@@ -8,19 +8,6 @@
 
 namespace features {
 
-// IncognitoDynamicQuota enables dynamic assignment of quota to incognito mode
-// based on the physical memory size and removes the fixed upper cap for it.
-const base::Feature kIncognitoDynamicQuota{"IncognitoDynamicQuota",
-                                           base::FEATURE_ENABLED_BY_DEFAULT};
-
-// Dynamic quota for incognito mode would be set by a random fraction of
-// physical memory, between |IncognitoQuotaRatioLowerBound| and
-// |IncognitoQuotaRatioUpperBound|.
-constexpr base::FeatureParam<double> kIncognitoQuotaRatioLowerBound{
-    &kIncognitoDynamicQuota, "IncognitoQuotaRatioLowerBound", 0.15};
-constexpr base::FeatureParam<double> kIncognitoQuotaRatioUpperBound{
-    &kIncognitoDynamicQuota, "IncognitoQuotaRatioUpperBound", 0.2};
-
 // Enables Storage Pressure Event.
 const base::Feature kStoragePressureEvent{"StoragePressureEvent",
                                           base::FEATURE_DISABLED_BY_DEFAULT};
diff --git a/storage/browser/quota/quota_features.h b/storage/browser/quota/quota_features.h
index 6364087..2203dd63 100644
--- a/storage/browser/quota/quota_features.h
+++ b/storage/browser/quota/quota_features.h
@@ -14,11 +14,6 @@
 namespace features {
 
 COMPONENT_EXPORT(STORAGE_BROWSER)
-extern const base::Feature kIncognitoDynamicQuota;
-extern const base::FeatureParam<double> kIncognitoQuotaRatioLowerBound;
-extern const base::FeatureParam<double> kIncognitoQuotaRatioUpperBound;
-
-COMPONENT_EXPORT(STORAGE_BROWSER)
 extern const base::Feature kStoragePressureEvent;
 
 }  // namespace features
diff --git a/storage/browser/quota/quota_settings.cc b/storage/browser/quota/quota_settings.cc
index 27c280b..4b8ac29 100644
--- a/storage/browser/quota/quota_settings.cc
+++ b/storage/browser/quota/quota_settings.cc
@@ -28,6 +28,8 @@
 const int kRandomizedPercentage = 10;
 const double kDefaultPerHostRatio = 0.75;
 const double kDefaultPoolSizeRatio = 0.8;
+const double kIncognitoQuotaRatioLowerBound = 0.15;
+const double kIncognitoQuotaRatioUpperBound = 0.2;
 
 // Skews |value| by +/- |percent|.
 int64_t RandomizeByPercent(int64_t value, int percent) {
@@ -37,25 +39,15 @@
 
 QuotaSettings CalculateIncognitoDynamicSettings(
     int64_t physical_memory_amount) {
-  // The incognito pool size is a fraction of the amount of system memory,
-  // and the amount is capped to a hard limit.
-  double incognito_pool_size_ratio = 0.1;  // 10%
-  int64_t max_incognito_pool_size = 300 * kMBytes;
-  if (base::FeatureList::IsEnabled(features::kIncognitoDynamicQuota)) {
-    const double lower_bound = features::kIncognitoQuotaRatioLowerBound.Get();
-    const double upper_bound = features::kIncognitoQuotaRatioUpperBound.Get();
-    incognito_pool_size_ratio =
-        lower_bound + (base::RandDouble() * (upper_bound - lower_bound));
-    max_incognito_pool_size = std::numeric_limits<int64_t>::max();
-  } else {
-    max_incognito_pool_size =
-        RandomizeByPercent(max_incognito_pool_size, kRandomizedPercentage);
-  }
+  // The incognito pool size is a fraction of the amount of system memory.
+  double incognito_pool_size_ratio =
+      kIncognitoQuotaRatioLowerBound +
+      (base::RandDouble() *
+       (kIncognitoQuotaRatioUpperBound - kIncognitoQuotaRatioLowerBound));
 
   QuotaSettings settings;
-  settings.pool_size = std::min(
-      max_incognito_pool_size,
-      static_cast<int64_t>(physical_memory_amount * incognito_pool_size_ratio));
+  settings.pool_size =
+      static_cast<int64_t>(physical_memory_amount * incognito_pool_size_ratio);
   settings.per_host_quota = settings.pool_size / 3;
   settings.session_only_per_host_quota = settings.per_host_quota;
   settings.refresh_interval = base::TimeDelta::Max();
@@ -163,4 +155,11 @@
   return singleton.get();
 }
 
+double GetIncognitoQuotaRatioLowerBound_ForTesting() {
+  return kIncognitoQuotaRatioLowerBound;
+}
+double GetIncognitoQuotaRatioUpperBound_ForTesting() {
+  return kIncognitoQuotaRatioUpperBound;
+}
+
 }  // namespace storage
diff --git a/storage/browser/quota/quota_settings.h b/storage/browser/quota/quota_settings.h
index c01ce6d..971adeb 100644
--- a/storage/browser/quota/quota_settings.h
+++ b/storage/browser/quota/quota_settings.h
@@ -96,6 +96,11 @@
                        per_host_quota, per_host_quota);
 }
 
+COMPONENT_EXPORT(STORAGE_BROWSER)
+double GetIncognitoQuotaRatioLowerBound_ForTesting();
+COMPONENT_EXPORT(STORAGE_BROWSER)
+double GetIncognitoQuotaRatioUpperBound_ForTesting();
+
 // Returns object that can fetch actual total disk space; instance lives
 // as long as the process is a live.
 COMPONENT_EXPORT(STORAGE_BROWSER)
diff --git a/storage/browser/quota/quota_settings_unittest.cc b/storage/browser/quota/quota_settings_unittest.cc
index 25ae2152..5d786352 100644
--- a/storage/browser/quota/quota_settings_unittest.cc
+++ b/storage/browser/quota/quota_settings_unittest.cc
@@ -20,16 +20,8 @@
 
 namespace {
 
-constexpr int64_t kMBytes = 1024 * 1024;
-
-// 10% is the non-experimental incognito pool size ratio
-// as defined in storage/browser/quota/quota_settings.cc line 37.
-constexpr double kIncognitoPoolSizeRatio = 0.1;
-
-// 300 MB + 10% is the max incognito pool size as set in
-// storage/browser/quota/quota_settings.cc line 48.
-constexpr int64_t kMaxIncognitoPoolSize =
-    (300 + 300 * kIncognitoPoolSizeRatio) * kMBytes;
+constexpr int64_t kLowPhysicalMemory = 1024 * 1024;
+constexpr int64_t kHighPhysicalMemory = 65536 * kLowPhysicalMemory;
 
 }  // namespace
 
@@ -71,40 +63,18 @@
         .Times(expected_calls);
   }
 
-  void EnableFeature() {
-    scoped_feature_list_.Reset();
-    scoped_feature_list_.InitAndEnableFeatureWithParameters(
-        features::kIncognitoDynamicQuota,
-        {{"IncognitoQuotaRatioLowerBound", ratio_lower_bound_},
-         {"IncognitoQuotaRatioUpperBound", ratio_upper_bound_}});
-  }
-
-  void DisableFeature() {
-    scoped_feature_list_.Reset();
-    scoped_feature_list_.InitAndDisableFeature(
-        features::kIncognitoDynamicQuota);
-  }
-
-  void GetAndTestExperimentalSettings(const int64_t physical_memory_amount) {
+  void GetAndTestSettings(const int64_t physical_memory_amount) {
     bool callback_executed = false;
     GetNominalDynamicSettings(
         profile_path(), true, device_info_helper(),
         base::BindLambdaForTesting([&](base::Optional<QuotaSettings> settings) {
           callback_executed = true;
-          EXPECT_LE(physical_memory_amount * 0.2, settings->pool_size);
-          EXPECT_GE(physical_memory_amount * 0.3, settings->pool_size);
-        }));
-    task_environment_.RunUntilIdle();
-    EXPECT_TRUE(callback_executed);
-  }
-
-  void GetAndTestDefaultSettings() {
-    bool callback_executed = false;
-    GetNominalDynamicSettings(
-        profile_path(), true, device_info_helper(),
-        base::BindLambdaForTesting([&](base::Optional<QuotaSettings> settings) {
-          callback_executed = true;
-          EXPECT_GE(kMaxIncognitoPoolSize, settings->pool_size);
+          EXPECT_LE(physical_memory_amount *
+                        GetIncognitoQuotaRatioLowerBound_ForTesting(),
+                    settings->pool_size);
+          EXPECT_GE(physical_memory_amount *
+                        GetIncognitoQuotaRatioUpperBound_ForTesting(),
+                    settings->pool_size);
         }));
     task_environment_.RunUntilIdle();
     EXPECT_TRUE(callback_executed);
@@ -116,8 +86,6 @@
 
  private:
   MockQuotaDeviceInfoHelper device_info_helper_;
-  std::string ratio_lower_bound_ = "0.2";
-  std::string ratio_upper_bound_ = "0.3";
 };
 
 TEST_F(QuotaSettingsTest, Default) {
@@ -140,64 +108,18 @@
   EXPECT_TRUE(callback_executed);
 }
 
-TEST_F(QuotaSettingsTest, IncognitoQuotaCapped) {
-  MockQuotaDeviceInfoHelper device_info_helper;
-  EXPECT_CALL(device_info_helper, AmountOfPhysicalMemory()).Times(1);
-  ON_CALL(device_info_helper, AmountOfPhysicalMemory())
-      .WillByDefault(::testing::Return(kMaxIncognitoPoolSize));
-
-  scoped_feature_list_.InitAndDisableFeature(features::kIncognitoDynamicQuota);
-  bool callback_executed = false;
-  GetNominalDynamicSettings(
-      profile_path(), true, &device_info_helper,
-      base::BindLambdaForTesting([&](base::Optional<QuotaSettings> settings) {
-        callback_executed = true;
-        EXPECT_GE(kMaxIncognitoPoolSize, settings->pool_size);
-      }));
-  task_environment_.RunUntilIdle();
-  EXPECT_TRUE(callback_executed);
-}
-
-TEST_F(QuotaSettingsIncognitoTest, IncognitoDynamicQuota_BelowStaticLimit) {
-  const int expected_device_info_calls = 2;
-  const int64_t physical_memory_amount = 1000 * kMBytes;
-  static_assert(
-      physical_memory_amount * kIncognitoPoolSizeRatio < kMaxIncognitoPoolSize,
-      "10% of physical_memory_amount should be less than "
-      "kMaxIncognitoPoolSize");
-
-  SetUpDeviceInfoHelper(expected_device_info_calls, physical_memory_amount);
-  EnableFeature();
-  GetAndTestExperimentalSettings(physical_memory_amount);
-  DisableFeature();
-  GetAndTestDefaultSettings();
-}
-
-TEST_F(QuotaSettingsIncognitoTest, IncognitoDynamicQuota_AtStaticLimit) {
-  const int expected_device_info_calls = 2;
-  const int64_t physical_memory_amount = 3300 * kMBytes;
-  static_assert(physical_memory_amount * 0.1 == kMaxIncognitoPoolSize,
-                "10% of physical_memory_amount should be equal to "
-                "kMaxIncognitoPoolSize");
-
-  SetUpDeviceInfoHelper(expected_device_info_calls, physical_memory_amount);
-  EnableFeature();
-  GetAndTestExperimentalSettings(physical_memory_amount);
-  DisableFeature();
-  GetAndTestDefaultSettings();
-}
-
-TEST_F(QuotaSettingsIncognitoTest, IncognitoDynamicQuota_AboveStaticLimit) {
+TEST_F(QuotaSettingsIncognitoTest, IncognitoDynamicQuota_LowPhysicalMemory) {
   const int expected_device_info_calls = 1;
-  const int64_t physical_memory_amount = 10000 * kMBytes;
-  static_assert(
-      physical_memory_amount * kIncognitoPoolSizeRatio > kMaxIncognitoPoolSize,
-      "10% of physical_memory_amount should "
-      "be greater than kMaxIncognitoPoolSize");
 
-  SetUpDeviceInfoHelper(expected_device_info_calls, physical_memory_amount);
-  EnableFeature();
-  GetAndTestExperimentalSettings(physical_memory_amount);
+  SetUpDeviceInfoHelper(expected_device_info_calls, kLowPhysicalMemory);
+  GetAndTestSettings(kLowPhysicalMemory);
+}
+
+TEST_F(QuotaSettingsIncognitoTest, IncognitoDynamicQuota_HighPhysicalMemory) {
+  const int expected_device_info_calls = 1;
+
+  SetUpDeviceInfoHelper(expected_device_info_calls, kHighPhysicalMemory);
+  GetAndTestSettings(kHighPhysicalMemory);
 }
 
 }  // namespace storage
diff --git a/testing/buildbot/chromium.chromiumos.json b/testing/buildbot/chromium.chromiumos.json
index afdf55d..da782686 100644
--- a/testing/buildbot/chromium.chromiumos.json
+++ b/testing/buildbot/chromium.chromiumos.json
@@ -4352,18 +4352,6 @@
           "can_use_on_swarming_builders": true,
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
         },
-        "test": "angle_unittests",
-        "test_id_prefix": "ninja://third_party/angle/src/tests:angle_unittests/"
-      },
-      {
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
         "test": "app_shell_unittests",
         "test_id_prefix": "ninja://extensions/shell:app_shell_unittests/"
       },
diff --git a/testing/buildbot/chromium.fyi.json b/testing/buildbot/chromium.fyi.json
index 0125212..e42ce48f 100644
--- a/testing/buildbot/chromium.fyi.json
+++ b/testing/buildbot/chromium.fyi.json
@@ -46450,24 +46450,6 @@
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
         },
-        "test": "angle_unittests",
-        "test_id_prefix": "ninja://third_party/angle/src/tests:angle_unittests/"
-      },
-      {
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "os": "Ubuntu-16.04",
-              "ssd": "0"
-            }
-          ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
         "test": "app_shell_unittests",
         "test_id_prefix": "ninja://extensions/shell:app_shell_unittests/"
       },
diff --git a/testing/buildbot/test_suite_exceptions.pyl b/testing/buildbot/test_suite_exceptions.pyl
index f81bbb8c..96a3fe9a8 100644
--- a/testing/buildbot/test_suite_exceptions.pyl
+++ b/testing/buildbot/test_suite_exceptions.pyl
@@ -96,6 +96,9 @@
     'remove_from': [
       # On Android, these are already run on the main waterfall.
       'Android FYI Release (Nexus 5X)',
+      # Does not currently work on Lacros configurations.
+      'linux-lacros-tester-rel',
+      'linux-lacros-tester-fyi-rel',
     ],
     'modifications': {
       'Linux ASan LSan Tests (1)': {
diff --git a/testing/buildbot/waterfalls.pyl b/testing/buildbot/waterfalls.pyl
index cc0335b..5fc132951 100644
--- a/testing/buildbot/waterfalls.pyl
+++ b/testing/buildbot/waterfalls.pyl
@@ -4972,6 +4972,7 @@
         },
       },
       'linux-swangle-tot-angle-x64' : {
+        'os_type': 'linux',
         'mixins': [
           'gpu-swarming-pool',
           'isolate_profile_data',
@@ -4985,6 +4986,7 @@
         },
       },
       'linux-swangle-tot-angle-x86' : {
+        'os_type': 'linux',
         'mixins': [
           'gpu-swarming-pool',
           'isolate_profile_data',
@@ -4998,6 +5000,7 @@
         },
       },
       'linux-swangle-tot-swiftshader-x64' : {
+        'os_type': 'linux',
         'mixins': [
           'gpu-swarming-pool',
           'isolate_profile_data',
@@ -5011,6 +5014,7 @@
         },
       },
       'linux-swangle-tot-swiftshader-x86' : {
+        'os_type': 'linux',
         'mixins': [
           'gpu-swarming-pool',
           'isolate_profile_data',
@@ -5024,6 +5028,7 @@
         },
       },
       'linux-swangle-x64' : {
+        'os_type': 'linux',
         'mixins': [
           'gpu-swarming-pool',
           'isolate_profile_data',
@@ -5037,6 +5042,7 @@
         },
       },
       'linux-swangle-x86' : {
+        'os_type': 'linux',
         'mixins': [
           'gpu-swarming-pool',
           'isolate_profile_data',
@@ -5073,6 +5079,7 @@
         },
       },
       'win-swangle-tot-angle-x64' : {
+        'os_type': 'win',
         'mixins': [
           'gpu-swarming-pool',
           'no_gpu',
@@ -5085,6 +5092,7 @@
         },
       },
       'win-swangle-tot-angle-x86' : {
+        'os_type': 'win',
         'mixins': [
           'gpu-swarming-pool',
           'no_gpu',
@@ -5097,6 +5105,7 @@
         },
       },
       'win-swangle-tot-swiftshader-x64' : {
+        'os_type': 'win',
         'mixins': [
           'gpu-swarming-pool',
           'no_gpu',
@@ -5109,6 +5118,7 @@
         },
       },
       'win-swangle-tot-swiftshader-x86' : {
+        'os_type': 'win',
         'mixins': [
           'gpu-swarming-pool',
           'no_gpu',
@@ -5121,6 +5131,7 @@
         },
       },
       'win-swangle-x64' : {
+        'os_type': 'win',
         'mixins': [
           'gpu-swarming-pool',
           'no_gpu',
@@ -5133,6 +5144,7 @@
         },
       },
       'win-swangle-x86' : {
+        'os_type': 'win',
         'mixins': [
           'gpu-swarming-pool',
           'no_gpu',
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json
index 6b86db6..a00f696 100644
--- a/testing/variations/fieldtrial_testing_config.json
+++ b/testing/variations/fieldtrial_testing_config.json
@@ -1248,25 +1248,6 @@
             ]
         }
     ],
-    "CacheStorageSequenceChromeOS": [
-        {
-            "platforms": [
-                "chromeos"
-            ],
-            "experiments": [
-                {
-                    "name": "Enabled6_v7",
-                    "params": {
-                        "min": "6"
-                    },
-                    "enable_features": [
-                        "BrowserThreadPoolAdjustment",
-                        "CacheStorageSequence"
-                    ]
-                }
-            ]
-        }
-    ],
     "CastMediaRouteProviderAndGlobalMediaControlsForCast": [
         {
             "platforms": [
@@ -3419,6 +3400,21 @@
             ]
         }
     ],
+    "IOSWebContentDropInteraction": [
+        {
+            "platforms": [
+                "ios"
+            ],
+            "experiments": [
+                {
+                    "name": "Enabled",
+                    "enable_features": [
+                        "AddWebContentDropInteraction"
+                    ]
+                }
+            ]
+        }
+    ],
     "Identifiability": [
         {
             "platforms": [
@@ -3499,30 +3495,6 @@
             ]
         }
     ],
-    "IncognitoDynamicQuota": [
-        {
-            "platforms": [
-                "android",
-                "android_weblayer",
-                "chromeos",
-                "linux",
-                "mac",
-                "windows"
-            ],
-            "experiments": [
-                {
-                    "name": "WideRange",
-                    "params": {
-                        "IncognitoQuotaRatioLowerBound": "0.1",
-                        "IncognitoQuotaRatioUpperBound": "0.2"
-                    },
-                    "enable_features": [
-                        "IncognitoDynamicQuota"
-                    ]
-                }
-            ]
-        }
-    ],
     "IncompatibleApplicationsWarning": [
         {
             "platforms": [
@@ -4929,27 +4901,6 @@
             ]
         }
     ],
-    "OptOutZeroTimeoutTimersFromThrottling": [
-        {
-            "platforms": [
-                "android",
-                "android_weblayer",
-                "android_webview",
-                "chromeos",
-                "linux",
-                "mac",
-                "windows"
-            ],
-            "experiments": [
-                {
-                    "name": "Enabled",
-                    "enable_features": [
-                        "OptOutZeroTimeoutTimersFromThrottling"
-                    ]
-                }
-            ]
-        }
-    ],
     "OptimizationHintsNoPersistentStore": [
         {
             "platforms": [
@@ -7205,25 +7156,6 @@
             ]
         }
     ],
-    "VideoSurfaceLayer": [
-        {
-            "platforms": [
-                "linux",
-                "mac",
-                "windows",
-                "chromeos",
-                "android"
-            ],
-            "experiments": [
-                {
-                    "name": "Enabled",
-                    "enable_features": [
-                        "UseSurfaceLayerForVideo"
-                    ]
-                }
-            ]
-        }
-    ],
     "VideoToolboxVp9Decoding": [
         {
             "platforms": [
@@ -7309,6 +7241,26 @@
             ]
         }
     ],
+    "VizGLFastSolidColorDraw": [
+        {
+            "platforms": [
+                "android",
+                "android_webview",
+                "chromeos",
+                "linux",
+                "mac",
+                "windows"
+            ],
+            "experiments": [
+                {
+                    "name": "VizGLFastSolidColorDraw",
+                    "enable_features": [
+                        "FastSolidColorDraw"
+                    ]
+                }
+            ]
+        }
+    ],
     "Vulkan": [
         {
             "platforms": [
@@ -7535,26 +7487,6 @@
             ]
         }
     ],
-    "WebRTC-EnableWebRtcEcdsa": [
-        {
-            "platforms": [
-                "android",
-                "android_weblayer",
-                "chromeos",
-                "linux",
-                "mac",
-                "windows"
-            ],
-            "experiments": [
-                {
-                    "name": "Enabled",
-                    "enable_features": [
-                        "WebRTC-EnableWebRtcEcdsa"
-                    ]
-                }
-            ]
-        }
-    ],
     "WebRTC-Pacer-BlockAudio": [
         {
             "platforms": [
diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/features.cc
index b4d8789..68eb8a92 100644
--- a/third_party/blink/common/features.cc
+++ b/third_party/blink/common/features.cc
@@ -223,7 +223,7 @@
 
 // When enabled, timers with timeout=0 are not throttled.
 const base::Feature kOptOutZeroTimeoutTimersFromThrottling{
-    "OptOutZeroTimeoutTimersFromThrottling", base::FEATURE_DISABLED_BY_DEFAULT};
+    "OptOutZeroTimeoutTimersFromThrottling", base::FEATURE_ENABLED_BY_DEFAULT};
 
 // When enabled, no throttling is applied to a page when it uses WebRTC.
 //
diff --git a/third_party/blink/common/fetch/fetch_api_request_body_mojom_traits.cc b/third_party/blink/common/fetch/fetch_api_request_body_mojom_traits.cc
index f08be6f..cdc06208 100644
--- a/third_party/blink/common/fetch/fetch_api_request_body_mojom_traits.cc
+++ b/third_party/blink/common/fetch/fetch_api_request_body_mojom_traits.cc
@@ -26,12 +26,11 @@
     blink::mojom::FetchAPIDataElementDataView,
     network::DataElement>::Read(blink::mojom::FetchAPIDataElementDataView data,
                                 network::DataElement* out) {
-  base::Optional<std::string> blob_uuid;
-  if (!data.ReadPath(&out->path_) || !data.ReadBlobUuid(&blob_uuid) ||
+  if (!data.ReadPath(&out->path_) ||
       !data.ReadExpectedModificationTime(&out->expected_modification_time_)) {
     return false;
   }
-  out->blob_uuid_ = std::move(blob_uuid).value_or(std::string());
+
   if (data.type() == network::mojom::DataElementType::kBytes) {
     if (!data.ReadBuf(&out->buf_))
       return false;
diff --git a/third_party/blink/public/common/fetch/fetch_api_request_body_mojom_traits.h b/third_party/blink/public/common/fetch/fetch_api_request_body_mojom_traits.h
index 4ad1306..667e994 100644
--- a/third_party/blink/public/common/fetch/fetch_api_request_body_mojom_traits.h
+++ b/third_party/blink/public/common/fetch/fetch_api_request_body_mojom_traits.h
@@ -61,9 +61,6 @@
   static const base::FilePath& path(const network::DataElement& element) {
     return element.path_;
   }
-  static const std::string& blob_uuid(const network::DataElement& element) {
-    return element.blob_uuid_;
-  }
   static mojo::PendingRemote<network::mojom::DataPipeGetter> data_pipe_getter(
       const network::DataElement& element) {
     if (element.type_ != network::mojom::DataElementType::kDataPipe)
diff --git a/third_party/blink/public/mojom/fetch/fetch_api_request.mojom b/third_party/blink/public/mojom/fetch/fetch_api_request.mojom
index 903ebd4..0de57a7 100644
--- a/third_party/blink/public/mojom/fetch/fetch_api_request.mojom
+++ b/third_party/blink/public/mojom/fetch/fetch_api_request.mojom
@@ -122,8 +122,6 @@
   array<uint8> buf;
   // For kFile
   mojo_base.mojom.FilePath path;
-  // For kBlob
-  string? blob_uuid;
   // For kDataPipe
   pending_remote<network.mojom.DataPipeGetter>? data_pipe_getter;
   // For kChunkedDataPipe
diff --git a/third_party/blink/public/platform/web_http_body.h b/third_party/blink/public/platform/web_http_body.h
index b2c0c35..2e45d18d 100644
--- a/third_party/blink/public/platform/web_http_body.h
+++ b/third_party/blink/public/platform/web_http_body.h
@@ -62,7 +62,6 @@
     int64_t file_start;
     int64_t file_length;  // -1 means to the end of the file.
     base::Optional<base::Time> modification_time;
-    WebString blob_uuid;
     uint64_t blob_length;
     CrossVariantMojoRemote<mojom::BlobInterfaceBase> optional_blob;
     CrossVariantMojoRemote<network::mojom::DataPipeGetterInterfaceBase>
diff --git a/third_party/blink/public/strings/translations/blink_strings_bs.xtb b/third_party/blink/public/strings/translations/blink_strings_bs.xtb
index db9eb47..5deedfc 100644
--- a/third_party/blink/public/strings/translations/blink_strings_bs.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_bs.xtb
@@ -289,7 +289,7 @@
 <translation id="9155987714137265666"><ph name="WEEK" />, počevši od <ph name="WEEK_START_DATE" /></translation>
 <translation id="916607977885256133">Slika u slici</translation>
 <translation id="9168329111483466115">fusnota</translation>
-<translation id="945780513535800434">Djelomično označen</translation>
+<translation id="945780513535800434">Djelimično označeno</translation>
 <translation id="954003015749068518">pokretanje načina rada slika u slici</translation>
 <translation id="966787709310836684">meni</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/third_party/blink/public/strings/translations/blink_strings_es-419.xtb b/third_party/blink/public/strings/translations/blink_strings_es-419.xtb
index 0a8e1fd..5571cb5c 100644
--- a/third_party/blink/public/strings/translations/blink_strings_es-419.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_es-419.xtb
@@ -289,6 +289,7 @@
 <translation id="9155987714137265666"><ph name="WEEK" />, a partir del <ph name="WEEK_START_DATE" /></translation>
 <translation id="916607977885256133">Pantalla en pantalla</translation>
 <translation id="9168329111483466115">nota a pie de página</translation>
+<translation id="945780513535800434">Se marcó parcialmente</translation>
 <translation id="954003015749068518">ingresar al modo de pantalla en pantalla</translation>
 <translation id="966787709310836684">menú</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/third_party/blink/public/strings/translations/blink_strings_es.xtb b/third_party/blink/public/strings/translations/blink_strings_es.xtb
index 77ef781..1cd79e9 100644
--- a/third_party/blink/public/strings/translations/blink_strings_es.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_es.xtb
@@ -289,6 +289,7 @@
 <translation id="9155987714137265666"><ph name="WEEK" />, a partir del <ph name="WEEK_START_DATE" /></translation>
 <translation id="916607977885256133">Imagen en imagen</translation>
 <translation id="9168329111483466115">nota al pie</translation>
+<translation id="945780513535800434">Seleccionado parcialmente</translation>
 <translation id="954003015749068518">abrir el modo imagen en imagen</translation>
 <translation id="966787709310836684">menú</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/third_party/blink/public/strings/translations/blink_strings_hi.xtb b/third_party/blink/public/strings/translations/blink_strings_hi.xtb
index 101c825d..2c65d8b 100644
--- a/third_party/blink/public/strings/translations/blink_strings_hi.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_hi.xtb
@@ -289,6 +289,7 @@
 <translation id="9155987714137265666"><ph name="WEEK" />, <ph name="WEEK_START_DATE" /> से प्रारंभ हो रहा है</translation>
 <translation id="916607977885256133">पिक्चर में पिक्चर</translation>
 <translation id="9168329111483466115">फ़ुटनोट</translation>
+<translation id="945780513535800434">एक विकल्प चुना गया</translation>
 <translation id="954003015749068518">पिक्चर में पिक्चर चालू करें</translation>
 <translation id="966787709310836684">मेन्यू</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/third_party/blink/public/strings/translations/blink_strings_hr.xtb b/third_party/blink/public/strings/translations/blink_strings_hr.xtb
index be15460b..3635686e 100644
--- a/third_party/blink/public/strings/translations/blink_strings_hr.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_hr.xtb
@@ -289,7 +289,7 @@
 <translation id="9155987714137265666"><ph name="WEEK" />, počevši od <ph name="WEEK_START_DATE" /></translation>
 <translation id="916607977885256133">Slika u slici</translation>
 <translation id="9168329111483466115">fusnota</translation>
-<translation id="945780513535800434">Djelomično označen</translation>
+<translation id="945780513535800434">Djelomično označeno</translation>
 <translation id="954003015749068518">pokretanje načina slika u slici</translation>
 <translation id="966787709310836684">izbornik</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/third_party/blink/public/strings/translations/blink_strings_hu.xtb b/third_party/blink/public/strings/translations/blink_strings_hu.xtb
index 5e881d8..c88d8b48 100644
--- a/third_party/blink/public/strings/translations/blink_strings_hu.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_hu.xtb
@@ -289,6 +289,7 @@
 <translation id="9155987714137265666"><ph name="WEEK" />. hét (<ph name="WEEK_START_DATE" />-i dátummal kezdődik)</translation>
 <translation id="916607977885256133">Kép a képben</translation>
 <translation id="9168329111483466115">lábjegyzet</translation>
+<translation id="945780513535800434">Részben ellenőrzött</translation>
 <translation id="954003015749068518">belépés a kép a képben funkcióba</translation>
 <translation id="966787709310836684">menü</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/third_party/blink/public/strings/translations/blink_strings_it.xtb b/third_party/blink/public/strings/translations/blink_strings_it.xtb
index af6e49d..31b714f 100644
--- a/third_party/blink/public/strings/translations/blink_strings_it.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_it.xtb
@@ -289,6 +289,7 @@
 <translation id="9155987714137265666"><ph name="WEEK" />, a partire dal giorno <ph name="WEEK_START_DATE" /></translation>
 <translation id="916607977885256133">Picture in picture</translation>
 <translation id="9168329111483466115">piè di pagina</translation>
+<translation id="945780513535800434">Parzialmente selezionato</translation>
 <translation id="954003015749068518">attiva picture in picture</translation>
 <translation id="966787709310836684">menu</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/third_party/blink/public/strings/translations/blink_strings_ml.xtb b/third_party/blink/public/strings/translations/blink_strings_ml.xtb
index 93e400c..800b8341 100644
--- a/third_party/blink/public/strings/translations/blink_strings_ml.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_ml.xtb
@@ -289,6 +289,7 @@
 <translation id="9155987714137265666"><ph name="WEEK" />, <ph name="WEEK_START_DATE" />-ന് ആരംഭിക്കുന്നു</translation>
 <translation id="916607977885256133">ചിത്രത്തിനുള്ളിൽ ചിത്രം</translation>
 <translation id="9168329111483466115">അടിക്കുറിപ്പ്</translation>
+<translation id="945780513535800434">ഭാഗികമായി ചെക്ക് മാർക്കിട്ടു</translation>
 <translation id="954003015749068518">ചിത്രത്തിനുള്ളിലെ ചിത്രത്തിലേക്ക് പ്രവേശിക്കുക</translation>
 <translation id="966787709310836684">മെനു</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/third_party/blink/public/strings/translations/blink_strings_no.xtb b/third_party/blink/public/strings/translations/blink_strings_no.xtb
index 96a4f83..7dea0b1 100644
--- a/third_party/blink/public/strings/translations/blink_strings_no.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_no.xtb
@@ -289,6 +289,7 @@
 <translation id="9155987714137265666"><ph name="WEEK" />, med start <ph name="WEEK_START_DATE" /></translation>
 <translation id="916607977885256133">Bilde i bilde</translation>
 <translation id="9168329111483466115">fotnote</translation>
+<translation id="945780513535800434">delvis avmerket</translation>
 <translation id="954003015749068518">start bilde-i-bilde</translation>
 <translation id="966787709310836684">meny</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/third_party/blink/public/strings/translations/blink_strings_pl.xtb b/third_party/blink/public/strings/translations/blink_strings_pl.xtb
index de139bf8..043c750 100644
--- a/third_party/blink/public/strings/translations/blink_strings_pl.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_pl.xtb
@@ -289,6 +289,7 @@
 <translation id="9155987714137265666"><ph name="WEEK" />, początek <ph name="WEEK_START_DATE" /></translation>
 <translation id="916607977885256133">Obraz w obrazie</translation>
 <translation id="9168329111483466115">przypis</translation>
+<translation id="945780513535800434">Częściowo zaznaczono</translation>
 <translation id="954003015749068518">włącz tryb obrazu w obrazie</translation>
 <translation id="966787709310836684">menu</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/third_party/blink/public/strings/translations/blink_strings_pt-BR.xtb b/third_party/blink/public/strings/translations/blink_strings_pt-BR.xtb
index 05172bf..4ea563e 100644
--- a/third_party/blink/public/strings/translations/blink_strings_pt-BR.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_pt-BR.xtb
@@ -289,6 +289,7 @@
 <translation id="9155987714137265666"><ph name="WEEK" />, que começa em <ph name="WEEK_START_DATE" /></translation>
 <translation id="916607977885256133">Picture-in-picture</translation>
 <translation id="9168329111483466115">nota de rodapé</translation>
+<translation id="945780513535800434">Parcialmente marcada</translation>
 <translation id="954003015749068518">entrar no modo picture-in-picture</translation>
 <translation id="966787709310836684">menu</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/third_party/blink/public/strings/translations/blink_strings_pt-PT.xtb b/third_party/blink/public/strings/translations/blink_strings_pt-PT.xtb
index 1b1e211..152b2770 100644
--- a/third_party/blink/public/strings/translations/blink_strings_pt-PT.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_pt-PT.xtb
@@ -289,6 +289,7 @@
 <translation id="9155987714137265666"><ph name="WEEK" />, a partir de <ph name="WEEK_START_DATE" /></translation>
 <translation id="916607977885256133">Ecrã no ecrã</translation>
 <translation id="9168329111483466115">nota de rodapé</translation>
+<translation id="945780513535800434">Parcialmente selecionada</translation>
 <translation id="954003015749068518">entrar no modo ecrã no ecrã</translation>
 <translation id="966787709310836684">menu</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/third_party/blink/public/strings/translations/blink_strings_sl.xtb b/third_party/blink/public/strings/translations/blink_strings_sl.xtb
index ec2eaca..5f4f8b59 100644
--- a/third_party/blink/public/strings/translations/blink_strings_sl.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_sl.xtb
@@ -289,6 +289,7 @@
 <translation id="9155987714137265666"><ph name="WEEK" />, začne se <ph name="WEEK_START_DATE" /></translation>
 <translation id="916607977885256133">Slika v sliki</translation>
 <translation id="9168329111483466115">sprotna opomba</translation>
+<translation id="945780513535800434">Delno označeno</translation>
 <translation id="954003015749068518">odpiranje načina slike v sliki</translation>
 <translation id="966787709310836684">meni</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/third_party/blink/public/strings/translations/blink_strings_sr-Latn.xtb b/third_party/blink/public/strings/translations/blink_strings_sr-Latn.xtb
index 7fa012c..25be64f 100644
--- a/third_party/blink/public/strings/translations/blink_strings_sr-Latn.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_sr-Latn.xtb
@@ -289,6 +289,7 @@
 <translation id="9155987714137265666"><ph name="WEEK" />, od <ph name="WEEK_START_DATE" /></translation>
 <translation id="916607977885256133">Slika u slici</translation>
 <translation id="9168329111483466115">fusnota</translation>
+<translation id="945780513535800434">Delimično označeno</translation>
 <translation id="954003015749068518">uđi u režim slike u slici</translation>
 <translation id="966787709310836684">meni</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/third_party/blink/public/strings/translations/blink_strings_sr.xtb b/third_party/blink/public/strings/translations/blink_strings_sr.xtb
index 53231a8..c75f6a4 100644
--- a/third_party/blink/public/strings/translations/blink_strings_sr.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_sr.xtb
@@ -289,6 +289,7 @@
 <translation id="9155987714137265666"><ph name="WEEK" />, од <ph name="WEEK_START_DATE" /></translation>
 <translation id="916607977885256133">Слика у слици</translation>
 <translation id="9168329111483466115">фуснота</translation>
+<translation id="945780513535800434">Делимично означено</translation>
 <translation id="954003015749068518">уђи у режим слике у слици</translation>
 <translation id="966787709310836684">мени</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/third_party/blink/public/strings/translations/blink_strings_sv.xtb b/third_party/blink/public/strings/translations/blink_strings_sv.xtb
index 8594e591..036324c3 100644
--- a/third_party/blink/public/strings/translations/blink_strings_sv.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_sv.xtb
@@ -289,6 +289,7 @@
 <translation id="9155987714137265666"><ph name="WEEK" /> som börjar den <ph name="WEEK_START_DATE" /></translation>
 <translation id="916607977885256133">Bild-i-bild</translation>
 <translation id="9168329111483466115">fotnot</translation>
+<translation id="945780513535800434">Delvis markerad</translation>
 <translation id="954003015749068518">öppna bild-i-bild-läge</translation>
 <translation id="966787709310836684">meny</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/third_party/blink/public/strings/translations/blink_strings_te.xtb b/third_party/blink/public/strings/translations/blink_strings_te.xtb
index 6de43c7..751e16b8 100644
--- a/third_party/blink/public/strings/translations/blink_strings_te.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_te.xtb
@@ -289,6 +289,7 @@
 <translation id="9155987714137265666"><ph name="WEEK" />, <ph name="WEEK_START_DATE" /> నుండి ప్రారంభమవుతుంది</translation>
 <translation id="916607977885256133">చిత్రంలో చిత్రం</translation>
 <translation id="9168329111483466115">ఫుట్‌నోట్</translation>
+<translation id="945780513535800434">పాక్షికంగా టిక్ గుర్తు పెట్టబడింది</translation>
 <translation id="954003015749068518">చిత్రంలో చిత్రం మోడ్‌లోకి ప్రవేశిస్తుంది</translation>
 <translation id="966787709310836684">మెను</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/third_party/blink/public/strings/translations/blink_strings_th.xtb b/third_party/blink/public/strings/translations/blink_strings_th.xtb
index 81f267c..721e194 100644
--- a/third_party/blink/public/strings/translations/blink_strings_th.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_th.xtb
@@ -289,6 +289,7 @@
 <translation id="9155987714137265666"><ph name="WEEK" /> เริ่มวันที่ <ph name="WEEK_START_DATE" /></translation>
 <translation id="916607977885256133">การแสดงภาพซ้อนภาพ</translation>
 <translation id="9168329111483466115">เชิงอรรถ</translation>
+<translation id="945780513535800434">เลือกบางรายการ</translation>
 <translation id="954003015749068518">เข้าสู่การแสดงภาพซ้อนภาพ</translation>
 <translation id="966787709310836684">เมนู</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/third_party/blink/renderer/core/dom/document.idl b/third_party/blink/renderer/core/dom/document.idl
index e20a55b..c65d96e 100644
--- a/third_party/blink/renderer/core/dom/document.idl
+++ b/third_party/blink/renderer/core/dom/document.idl
@@ -165,8 +165,6 @@
 
     // Custom Elements
     // https://w3c.github.io/webcomponents/spec/custom/#extensions-to-document-interface-to-register
-    // FIXME: The registerElement return type should be Function.
-    [RuntimeEnabled=CustomElementsV0, CallWith=ScriptState, CustomElementCallbacks, RaisesException, DeprecateAs=DocumentRegisterElement] any registerElement(DOMString type, optional ElementRegistrationOptions options = {});
     // https://w3c.github.io/webcomponents/spec/custom/#extensions-to-document-interface-to-instantiate
     [CustomElementCallbacks, PerWorldBindings, RaisesException, ImplementedAs=CreateElementForBinding] Element createElement(DOMString localName, (DOMString or ElementCreationOptions) options);
     [CustomElementCallbacks, RaisesException] Element createElementNS(DOMString? namespaceURI, DOMString qualifiedName, (DOMString or ElementCreationOptions) options);
diff --git a/third_party/blink/renderer/core/dom/element.idl b/third_party/blink/renderer/core/dom/element.idl
index b83ed0e..c1a02c0 100644
--- a/third_party/blink/renderer/core/dom/element.idl
+++ b/third_party/blink/renderer/core/dom/element.idl
@@ -133,8 +133,6 @@
 
     // Non-standard API
     [MeasureAs=ElementScrollIntoViewIfNeeded] void scrollIntoViewIfNeeded(optional boolean centerIfNeeded);
-    [RuntimeEnabled=ShadowDOMV0, RaisesException, DeprecateAs=ElementCreateShadowRoot] ShadowRoot createShadowRoot();
-    [RuntimeEnabled=ShadowDOMV0] NodeList getDestinationInsertionPoints();
 
     // Experimental accessibility API
     [RuntimeEnabled=ComputedAccessibilityInfo] readonly attribute DOMString? computedRole;
diff --git a/third_party/blink/renderer/core/dom/text.idl b/third_party/blink/renderer/core/dom/text.idl
index 7a10043..117543e 100644
--- a/third_party/blink/renderer/core/dom/text.idl
+++ b/third_party/blink/renderer/core/dom/text.idl
@@ -29,7 +29,4 @@
     // Mixin Slotable
     // https://dom.spec.whatwg.org/#mixin-slotable
     [ImplementedAs=assignedSlotForBinding] readonly attribute HTMLSlotElement? assignedSlot;
-
-    // Non-standard API:
-    [RuntimeEnabled=ShadowDOMV0] NodeList getDestinationInsertionPoints();
 };
diff --git a/third_party/blink/renderer/core/dom/text_link_colors.cc b/third_party/blink/renderer/core/dom/text_link_colors.cc
index 2f7e10a7..aa3bf1ac 100644
--- a/third_party/blink/renderer/core/dom/text_link_colors.cc
+++ b/third_party/blink/renderer/core/dom/text_link_colors.cc
@@ -38,22 +38,69 @@
 
 namespace blink {
 
+constexpr Color kDefaultLinkColorLight = Color::CreateUnchecked(0, 0, 238);
+constexpr Color kDefaultLinkColorDark = Color::CreateUnchecked(158, 158, 255);
+constexpr Color kDefaultVisitedLinkColorLight =
+    Color::CreateUnchecked(85, 26, 139);
+constexpr Color kDefaultVisitedLinkColorDark =
+    Color::CreateUnchecked(208, 173, 240);
+constexpr Color kDefaultActiveLinkColorLight =
+    Color::CreateUnchecked(255, 0, 0);
+constexpr Color kDefaultActiveLinkColorDark =
+    Color::CreateUnchecked(255, 158, 158);
+
 TextLinkColors::TextLinkColors() : text_color_(Color::kBlack) {
   ResetLinkColor();
   ResetVisitedLinkColor();
   ResetActiveLinkColor();
 }
 
-void TextLinkColors::ResetLinkColor() {
-  link_color_ = Color(0, 0, 238);
+void TextLinkColors::SetTextColor(const Color& color) {
+  text_color_ = color;
+  has_custom_text_color_ = true;
 }
 
-void TextLinkColors::ResetVisitedLinkColor() {
-  visited_link_color_ = Color(85, 26, 139);
+Color TextLinkColors::TextColor(ColorScheme color_scheme) const {
+  return has_custom_text_color_
+             ? text_color_
+             : color_scheme == ColorScheme::kLight ? Color::kBlack
+                                                   : Color::kWhite;
 }
 
-void TextLinkColors::ResetActiveLinkColor() {
-  active_link_color_ = Color(255, 0, 0);
+void TextLinkColors::SetLinkColor(const Color& color) {
+  link_color_ = color;
+  has_custom_link_color_ = true;
+}
+
+const Color& TextLinkColors::LinkColor(ColorScheme color_scheme) const {
+  return has_custom_link_color_
+             ? link_color_
+             : color_scheme == ColorScheme::kLight ? kDefaultLinkColorLight
+                                                   : kDefaultLinkColorDark;
+}
+
+void TextLinkColors::SetVisitedLinkColor(const Color& color) {
+  visited_link_color_ = color;
+  has_custom_visited_link_color_ = true;
+}
+
+const Color& TextLinkColors::VisitedLinkColor(ColorScheme color_scheme) const {
+  return has_custom_visited_link_color_ ? visited_link_color_
+                                        : color_scheme == ColorScheme::kLight
+                                              ? kDefaultVisitedLinkColorLight
+                                              : kDefaultVisitedLinkColorDark;
+}
+
+void TextLinkColors::SetActiveLinkColor(const Color& color) {
+  active_link_color_ = color;
+  has_custom_active_link_color_ = true;
+}
+
+const Color& TextLinkColors::ActiveLinkColor(ColorScheme color_scheme) const {
+  return has_custom_active_link_color_ ? active_link_color_
+                                       : color_scheme == ColorScheme::kLight
+                                             ? kDefaultActiveLinkColorLight
+                                             : kDefaultActiveLinkColorDark;
 }
 
 Color TextLinkColors::ColorFromCSSValue(const CSSValue& value,
@@ -76,11 +123,12 @@
       NOTREACHED();
       return Color();
     case CSSValueID::kInternalQuirkInherit:
-      return TextColor();
+      return TextColor(color_scheme);
     case CSSValueID::kWebkitLink:
-      return for_visited_link ? VisitedLinkColor() : LinkColor();
+      return for_visited_link ? VisitedLinkColor(color_scheme)
+                              : LinkColor(color_scheme);
     case CSSValueID::kWebkitActivelink:
-      return ActiveLinkColor();
+      return ActiveLinkColor(color_scheme);
     case CSSValueID::kWebkitFocusRingColor:
       return LayoutTheme::GetTheme().FocusRingColor();
     case CSSValueID::kCurrentcolor:
diff --git a/third_party/blink/renderer/core/dom/text_link_colors.h b/third_party/blink/renderer/core/dom/text_link_colors.h
index 755b0a58..14efed8a 100644
--- a/third_party/blink/renderer/core/dom/text_link_colors.h
+++ b/third_party/blink/renderer/core/dom/text_link_colors.h
@@ -46,18 +46,20 @@
   TextLinkColors(const TextLinkColors&) = delete;
   TextLinkColors& operator=(const TextLinkColors&) = delete;
 
-  void SetTextColor(const Color& color) { text_color_ = color; }
-  Color TextColor() const { return text_color_; }
+  void SetTextColor(const Color& color);
+  Color TextColor(ColorScheme color_scheme = ColorScheme::kLight) const;
 
-  const Color& LinkColor() const { return link_color_; }
-  const Color& VisitedLinkColor() const { return visited_link_color_; }
-  const Color& ActiveLinkColor() const { return active_link_color_; }
-  void SetLinkColor(const Color& color) { link_color_ = color; }
-  void SetVisitedLinkColor(const Color& color) { visited_link_color_ = color; }
-  void SetActiveLinkColor(const Color& color) { active_link_color_ = color; }
-  void ResetLinkColor();
-  void ResetVisitedLinkColor();
-  void ResetActiveLinkColor();
+  const Color& LinkColor(ColorScheme color_scheme = ColorScheme::kLight) const;
+  const Color& VisitedLinkColor(
+      ColorScheme color_scheme = ColorScheme::kLight) const;
+  const Color& ActiveLinkColor(
+      ColorScheme color_scheme = ColorScheme::kLight) const;
+  void SetLinkColor(const Color& color);
+  void SetVisitedLinkColor(const Color& color);
+  void SetActiveLinkColor(const Color& color);
+  void ResetLinkColor() { has_custom_link_color_ = false; }
+  void ResetVisitedLinkColor() { has_custom_visited_link_color_ = false; }
+  void ResetActiveLinkColor() { has_custom_active_link_color_ = false; }
   Color ColorFromCSSValue(const CSSValue&,
                           Color current_color,
                           ColorScheme color_scheme,
@@ -68,6 +70,11 @@
   Color link_color_;
   Color visited_link_color_;
   Color active_link_color_;
+
+  bool has_custom_text_color_{false};
+  bool has_custom_link_color_{false};
+  bool has_custom_visited_link_color_{false};
+  bool has_custom_active_link_color_{false};
 };
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/html/forms/resources/color_picker.css b/third_party/blink/renderer/core/html/forms/resources/color_picker.css
index f34699c..cb08889fc 100644
--- a/third_party/blink/renderer/core/html/forms/resources/color_picker.css
+++ b/third_party/blink/renderer/core/html/forms/resources/color_picker.css
@@ -220,6 +220,15 @@
     border: 1px solid #858585;
   }
 
+  eye-dropper {
+    background-image: -webkit-image-set(url(eye_dropper_icon_dark.svg) 1x);
+  }
+
+  eye-dropper.selected {
+    background-color: #454545;
+  }
+
+  eye-dropper:not(.selected):hover,
   format-toggler:hover {
     background-color: #545454;
   }
diff --git a/third_party/blink/renderer/core/html/forms/resources/eye_dropper_icon_dark.svg b/third_party/blink/renderer/core/html/forms/resources/eye_dropper_icon_dark.svg
new file mode 100644
index 0000000..32a18760
--- /dev/null
+++ b/third_party/blink/renderer/core/html/forms/resources/eye_dropper_icon_dark.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="20" viewBox="0 0 24 24" width="20"><path d="M0 0h24v24H0z" fill="none"/><path fill="#FFFFFF" d="M20.71 5.63l-2.34-2.34c-.39-.39-1.02-.39-1.41 0l-3.12 3.12-1.93-1.91-1.41 1.41 1.42 1.42L3 16.25V21h4.75l8.92-8.92 1.42 1.42 1.41-1.41-1.92-1.92 3.12-3.12c.4-.4.4-1.03.01-1.42zM6.92 19L5 17.08l8.06-8.06 1.92 1.92L6.92 19z"/></svg>
\ No newline at end of file
diff --git a/third_party/blink/renderer/core/html/html_link_element.idl b/third_party/blink/renderer/core/html/html_link_element.idl
index 776b99b..80a95e7 100644
--- a/third_party/blink/renderer/core/html/html_link_element.idl
+++ b/third_party/blink/renderer/core/html/html_link_element.idl
@@ -51,10 +51,6 @@
     // https://drafts.csswg.org/cssom/#the-linkstyle-interface
     readonly attribute StyleSheet? sheet;
 
-    // HTML Imports
-    // https://w3c.github.io/webcomponents/spec/imports/#interface-import
-    [RuntimeEnabled=HTMLImports] readonly attribute Document? import;
-
     // Subresource Integrity
     // https://w3c.github.io/webappsec-subresource-integrity/#HTMLLinkElement
     [Reflect] attribute DOMString integrity;
diff --git a/third_party/blink/renderer/core/layout/ng/ng_block_break_token.cc b/third_party/blink/renderer/core/layout/ng/ng_block_break_token.cc
index 5612a5f..bc055b11 100644
--- a/third_party/blink/renderer/core/layout/ng/ng_block_break_token.cc
+++ b/third_party/blink/renderer/core/layout/ng/ng_block_break_token.cc
@@ -42,6 +42,7 @@
       num_children_(builder.child_break_tokens_.size()) {
   break_appeal_ = builder.break_appeal_;
   has_seen_all_children_ = builder.has_seen_all_children_;
+  is_caused_by_column_spanner_ = builder.FoundColumnSpanner();
   is_at_block_end_ = builder.is_at_block_end_;
   for (wtf_size_t i = 0; i < builder.child_break_tokens_.size(); ++i) {
     child_break_tokens_[i] = builder.child_break_tokens_[i].get();
diff --git a/third_party/blink/renderer/core/layout/ng/ng_block_break_token.h b/third_party/blink/renderer/core/layout/ng/ng_block_break_token.h
index 8d4edad..3c2ad95 100644
--- a/third_party/blink/renderer/core/layout/ng/ng_block_break_token.h
+++ b/third_party/blink/renderer/core/layout/ng/ng_block_break_token.h
@@ -72,6 +72,8 @@
 
   bool IsForcedBreak() const { return is_forced_break_; }
 
+  bool IsCausedByColumnSpanner() const { return is_caused_by_column_spanner_; }
+
   // Return true if all children have been "seen". When we have reached this
   // point, and resume layout in a fragmentainer, we should only process child
   // break tokens, if any, and not attempt to start laying out nodes that don't
diff --git a/third_party/blink/renderer/core/layout/ng/ng_block_layout_algorithm.cc b/third_party/blink/renderer/core/layout/ng/ng_block_layout_algorithm.cc
index 9bbe37fb..b4036757 100644
--- a/third_party/blink/renderer/core/layout/ng/ng_block_layout_algorithm.cc
+++ b/third_party/blink/renderer/core/layout/ng/ng_block_layout_algorithm.cc
@@ -2489,7 +2489,7 @@
           container_builder_.AdjoiningObjectTypes());
     }
     builder.SetLinesUntilClamp(lines_until_clamp_);
-  } else if (child_data.is_resuming_after_break) {
+  } else if (child_data.allow_discard_start_margin) {
     // If the child is being resumed after a break, margins inside the child may
     // be adjoining with the fragmentainer boundary, regardless of whether the
     // child establishes a new formatting context or not.
diff --git a/third_party/blink/renderer/core/layout/ng/ng_block_layout_algorithm.h b/third_party/blink/renderer/core/layout/ng/ng_block_layout_algorithm.h
index 57be887d..29020eaf 100644
--- a/third_party/blink/renderer/core/layout/ng/ng_block_layout_algorithm.h
+++ b/third_party/blink/renderer/core/layout/ng/ng_block_layout_algorithm.h
@@ -45,7 +45,7 @@
   NGMarginStrut margin_strut;
   NGBoxStrut margins;
   bool margins_fully_resolved;
-  bool is_resuming_after_break;
+  bool allow_discard_start_margin;
 };
 
 // A class for general block layout (e.g. a <div> with no special style).
diff --git a/third_party/blink/renderer/core/layout/ng/ng_break_token.h b/third_party/blink/renderer/core/layout/ng/ng_break_token.h
index 5b927db4..a6e538ae 100644
--- a/third_party/blink/renderer/core/layout/ng/ng_break_token.h
+++ b/third_party/blink/renderer/core/layout/ng/ng_break_token.h
@@ -78,6 +78,7 @@
         flags_(0),
         is_break_before_(false),
         is_forced_break_(false),
+        is_caused_by_column_spanner_(false),
         is_at_block_end_(false),
         break_appeal_(kBreakAppealPerfect),
         has_seen_all_children_(false) {
@@ -105,6 +106,8 @@
 
   unsigned is_forced_break_ : 1;
 
+  unsigned is_caused_by_column_spanner_ : 1;
+
   // Set when layout is past the block-end border edge. If we break when we're
   // in this state, it means that something is overflowing, and thus establishes
   // a parallel flow.
diff --git a/third_party/blink/renderer/core/layout/ng/ng_column_layout_algorithm.cc b/third_party/blink/renderer/core/layout/ng/ng_column_layout_algorithm.cc
index 02d7c82..103187fb 100644
--- a/third_party/blink/renderer/core/layout/ng/ng_column_layout_algorithm.cc
+++ b/third_party/blink/renderer/core/layout/ng/ng_column_layout_algorithm.cc
@@ -6,6 +6,7 @@
 
 #include <algorithm>
 #include "third_party/blink/renderer/core/layout/geometry/logical_size.h"
+#include "third_party/blink/renderer/core/layout/geometry/writing_mode_converter.h"
 #include "third_party/blink/renderer/core/layout/ng/geometry/ng_fragment_geometry.h"
 #include "third_party/blink/renderer/core/layout/ng/geometry/ng_margin_strut.h"
 #include "third_party/blink/renderer/core/layout/ng/ng_block_layout_algorithm.h"
@@ -23,28 +24,22 @@
 
 LayoutUnit CalculateColumnContentBlockSize(
     const NGPhysicalContainerFragment& fragment,
-    bool multicol_is_horizontal_writing_mode) {
+    WritingDirectionMode writing_direction) {
+  WritingModeConverter converter(writing_direction, fragment.Size());
   // TODO(mstensho): Once LayoutNG is capable of calculating overflow on its
   // own, we should probably just move over to relying on that machinery,
   // instead of doing all this on our own.
   LayoutUnit total_size;
   for (const auto& child : fragment.Children()) {
-    LayoutUnit size;
-    LayoutUnit offset;
-    if (multicol_is_horizontal_writing_mode) {
-      offset = child.Offset().top;
-      size = child->Size().height;
-    } else {
-      offset = child.Offset().left;
-      size = child->Size().width;
-    }
+    LayoutUnit size = converter.ToLogical(child->Size()).block_size;
+    LayoutUnit offset =
+        converter.ToLogical(child.offset, child->Size()).block_offset;
     // TODO(mstensho): Need to detect whether we're actually clipping in the
     // block direction. The combination of overflow-x:clip and
     // overflow-y:visible should enter children here.
     if (child->IsContainer() && !child->HasNonVisibleOverflow()) {
       LayoutUnit children_size = CalculateColumnContentBlockSize(
-          To<NGPhysicalContainerFragment>(*child),
-          multicol_is_horizontal_writing_mode);
+          To<NGPhysicalContainerFragment>(*child), writing_direction);
       if (size < children_size)
         size = children_size;
     }
@@ -566,9 +561,8 @@
     scoped_refptr<const NGBlockBreakToken> column_break_token =
         next_column_token;
 
-    // This is the first column in this fragmentation context if there are no
-    // preceding columns in this row and there are also no preceding rows.
-    bool is_first_fragmentainer = !column_break_token && !BreakToken();
+    bool allow_discard_start_margin =
+        column_break_token && !column_break_token->IsCausedByColumnSpanner();
 
     LayoutUnit column_inline_offset(BorderScrollbarPadding().inline_start);
     int actual_column_count = 0;
@@ -584,7 +578,7 @@
       // Lay out one column. Each column will become a fragment.
       NGConstraintSpace child_space = CreateConstraintSpaceForColumns(
           ConstraintSpace(), column_size, ColumnPercentageResolutionSize(),
-          is_first_fragmentainer, balance_columns);
+          allow_discard_start_margin, balance_columns);
 
       NGFragmentGeometry fragment_geometry =
           CalculateInitialFragmentGeometry(child_space, Node());
@@ -637,7 +631,7 @@
         break;
       }
 
-      is_first_fragmentainer = false;
+      allow_discard_start_margin = true;
     } while (column_break_token);
 
     // TODO(mstensho): Nested column balancing.
@@ -928,8 +922,8 @@
 
     const NGPhysicalBoxFragment& fragment =
         To<NGPhysicalBoxFragment>(result->PhysicalFragment());
-    LayoutUnit column_block_size = CalculateColumnContentBlockSize(
-        fragment, IsHorizontalWritingMode(space.GetWritingMode()));
+    LayoutUnit column_block_size =
+        CalculateColumnContentBlockSize(fragment, space.GetWritingDirection());
     content_runs.emplace_back(column_block_size);
 
     tallest_unbreakable_block_size = std::max(
diff --git a/third_party/blink/renderer/core/layout/ng/ng_fragmentation_utils.cc b/third_party/blink/renderer/core/layout/ng/ng_fragmentation_utils.cc
index 9b50b962..d855d47 100644
--- a/third_party/blink/renderer/core/layout/ng/ng_fragmentation_utils.cc
+++ b/third_party/blink/renderer/core/layout/ng/ng_fragmentation_utils.cc
@@ -735,7 +735,7 @@
     const NGConstraintSpace& parent_space,
     LogicalSize column_size,
     LogicalSize percentage_resolution_size,
-    bool is_first_fragmentainer,
+    bool allow_discard_start_margin,
     bool balance_columns) {
   NGConstraintSpaceBuilder space_builder(
       parent_space, parent_space.GetWritingMode(), /* is_new_fc */ true);
@@ -754,11 +754,12 @@
   space_builder.SetIsInColumnBfc();
   if (balance_columns)
     space_builder.SetIsInsideBalancedColumns();
-  if (!is_first_fragmentainer) {
-    // Margins at fragmentainer boundaries should be eaten and truncated to
-    // zero. Note that this doesn't apply to margins at forced breaks, but we'll
-    // deal with those when we get to them. Set up a margin strut that eats all
-    // leading adjacent margins.
+  if (allow_discard_start_margin) {
+    // Unless it's the first column in the multicol container, or the first
+    // column after a spanner, margins at fragmentainer boundaries should be
+    // eaten and truncated to zero. Note that this doesn't apply to margins at
+    // forced breaks, but we'll deal with those when we get to them. Set up a
+    // margin strut that eats all leading adjacent margins.
     space_builder.SetDiscardingMarginStrut();
   }
 
diff --git a/third_party/blink/renderer/core/layout/ng/ng_fragmentation_utils.h b/third_party/blink/renderer/core/layout/ng/ng_fragmentation_utils.h
index 4dfd501..0d42986 100644
--- a/third_party/blink/renderer/core/layout/ng/ng_fragmentation_utils.h
+++ b/third_party/blink/renderer/core/layout/ng/ng_fragmentation_utils.h
@@ -264,7 +264,7 @@
     const NGConstraintSpace& parent_space,
     LogicalSize column_size,
     LogicalSize percentage_resolution_size,
-    bool is_first_fragmentainer,
+    bool allow_discard_start_margin,
     bool balance_columns);
 
 // Return the adjusted child margin to be applied at the end of a fragment.
diff --git a/third_party/blink/renderer/core/layout/ng/ng_out_of_flow_layout_part.cc b/third_party/blink/renderer/core/layout/ng/ng_out_of_flow_layout_part.cc
index b7c1f7df..429e2b6 100644
--- a/third_party/blink/renderer/core/layout/ng/ng_out_of_flow_layout_part.cc
+++ b/third_party/blink/renderer/core/layout/ng/ng_out_of_flow_layout_part.cc
@@ -1172,7 +1172,16 @@
 
   wtf_size_t num_children = container_builder_->Children().size();
   bool is_new_fragment = index >= num_children;
-  bool is_first_fragmentainer = index == 0;
+  // Allow margins to be discarded if this is not the first column in the
+  // multicol container, and we're not right after a spanner.
+  //
+  // TODO(layout-dev): This check is incorrect in nested multicol. If the
+  // previous outer fragmentainer ended with regular column content (i.e. not a
+  // spanner), and this is the first column in the next outer fragmentainer, we
+  // should still discard margins, since there is no explicit break involved.
+  bool allow_discard_start_margin =
+      is_new_fragment || (index > 0 && container_builder_->Children()[index - 1]
+                                           .fragment->IsFragmentainerBox());
 
   // If we are a new fragment, find a non-spanner fragmentainer to base our
   // constraint space off of.
@@ -1213,7 +1222,7 @@
   NGConstraintSpace fragmentainer_constraint_space =
       CreateConstraintSpaceForColumns(*container_builder_->ConstraintSpace(),
                                       column_size, percentage_resolution_size,
-                                      is_first_fragmentainer,
+                                      allow_discard_start_margin,
                                       /* balance_columns */ false);
 
   return fragmentainer_constraint_space_map_
diff --git a/third_party/blink/renderer/core/layout/svg/transform_helper.cc b/third_party/blink/renderer/core/layout/svg/transform_helper.cc
index 8e8e374..473eb2a 100644
--- a/third_party/blink/renderer/core/layout/svg/transform_helper.cc
+++ b/third_party/blink/renderer/core/layout/svg/transform_helper.cc
@@ -61,7 +61,8 @@
 }
 
 AffineTransform TransformHelper::ComputeTransform(
-    const LayoutObject& layout_object) {
+    const LayoutObject& layout_object,
+    ComputedStyle::ApplyTransformOrigin apply_transform_origin) {
   const ComputedStyle& style = layout_object.StyleRef();
   if (DependsOnReferenceBox(style)) {
     UseCounter::Count(layout_object.GetDocument(),
@@ -81,8 +82,7 @@
   // https://svgwg.org/svg2-draft/coords.html#ObjectBoundingBoxUnits
   TransformationMatrix transform;
   FloatRect reference_box = ComputeReferenceBox(layout_object);
-  style.ApplyTransform(transform, reference_box,
-                       ComputedStyle::kIncludeTransformOrigin,
+  style.ApplyTransform(transform, reference_box, apply_transform_origin,
                        ComputedStyle::kIncludeMotionPath,
                        ComputedStyle::kIncludeIndependentTransformProperties);
   const float zoom = style.EffectiveZoom();
@@ -92,4 +92,17 @@
   return transform.ToAffineTransform();
 }
 
+FloatPoint TransformHelper::ComputeTransformOrigin(
+    const LayoutObject& layout_object) {
+  const auto& style = layout_object.StyleRef();
+  FloatRect reference_box = ComputeReferenceBox(layout_object);
+  FloatPoint origin(
+      FloatValueForLength(style.TransformOriginX(), reference_box.Width()) +
+          reference_box.X(),
+      FloatValueForLength(style.TransformOriginY(), reference_box.Height()) +
+          reference_box.Y());
+  // See the comment in ComputeTransform() for the reason of scaling by 1/zoom.
+  return origin.ScaledBy(1 / style.EffectiveZoom());
+}
+
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/layout/svg/transform_helper.h b/third_party/blink/renderer/core/layout/svg/transform_helper.h
index 4423a05..63c667a 100644
--- a/third_party/blink/renderer/core/layout/svg/transform_helper.h
+++ b/third_party/blink/renderer/core/layout/svg/transform_helper.h
@@ -5,12 +5,12 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_SVG_TRANSFORM_HELPER_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_SVG_TRANSFORM_HELPER_H_
 
+#include "third_party/blink/renderer/core/style/computed_style.h"
 #include "third_party/blink/renderer/platform/transforms/affine_transform.h"
 #include "third_party/blink/renderer/platform/wtf/allocator/allocator.h"
 
 namespace blink {
 
-class ComputedStyle;
 class FloatRect;
 class LayoutObject;
 
@@ -28,7 +28,10 @@
 
   // Compute the transform for the LayoutObject based on the various
   // 'transform*' properties.
-  static AffineTransform ComputeTransform(const LayoutObject&);
+  static AffineTransform ComputeTransform(const LayoutObject&,
+                                          ComputedStyle::ApplyTransformOrigin);
+
+  static FloatPoint ComputeTransformOrigin(const LayoutObject&);
 };
 
 // The following enumeration is used to optimize cases where the scale is known
diff --git a/third_party/blink/renderer/core/paint/compositing/compositing_reason_finder.cc b/third_party/blink/renderer/core/paint/compositing/compositing_reason_finder.cc
index 042ff65..86c76de4b 100644
--- a/third_party/blink/renderer/core/paint/compositing/compositing_reason_finder.cc
+++ b/third_party/blink/renderer/core/paint/compositing/compositing_reason_finder.cc
@@ -14,9 +14,11 @@
 #include "third_party/blink/renderer/core/layout/layout_embedded_content.h"
 #include "third_party/blink/renderer/core/layout/layout_video.h"
 #include "third_party/blink/renderer/core/layout/layout_view.h"
+#include "third_party/blink/renderer/core/layout/svg/layout_svg_transformable_container.h"
 #include "third_party/blink/renderer/core/page/page.h"
 #include "third_party/blink/renderer/core/paint/paint_layer.h"
 #include "third_party/blink/renderer/core/paint/paint_layer_scrollable_area.h"
+#include "third_party/blink/renderer/core/svg/svg_element.h"
 
 namespace blink {
 
@@ -186,15 +188,25 @@
 CompositingReasonFinder::DirectReasonsForSVGChildPaintProperties(
     const LayoutObject& object) {
   DCHECK(object.IsSVGChild());
-  if (RuntimeEnabledFeatures::CompositeSVGEnabled() && !object.IsText()) {
-    const ComputedStyle& style = object.StyleRef();
-    auto reasons = CompositingReasonsForAnimation(object) |
-                   CompositingReasonsForWillChange(style);
-    if (style.HasBackdropFilter())
-      reasons |= CompositingReason::kBackdropFilter;
-    return reasons;
+  if (!RuntimeEnabledFeatures::CompositeSVGEnabled())
+    return CompositingReason::kNone;
+  if (object.IsText())
+    return CompositingReason::kNone;
+
+  const ComputedStyle& style = object.StyleRef();
+  auto reasons = CompositingReasonsForAnimation(object);
+  if (reasons != CompositingReason::kNone &&
+      To<SVGElement>(object.GetNode())->HasMainThreadAnimations()) {
+    // TODO(crbug.com/1134652): For now we disable compositing if there are
+    // both compositor-supported animations and main-thread animations.
+    // The better way might be to allow compositing but disable composited
+    // animation.
+    return CompositingReason::kNone;
   }
-  return CompositingReason::kNone;
+  reasons |= CompositingReasonsForWillChange(style);
+  if (style.HasBackdropFilter())
+    reasons |= CompositingReason::kBackdropFilter;
+  return reasons;
 }
 
 CompositingReasons CompositingReasonFinder::CompositingReasonsFor3DTransform(
@@ -283,6 +295,31 @@
   return direct_reasons;
 }
 
+static bool SupportsCompositedTransformAnimation(const LayoutObject& object) {
+  if (object.IsSVGChild()) {
+    if (!RuntimeEnabledFeatures::CompositeSVGEnabled())
+      return false;
+    // Embedded SVG doesn't support transforms for now.
+    if (object.IsSVGViewportContainer())
+      return false;
+    // TODO(crbug.com/1134775): If a foreignObject's effect zoom is not 1,
+    // its transform node contains an additional scale, and composited
+    // animation would remove the scale.
+    if (object.IsSVGForeignObject() && object.StyleRef().EffectiveZoom() != 1)
+      return false;
+    // TODO(crbug.com/1134775): Similarly, composited animation would also
+    // remove the additional translation of LayoutSVGTransformableContainer.
+    if (object.IsSVGTransformableContainer() &&
+        !ToLayoutSVGTransformableContainer(object)
+             .AdditionalTranslation()
+             .IsZero())
+      return false;
+    return true;
+  }
+  // Transforms don't apply on non-replaced inline elements.
+  return object.IsBox();
+}
+
 CompositingReasons CompositingReasonFinder::CompositingReasonsForAnimation(
     const LayoutObject& object) {
   CompositingReasons reasons = CompositingReason::kNone;
@@ -290,11 +327,8 @@
   if (style.SubtreeWillChangeContents())
     return reasons;
 
-  // Transforms don't apply on non-replaced inline elements.
-  bool supports_composited_animations =
-      object.IsBox() ||
-      (RuntimeEnabledFeatures::CompositeSVGEnabled() && object.IsSVGChild());
-  if (supports_composited_animations && style.HasCurrentTransformAnimation())
+  if (style.HasCurrentTransformAnimation() &&
+      SupportsCompositedTransformAnimation(object))
     reasons |= CompositingReason::kActiveTransformAnimation;
   if (style.HasCurrentOpacityAnimation())
     reasons |= CompositingReason::kActiveOpacityAnimation;
diff --git a/third_party/blink/renderer/core/paint/compositing/compositing_reason_finder_test.cc b/third_party/blink/renderer/core/paint/compositing/compositing_reason_finder_test.cc
index 359e6be..413309dd5 100644
--- a/third_party/blink/renderer/core/paint/compositing/compositing_reason_finder_test.cc
+++ b/third_party/blink/renderer/core/paint/compositing/compositing_reason_finder_test.cc
@@ -383,4 +383,61 @@
             CompositingReasonFinder::DirectReasonsForPaintProperties(*text));
 }
 
+TEST_F(CompositingReasonFinderTest, SVGCompositedTransformAnimation) {
+  SetBodyInnerHTML(R"HTML(
+    <style>
+      .animate {
+        width: 100px;
+        height: 100px;
+        animation: wave 1s infinite;
+      }
+      @keyframes wave {
+        0% { transform: rotate(-5deg); }
+        100% { transform: rotate(5deg); }
+      }
+    </style>
+    <svg id="svg" class="animate">
+      <rect id="rect" class="animate"/>
+      <rect id="rect-smil" class="animate">
+        <animateMotion dur="10s" repeatCount="indefinite"
+                       path="M0,0 L100,100 z"/>
+      </rect>
+      <svg id="embedded-svg" class="animate"/>
+      <foreignObject id="foreign" class="animate"/>
+      <foreignObject id="foreign-zoomed" class="animate"
+                     style="zoom: 1.5; will-change: opacity"/>
+      <use id="use" href="#rect" class="animate"/>
+      <use id="use-offset" href="#rect" x="10" class="animate"/>
+    </svg>
+  )HTML");
+
+  EXPECT_EQ(CompositingReason::kActiveTransformAnimation |
+                CompositingReason::kSVGRoot,
+            CompositingReasonFinder::DirectReasonsForPaintProperties(
+                *GetLayoutObjectByElementId("svg")));
+  EXPECT_EQ(CompositingReason::kActiveTransformAnimation,
+            CompositingReasonFinder::DirectReasonsForPaintProperties(
+                *GetLayoutObjectByElementId("rect")));
+  EXPECT_EQ(CompositingReason::kNone,
+            CompositingReasonFinder::DirectReasonsForPaintProperties(
+                *GetLayoutObjectByElementId("rect-smil")));
+  EXPECT_EQ(CompositingReason::kNone,
+            CompositingReasonFinder::DirectReasonsForPaintProperties(
+                *GetLayoutObjectByElementId("embedded-svg")));
+  EXPECT_EQ(CompositingReason::kActiveTransformAnimation,
+            CompositingReasonFinder::DirectReasonsForPaintProperties(
+                *GetLayoutObjectByElementId("foreign")));
+  // The foreignObject that can't use composited animation still gets other
+  // compositing reasons.
+  EXPECT_EQ(CompositingReason::kWillChangeOpacity,
+            CompositingReasonFinder::DirectReasonsForPaintProperties(
+                *GetLayoutObjectByElementId("foreign-zoomed")));
+  EXPECT_EQ(CompositingReason::kActiveTransformAnimation,
+            CompositingReasonFinder::DirectReasonsForPaintProperties(
+                *GetLayoutObjectByElementId("use")));
+  EXPECT_EQ(CompositingReason::kNone,
+            CompositingReasonFinder::DirectReasonsForPaintProperties(
+                *GetLayoutObjectByElementId("use-offset")));
+}
+
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/paint/paint_property_tree_builder.cc b/third_party/blink/renderer/core/paint/paint_property_tree_builder.cc
index 91dd03e0..a7fd765 100644
--- a/third_party/blink/renderer/core/paint/paint_property_tree_builder.cc
+++ b/third_party/blink/renderer/core/paint/paint_property_tree_builder.cc
@@ -31,6 +31,7 @@
 #include "third_party/blink/renderer/core/layout/svg/svg_layout_support.h"
 #include "third_party/blink/renderer/core/layout/svg/svg_resources.h"
 #include "third_party/blink/renderer/core/layout/svg/svg_resources_cache.h"
+#include "third_party/blink/renderer/core/layout/svg/transform_helper.h"
 #include "third_party/blink/renderer/core/page/link_highlight.h"
 #include "third_party/blink/renderer/core/page/page.h"
 #include "third_party/blink/renderer/core/page/scrolling/snap_coordinator.h"
@@ -216,6 +217,8 @@
   ALWAYS_INLINE void UpdateTransformIsolationNode();
   ALWAYS_INLINE void UpdateEffectIsolationNode();
   ALWAYS_INLINE void UpdateClipIsolationNode();
+  ALWAYS_INLINE void SetTransformNodeStateForSVGChild(
+      TransformPaintPropertyNode::State&);
 
   bool NeedsPaintPropertyUpdate() const {
     return object_.NeedsPaintPropertyUpdate() ||
@@ -707,15 +710,37 @@
 
 static void SetTransformNodeStateFromAffineTransform(
     TransformPaintPropertyNode::State& state,
-    const AffineTransform& transform,
-    bool disable_2d_translation_optimization) {
-  if (!disable_2d_translation_optimization &&
-      transform.IsIdentityOrTranslation())
+    const AffineTransform& transform) {
+  if (transform.IsIdentityOrTranslation())
     state.transform_and_origin = {FloatSize(transform.E(), transform.F())};
   else
     state.transform_and_origin = {TransformationMatrix(transform)};
 }
 
+void FragmentPaintPropertyTreeBuilder::SetTransformNodeStateForSVGChild(
+    TransformPaintPropertyNode::State& state) {
+  if (full_context_.direct_compositing_reasons &
+      CompositingReason::kActiveTransformAnimation) {
+    // For composited transform animation to work, we need to store transform
+    // origin separately. It's baked in object_.LocalToSVGParentTransform().
+    DCHECK(!To<SVGElement>(object_.GetNode())->HasMainThreadAnimations());
+    // Composited transform animation works only if LocalToSVGParentTransform()
+    // reflect the CSS transform properties. If this fails, we need to exclude
+    // the case in CompositingReasonFinder for kActiveTransformAnimation.
+    DCHECK_EQ(TransformHelper::ComputeTransform(
+                  object_, ComputedStyle::kIncludeTransformOrigin),
+              object_.LocalToSVGParentTransform());
+    state.transform_and_origin = {
+        TransformationMatrix(TransformHelper::ComputeTransform(
+            object_, ComputedStyle::kExcludeTransformOrigin)),
+        FloatPoint3D(TransformHelper::ComputeTransformOrigin(object_))};
+    return;
+  }
+
+  SetTransformNodeStateFromAffineTransform(state,
+                                           object_.LocalToSVGParentTransform());
+}
+
 // SVG does not use the general transform update of |UpdateTransform|, instead
 // creating a transform node for SVG-specific transforms without 3D.
 void FragmentPaintPropertyTreeBuilder::UpdateTransformForSVGChild(
@@ -728,15 +753,10 @@
          context_.current.paint_offset.IsZero());
 
   if (NeedsPaintPropertyUpdate()) {
-    AffineTransform transform = object_.LocalToSVGParentTransform();
     if (NeedsTransformForSVGChild(object_, direct_compositing_reasons)) {
       // The origin is included in the local transform, so leave origin empty.
       TransformPaintPropertyNode::State state;
-      bool disable_2d_translation_optimization =
-          full_context_.direct_compositing_reasons &
-          CompositingReason::kActiveTransformAnimation;
-      SetTransformNodeStateFromAffineTransform(
-          state, transform, disable_2d_translation_optimization);
+      SetTransformNodeStateForSVGChild(state);
 
       // TODO(pdr): There is additional logic in
       // FragmentPaintPropertyTreeBuilder::UpdateTransform that likely needs to
@@ -1869,8 +1889,7 @@
     }
     if (!content_to_parent_space.IsIdentity()) {
       TransformPaintPropertyNode::State state;
-      SetTransformNodeStateFromAffineTransform(state, content_to_parent_space,
-                                               false);
+      SetTransformNodeStateFromAffineTransform(state, content_to_parent_space);
       state.flags.flattens_inherited_transform =
           context_.current.should_flatten_inherited_transform;
       OnUpdate(properties_->UpdateReplacedContentTransform(
diff --git a/third_party/blink/renderer/core/paint/paint_property_tree_builder_test.cc b/third_party/blink/renderer/core/paint/paint_property_tree_builder_test.cc
index 0b9bcee..5bd1c91b 100644
--- a/third_party/blink/renderer/core/paint/paint_property_tree_builder_test.cc
+++ b/third_party/blink/renderer/core/paint/paint_property_tree_builder_test.cc
@@ -6994,4 +6994,27 @@
                    .PaintProperties());
 }
 
+TEST_P(PaintPropertyTreeBuilderTest, SVGTransformAnimationAndOrigin) {
+  SetBodyInnerHTML(R"HTML(
+    <svg width="200" height="200">
+      <rect id="rect"
+            style="animation: 2s infinite spin; transform-origin: 50% 50%">
+    </svg>
+    <style>
+      @keyframes spin {
+        0% { transform: rotate(0); }
+        100% { transform: rotate(360deg); }
+      }
+    </style>
+  )HTML");
+
+  auto* properties = PaintPropertiesForElement("rect");
+  ASSERT_TRUE(properties);
+  auto* transform_node = properties->Transform();
+  ASSERT_TRUE(transform_node);
+  EXPECT_TRUE(transform_node->HasActiveTransformAnimation());
+  EXPECT_EQ(TransformationMatrix(), transform_node->Matrix());
+  EXPECT_EQ(FloatPoint3D(100, 100, 0), transform_node->Origin());
+}
+
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/paint/scoped_svg_paint_state.h b/third_party/blink/renderer/core/paint/scoped_svg_paint_state.h
index fcf1c23..7210ed4 100644
--- a/third_party/blink/renderer/core/paint/scoped_svg_paint_state.h
+++ b/third_party/blink/renderer/core/paint/scoped_svg_paint_state.h
@@ -44,8 +44,7 @@
 
  public:
   ScopedSVGTransformState(const PaintInfo& paint_info,
-                          const LayoutObject& object,
-                          const AffineTransform& transform) {
+                          const LayoutObject& object) {
     DCHECK(object.IsSVGChild());
 
     const auto* fragment = paint_info.FragmentToPaint(object);
@@ -56,14 +55,6 @@
       return;
 
     if (const auto* transform_node = properties->Transform()) {
-#if DCHECK_IS_ON()
-      if (transform_node->IsIdentityOr2DTranslation()) {
-        DCHECK_EQ(transform_node->Translation2D(),
-                  transform.ToTransformationMatrix().To2DTranslation());
-      } else {
-        DCHECK_EQ(transform_node->Matrix(), transform.ToTransformationMatrix());
-      }
-#endif
       transform_property_scope_.emplace(
           paint_info.context.GetPaintController(), *transform_node, object,
           DisplayItem::PaintPhaseToSVGTransformType(paint_info.phase));
diff --git a/third_party/blink/renderer/core/paint/svg_container_painter.cc b/third_party/blink/renderer/core/paint/svg_container_painter.cc
index a72bc3ca..85e1172 100644
--- a/third_party/blink/renderer/core/paint/svg_container_painter.cc
+++ b/third_party/blink/renderer/core/paint/svg_container_painter.cc
@@ -61,9 +61,8 @@
     paint_info_before_filtering.ApplyInfiniteCullRect();
   }
 
-  ScopedSVGTransformState transform_state(
-      paint_info_before_filtering, layout_svg_container_,
-      layout_svg_container_.LocalToSVGParentTransform());
+  ScopedSVGTransformState transform_state(paint_info_before_filtering,
+                                          layout_svg_container_);
   {
     base::Optional<ScopedPaintChunkProperties> scoped_paint_chunk_properties;
     if (layout_svg_container_.IsSVGViewportContainer() &&
diff --git a/third_party/blink/renderer/core/paint/svg_image_painter.cc b/third_party/blink/renderer/core/paint/svg_image_painter.cc
index 931ab80..7cb6aa59 100644
--- a/third_party/blink/renderer/core/paint/svg_image_painter.cc
+++ b/third_party/blink/renderer/core/paint/svg_image_painter.cc
@@ -39,8 +39,7 @@
   }
   // Images cannot have children so do not call TransformCullRect.
 
-  ScopedSVGTransformState transform_state(
-      paint_info, layout_svg_image_, layout_svg_image_.LocalSVGTransform());
+  ScopedSVGTransformState transform_state(paint_info, layout_svg_image_);
   {
     ScopedSVGPaintState paint_state(layout_svg_image_, paint_info);
     if (!DrawingRecorder::UseCachedDrawingIfPossible(
diff --git a/third_party/blink/renderer/core/paint/svg_shape_painter.cc b/third_party/blink/renderer/core/paint/svg_shape_painter.cc
index 0fba9887..66a12c5 100644
--- a/third_party/blink/renderer/core/paint/svg_shape_painter.cc
+++ b/third_party/blink/renderer/core/paint/svg_shape_painter.cc
@@ -55,8 +55,7 @@
   }
   // Shapes cannot have children so do not call TransformCullRect.
 
-  ScopedSVGTransformState transform_state(
-      paint_info, layout_svg_shape_, layout_svg_shape_.LocalSVGTransform());
+  ScopedSVGTransformState transform_state(paint_info, layout_svg_shape_);
   {
     ScopedSVGPaintState paint_state(layout_svg_shape_, paint_info);
     if (!DrawingRecorder::UseCachedDrawingIfPossible(
diff --git a/third_party/blink/renderer/core/paint/svg_text_painter.cc b/third_party/blink/renderer/core/paint/svg_text_painter.cc
index d6a3ec5..e377ab0e 100644
--- a/third_party/blink/renderer/core/paint/svg_text_painter.cc
+++ b/third_party/blink/renderer/core/paint/svg_text_painter.cc
@@ -24,9 +24,7 @@
     if (const auto* transform = properties->Transform())
       block_info.TransformCullRect(*transform);
   }
-  ScopedSVGTransformState transform_state(
-      block_info, layout_svg_text_,
-      layout_svg_text_.LocalToSVGParentTransform());
+  ScopedSVGTransformState transform_state(block_info, layout_svg_text_);
 
   if (block_info.phase == PaintPhase::kForeground)
     SVGModelObjectPainter::RecordHitTestData(layout_svg_text_, block_info);
diff --git a/third_party/blink/renderer/core/scheduler_integration_tests/throttling_test.cc b/third_party/blink/renderer/core/scheduler_integration_tests/throttling_test.cc
index 6c6bd298..ada3cae 100644
--- a/third_party/blink/renderer/core/scheduler_integration_tests/throttling_test.cc
+++ b/third_party/blink/renderer/core/scheduler_integration_tests/throttling_test.cc
@@ -139,7 +139,8 @@
               ElementsAre(console_message, console_message, console_message));
 }
 
-// Same test as above, but using timeout=0.
+// Verify that a timer with timeout=0 is not throttled until its timeout is
+// rounded up to 4ms.
 TEST_F(BackgroundPageThrottlingTest,
        ZeroTimeoutTimersThrottledInBackgroundPage) {
   SimRequest main_resource("https://example.com/", "text/html");
@@ -160,11 +161,15 @@
 
   GetDocument().GetPage()->GetPageScheduler()->SetPageVisible(false);
 
-  // 0ms timeouts are rounded up to 1ms (https://crbug.com/402694). When the
-  // nesting level is 5, they are rounded up to 4 ms. The duration of a
-  // throttled wake up is 3ms. Therefore, at the 2 first wake ups, the timer
-  // runs twice. At the third wake up, it runs once.
-  platform_->RunForPeriod(base::TimeDelta::FromSeconds(3));
+  // Initially, timeout is rounded up to 1ms and no throttling is applied
+  // (https://crbug.com/402694). After 4 executions, timeout is rounded up to
+  // 4ms and throttling is applied.
+  constexpr base::TimeDelta k10Ms = base::TimeDelta::FromMilliseconds(10);
+  platform_->RunForPeriod(k10Ms);
+  EXPECT_THAT(FilteredConsoleMessages(),
+              ElementsAre(console_message, console_message, console_message,
+                          console_message));
+  platform_->RunForPeriod(base::TimeDelta::FromSeconds(1) - k10Ms);
   EXPECT_THAT(FilteredConsoleMessages(),
               ElementsAre(console_message, console_message, console_message,
                           console_message, console_message));
diff --git a/third_party/blink/renderer/core/svg/animation/element_smil_animations.h b/third_party/blink/renderer/core/svg/animation/element_smil_animations.h
index 90d6f2bb..b3852201b 100644
--- a/third_party/blink/renderer/core/svg/animation/element_smil_animations.h
+++ b/third_party/blink/renderer/core/svg/animation/element_smil_animations.h
@@ -25,6 +25,7 @@
 
   void AddAnimation(const QualifiedName& attribute, SVGAnimationElement*);
   void RemoveAnimation(const QualifiedName& attribute, SVGAnimationElement*);
+  bool HasAnimations() const { return !sandwiches_.IsEmpty(); }
 
   bool Apply(SMILTime elapsed);
 
diff --git a/third_party/blink/renderer/core/svg/svg_element.cc b/third_party/blink/renderer/core/svg/svg_element.cc
index 70afd14..ae56b0d 100644
--- a/third_party/blink/renderer/core/svg/svg_element.cc
+++ b/third_party/blink/renderer/core/svg/svg_element.cc
@@ -51,6 +51,7 @@
 #include "third_party/blink/renderer/core/layout/layout_object.h"
 #include "third_party/blink/renderer/core/layout/svg/layout_svg_resource_container.h"
 #include "third_party/blink/renderer/core/layout/svg/transform_helper.h"
+#include "third_party/blink/renderer/core/svg/animation/element_smil_animations.h"
 #include "third_party/blink/renderer/core/svg/properties/svg_animated_property.h"
 #include "third_party/blink/renderer/core/svg/properties/svg_property.h"
 #include "third_party/blink/renderer/core/svg/svg_animated_string.h"
@@ -229,7 +230,7 @@
   animated_attributes.clear();
 }
 
-ElementSMILAnimations* SVGElement::GetSMILAnimations() {
+ElementSMILAnimations* SVGElement::GetSMILAnimations() const {
   if (!HasSVGRareData())
     return nullptr;
   return SvgRareData()->GetSMILAnimations();
@@ -266,6 +267,16 @@
   });
 }
 
+bool SVGElement::HasMainThreadAnimations() const {
+  if (!HasSVGRareData())
+    return false;
+  if (!SvgRareData()->WebAnimatedAttributes().IsEmpty())
+    return true;
+  if (GetSMILAnimations() && GetSMILAnimations()->HasAnimations())
+    return true;
+  return false;
+}
+
 AffineTransform SVGElement::LocalCoordinateSpaceTransform(CTMScope) const {
   // To be overriden by SVGGraphicsElement (or as special case SVGTextElement
   // and SVGPatternElement)
@@ -284,8 +295,10 @@
   const LayoutObject* layout_object = GetLayoutObject();
 
   AffineTransform matrix;
-  if (layout_object && layout_object->StyleRef().HasTransform())
-    matrix = TransformHelper::ComputeTransform(*layout_object);
+  if (layout_object && layout_object->StyleRef().HasTransform()) {
+    matrix = TransformHelper::ComputeTransform(
+        *layout_object, ComputedStyle::kIncludeTransformOrigin);
+  }
 
   // Apply any "motion transform" contribution if requested (and existing.)
   if (apply_motion_transform == kIncludeMotionTransform && HasSVGRareData())
diff --git a/third_party/blink/renderer/core/svg/svg_element.h b/third_party/blink/renderer/core/svg/svg_element.h
index 15c59efb..f02a552 100644
--- a/third_party/blink/renderer/core/svg/svg_element.h
+++ b/third_party/blink/renderer/core/svg/svg_element.h
@@ -99,13 +99,15 @@
                                SVGPropertyBase*);
   void ClearWebAnimatedAttributes();
 
-  ElementSMILAnimations* GetSMILAnimations();
+  ElementSMILAnimations* GetSMILAnimations() const;
   ElementSMILAnimations& EnsureSMILAnimations();
   const ComputedStyle* BaseComputedStyleForSMIL();
 
   void SetAnimatedAttribute(const QualifiedName&, SVGPropertyBase*);
   void ClearAnimatedAttribute(const QualifiedName&);
 
+  bool HasMainThreadAnimations() const;
+
   SVGSVGElement* ownerSVGElement() const;
   SVGElement* viewportElement() const;
 
diff --git a/third_party/blink/renderer/platform/exported/web_http_body.cc b/third_party/blink/renderer/platform/exported/web_http_body.cc
index 6f17710..d3ccce3 100644
--- a/third_party/blink/renderer/platform/exported/web_http_body.cc
+++ b/third_party/blink/renderer/platform/exported/web_http_body.cc
@@ -73,7 +73,6 @@
   result.file_start = 0;
   result.file_length = 0;
   result.modification_time = base::nullopt;
-  result.blob_uuid.Reset();
 
   switch (element.type_) {
     case FormDataElement::kData:
@@ -89,13 +88,10 @@
       break;
     case FormDataElement::kEncodedBlob:
       result.type = Element::kTypeBlob;
-      result.blob_uuid = element.blob_uuid_;
       result.blob_length = std::numeric_limits<uint64_t>::max();
-      if (element.optional_blob_data_handle_) {
-        result.optional_blob =
-            element.optional_blob_data_handle_->CloneBlobRemote();
-        result.blob_length = element.optional_blob_data_handle_->size();
-      }
+      result.optional_blob =
+          element.optional_blob_data_handle_->CloneBlobRemote();
+      result.blob_length = element.optional_blob_data_handle_->size();
       break;
     case FormDataElement::kDataPipe:
       result.type = Element::kTypeDataPipe;
diff --git a/third_party/blink/renderer/platform/loader/fetch/fetch_api_request_body_mojom_traits.cc b/third_party/blink/renderer/platform/loader/fetch/fetch_api_request_body_mojom_traits.cc
index ee503a2..4558e086 100644
--- a/third_party/blink/renderer/platform/loader/fetch/fetch_api_request_body_mojom_traits.cc
+++ b/third_party/blink/renderer/platform/loader/fetch/fetch_api_request_body_mojom_traits.cc
@@ -53,25 +53,19 @@
         out->expected_modification_time =
             element.expected_file_modification_time_.value_or(base::Time());
         break;
-      case blink::FormDataElement::kEncodedBlob:
-        if (element.optional_blob_data_handle_) {
-          out->type = network::mojom::DataElementType::kDataPipe;
-          out->length = element.optional_blob_data_handle_->size();
+      case blink::FormDataElement::kEncodedBlob: {
+        out->type = network::mojom::DataElementType::kDataPipe;
+        out->length = element.optional_blob_data_handle_->size();
 
-          mojo::Remote<blink::mojom::blink::Blob> blob_remote(
-              mojo::PendingRemote<blink::mojom::blink::Blob>(
-                  element.optional_blob_data_handle_->CloneBlobRemote()
-                      .PassPipe(),
-                  blink::mojom::blink::Blob::Version_));
-          mojo::PendingRemote<network::mojom::blink::DataPipeGetter>
-              data_pipe_getter_remote;
-          blob_remote->AsDataPipeGetter(
-              out->data_pipe_getter.InitWithNewPipeAndPassReceiver());
-        } else {
-          out->type = network::mojom::DataElementType::kBlob;
-          out->blob_uuid = element.blob_uuid_;
-        }
+        mojo::Remote<blink::mojom::blink::Blob> blob_remote(
+            mojo::PendingRemote<blink::mojom::blink::Blob>(
+                element.optional_blob_data_handle_->CloneBlobRemote()
+                    .PassPipe(),
+                blink::mojom::blink::Blob::Version_));
+        blob_remote->AsDataPipeGetter(
+            out->data_pipe_getter.InitWithNewPipeAndPassReceiver());
         break;
+      }
       case blink::FormDataElement::kDataPipe:
         out->type = network::mojom::DataElementType::kDataPipe;
         if (element.data_pipe_getter_) {
@@ -159,7 +153,6 @@
 
         break;
       }
-      case network::mojom::DataElementType::kBlob:
       case network::mojom::DataElementType::kUnknown:
       case network::mojom::DataElementType::kChunkedDataPipe:
       case network::mojom::DataElementType::kReadOnceStream:
diff --git a/third_party/blink/renderer/platform/media/webaudiosourceprovider_impl.cc b/third_party/blink/renderer/platform/media/webaudiosourceprovider_impl.cc
index 8c27db1..f6481a2 100644
--- a/third_party/blink/renderer/platform/media/webaudiosourceprovider_impl.cc
+++ b/third_party/blink/renderer/platform/media/webaudiosourceprovider_impl.cc
@@ -82,10 +82,6 @@
     const int num_rendered_frames = renderer_->Render(
         delay, delay_timestamp, prior_frames_skipped, audio_bus);
 
-    // Zero out frames after rendering
-    if (origin_tainted_.IsSet())
-      audio_bus->Zero();
-
     // Avoid taking the copy lock for the vast majority of cases.
     if (copy_required_) {
       base::AutoLock auto_lock(copy_lock_);
@@ -94,7 +90,11 @@
             media::AudioTimestampHelper::TimeToFrames(delay, sample_rate_);
         std::unique_ptr<media::AudioBus> bus_copy =
             media::AudioBus::Create(audio_bus->channels(), audio_bus->frames());
-        audio_bus->CopyTo(bus_copy.get());
+        // Disable copying when origin is tainted.
+        if (origin_tainted_.IsSet())
+          bus_copy->Zero();
+        else
+          audio_bus->CopyTo(bus_copy.get());
         copy_audio_bus_callback_.Run(std::move(bus_copy),
                                      static_cast<uint32_t>(frames_delayed),
                                      sample_rate_);
@@ -120,6 +120,7 @@
   }
 
   void TaintOrigin() { origin_tainted_.Set(); }
+  bool is_tainted() const { return origin_tainted_.IsSet(); }
 
  private:
   AudioRendererSink::RenderCallback* renderer_ = nullptr;
@@ -227,6 +228,13 @@
   DCHECK_EQ(tee_filter_->channels(), bus_wrapper_->channels());
   const int frames = tee_filter_->Render(
       base::TimeDelta(), base::TimeTicks::Now(), 0, bus_wrapper_.get());
+
+  // Zero out frames after rendering for tainted origins.
+  if (tee_filter_->is_tainted()) {
+    bus_wrapper_->Zero();
+    return;
+  }
+
   if (frames < incoming_number_of_frames)
     bus_wrapper_->ZeroFramesPartial(frames, incoming_number_of_frames - frames);
 
diff --git a/third_party/blink/renderer/platform/media/webaudiosourceprovider_impl_test.cc b/third_party/blink/renderer/platform/media/webaudiosourceprovider_impl_test.cc
index 3f9ef684..a3dc49a9 100644
--- a/third_party/blink/renderer/platform/media/webaudiosourceprovider_impl_test.cc
+++ b/third_party/blink/renderer/platform/media/webaudiosourceprovider_impl_test.cc
@@ -22,6 +22,11 @@
 namespace blink {
 
 namespace {
+
+MATCHER(IsMuted, std::string(negation ? "isn't" : "is") + " muted") {
+  return arg->AreFramesZero();
+}
+
 const float kTestVolume = 0.25;
 const int kTestSampleRate = 48000;
 }  // namespace
@@ -91,17 +96,10 @@
 
   // WebAudioSourceProviderClient implementation.
   MOCK_METHOD2(SetFormat, void(uint32_t numberOfChannels, float sampleRate));
-
-  // CopyAudioCB. Added forwarder method due to GMock troubles with scoped_ptr.
   MOCK_METHOD3(DoCopyAudioCB,
-               void(media::AudioBus*,
+               void(std::unique_ptr<media::AudioBus> bus,
                     uint32_t frames_delayed,
                     int sample_rate));
-  void OnAudioBus(std::unique_ptr<media::AudioBus> bus,
-                  uint32_t frames_delayed,
-                  int sample_rate) {
-    DoCopyAudioCB(bus.get(), frames_delayed, sample_rate);
-  }
 
   int Render(media::AudioBus* audio_bus) {
     return wasp_impl_->RenderForTesting(audio_bus);
@@ -167,6 +165,35 @@
   CallAllSinkMethodsAndVerify(false);
 }
 
+// Test tainting effects on Render().
+TEST_F(WebAudioSourceProviderImplTest, RenderTainted) {
+  auto bus = media::AudioBus::Create(params_);
+  bus->Zero();
+
+  // Point the WebVector into memory owned by |bus|.
+  WebVector<float*> audio_data(static_cast<size_t>(bus->channels()));
+  for (size_t i = 0; i < audio_data.size(); ++i)
+    audio_data[i] = bus->channel(static_cast<int>(i));
+
+  wasp_impl_->Initialize(params_, &fake_callback_);
+
+  EXPECT_CALL(*mock_sink_, Start());
+  wasp_impl_->Start();
+  EXPECT_CALL(*mock_sink_, Play());
+  wasp_impl_->Play();
+
+  Render(bus.get());
+  ASSERT_FALSE(bus->AreFramesZero());
+
+  // Normal audio output should be unaffected by tainting.
+  wasp_impl_->TaintOrigin();
+  Render(bus.get());
+  ASSERT_FALSE(bus->AreFramesZero());
+
+  EXPECT_CALL(*mock_sink_, Stop());
+  wasp_impl_->Stop();
+}
+
 // Test the AudioRendererSink state machine and its effects on provideInput().
 TEST_F(WebAudioSourceProviderImplTest, ProvideInput) {
   auto bus1 = media::AudioBus::Create(params_);
@@ -253,12 +280,37 @@
   ASSERT_TRUE(CompareBusses(bus1.get(), bus2.get()));
 }
 
+// Test tainting effects on ProvideInput().
+TEST_F(WebAudioSourceProviderImplTest, ProvideInputTainted) {
+  auto bus = media::AudioBus::Create(params_);
+  bus->Zero();
+
+  // Point the WebVector into memory owned by |bus|.
+  WebVector<float*> audio_data(static_cast<size_t>(bus->channels()));
+  for (size_t i = 0; i < audio_data.size(); ++i)
+    audio_data[i] = bus->channel(static_cast<int>(i));
+
+  wasp_impl_->Initialize(params_, &fake_callback_);
+  SetClient(this);
+
+  wasp_impl_->Start();
+  wasp_impl_->Play();
+  wasp_impl_->ProvideInput(audio_data, params_.frames_per_buffer());
+  ASSERT_FALSE(bus->AreFramesZero());
+
+  wasp_impl_->TaintOrigin();
+  wasp_impl_->ProvideInput(audio_data, params_.frames_per_buffer());
+  ASSERT_TRUE(bus->AreFramesZero());
+
+  wasp_impl_->Stop();
+}
+
 // Verify CopyAudioCB is called if registered.
 TEST_F(WebAudioSourceProviderImplTest, CopyAudioCB) {
   testing::InSequence s;
   wasp_impl_->Initialize(params_, &fake_callback_);
   wasp_impl_->SetCopyAudioCallback(WTF::BindRepeating(
-      &WebAudioSourceProviderImplTest::OnAudioBus, base::Unretained(this)));
+      &WebAudioSourceProviderImplTest::DoCopyAudioCB, base::Unretained(this)));
 
   const auto bus1 = media::AudioBus::Create(params_);
   EXPECT_CALL(*this, DoCopyAudioCB(_, 0, params_.sample_rate())).Times(1);
@@ -271,6 +323,27 @@
   testing::Mock::VerifyAndClear(mock_sink_.get());
 }
 
+// Verify CopyAudioCB is zero when tainted.
+TEST_F(WebAudioSourceProviderImplTest, CopyAudioCBTainted) {
+  testing::InSequence s;
+  wasp_impl_->Initialize(params_, &fake_callback_);
+  wasp_impl_->SetCopyAudioCallback(WTF::BindRepeating(
+      &WebAudioSourceProviderImplTest::DoCopyAudioCB, base::Unretained(this)));
+
+  const auto bus1 = media::AudioBus::Create(params_);
+  EXPECT_CALL(*this,
+              DoCopyAudioCB(testing::Not(IsMuted()), 0, params_.sample_rate()))
+      .Times(1);
+  Render(bus1.get());
+
+  wasp_impl_->TaintOrigin();
+  EXPECT_CALL(*this, DoCopyAudioCB(IsMuted(), 0, params_.sample_rate()))
+      .Times(1);
+  Render(bus1.get());
+
+  testing::Mock::VerifyAndClear(mock_sink_.get());
+}
+
 TEST_F(WebAudioSourceProviderImplTest, MultipleInitializeWithSetClient) {
   // setClient() with a nullptr client should do nothing if no client is set.
   wasp_impl_->SetClient(nullptr);
@@ -337,6 +410,7 @@
 
   // SetClient when called with a valid client should trigger the callback once.
   EXPECT_CALL(*this, OnClientSet()).Times(1);
+  EXPECT_CALL(*mock_sink_, Stop());
   wasp_impl_->SetClient(this);
   base::RunLoop().RunUntilIdle();
   ::testing::Mock::VerifyAndClearExpectations(this);
diff --git a/third_party/blink/renderer/platform/network/encoded_form_data.cc b/third_party/blink/renderer/platform/network/encoded_form_data.cc
index eb21baf..b66a45b 100644
--- a/third_party/blink/renderer/platform/network/encoded_form_data.cc
+++ b/third_party/blink/renderer/platform/network/encoded_form_data.cc
@@ -55,7 +55,9 @@
                                  scoped_refptr<BlobDataHandle> optional_handle)
     : type_(kEncodedBlob),
       blob_uuid_(blob_uuid),
-      optional_blob_data_handle_(std::move(optional_handle)) {}
+      optional_blob_data_handle_(std::move(optional_handle)) {
+  DCHECK(optional_blob_data_handle_);
+}
 
 FormDataElement::FormDataElement(
     scoped_refptr<WrappedDataPipeGetter> data_pipe_getter)
diff --git a/third_party/blink/renderer/platform/network/encoded_form_data_test.cc b/third_party/blink/renderer/platform/network/encoded_form_data_test.cc
index d90f3607..faf54e8 100644
--- a/third_party/blink/renderer/platform/network/encoded_form_data_test.cc
+++ b/third_party/blink/renderer/platform/network/encoded_form_data_test.cc
@@ -5,16 +5,22 @@
 #include <utility>
 
 #include "base/sequenced_task_runner.h"
+#include "base/test/task_environment.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
+#include "mojo/public/cpp/bindings/receiver.h"
+#include "mojo/public/cpp/bindings/remote.h"
 #include "mojo/public/cpp/bindings/string_traits_wtf.h"
 #include "mojo/public/cpp/test_support/test_utils.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "third_party/blink/public/mojom/blob/blob_registry.mojom-blink.h"
+#include "third_party/blink/public/platform/platform.h"
 #include "third_party/blink/renderer/platform/blob/blob_data.h"
 #include "third_party/blink/renderer/platform/network/encoded_form_data.h"
 
-#include "testing/gtest/include/gtest/gtest.h"
-
 namespace blink {
 
+using mojom::blink::BlobRegistry;
+
 namespace {
 
 class EncodedFormDataTest : public testing::Test {
@@ -44,7 +50,13 @@
   original->AppendData("Foo", 3);
   original->AppendFileRange("example.txt", 12345, 56789,
                             base::Time::FromDoubleT(9999.0));
-  original->AppendBlob("originalUUID", nullptr);
+
+  mojo::PendingRemote<mojom::blink::Blob> remote;
+  mojo::PendingReceiver<mojom::blink::Blob> receiver =
+      remote.InitWithNewPipeAndPassReceiver();
+  original->AppendBlob(
+      "originalUUID", BlobDataHandle::Create("uuid", "" /* type */,
+                                             0u /* size */, std::move(remote)));
 
   Vector<char> boundary_vector;
   boundary_vector.Append("----boundaryForTest", 19);
diff --git a/third_party/blink/renderer/platform/scheduler/main_thread/frame_scheduler_impl_unittest.cc b/third_party/blink/renderer/platform/scheduler/main_thread/frame_scheduler_impl_unittest.cc
index 3ce85ea..a78a6ee0 100644
--- a/third_party/blink/renderer/platform/scheduler/main_thread/frame_scheduler_impl_unittest.cc
+++ b/third_party/blink/renderer/platform/scheduler/main_thread/frame_scheduler_impl_unittest.cc
@@ -916,8 +916,7 @@
 INSTANTIATE_TEST_SUITE_P(
     AllTimerTaskTypes,
     FrameSchedulerImplStopInBackgroundDisabledTest,
-    testing::Values(TaskType::kJavascriptTimerImmediate,
-                    TaskType::kJavascriptTimerDelayedLowNesting,
+    testing::Values(TaskType::kJavascriptTimerDelayedLowNesting,
                     TaskType::kJavascriptTimerDelayedHighNesting),
     [](const testing::TestParamInfo<TaskType>& info) {
       return TaskTypeNames::TaskTypeToString(info.param);
@@ -2390,15 +2389,8 @@
             JavaScriptTimerTaskQueue());
   EXPECT_EQ(GetTaskQueue(TaskType::kJavascriptTimerDelayedHighNesting),
             JavaScriptTimerTaskQueue());
-  EXPECT_EQ(GetTaskQueue(TaskType::kJavascriptTimerImmediate),
-            JavaScriptTimerTaskQueue());
-  {
-    base::test::ScopedFeatureList feature_list;
-    feature_list.InitAndEnableFeature(
-        features::kOptOutZeroTimeoutTimersFromThrottling);
     EXPECT_EQ(GetTaskQueue(TaskType::kJavascriptTimerImmediate),
               JavaScriptTimerNonThrottleableTaskQueue());
-  }
 
   EXPECT_EQ(GetTaskQueue(TaskType::kWebSocket), DeferrableTaskQueue());
   EXPECT_EQ(GetTaskQueue(TaskType::kDatabaseAccess), PausableTaskQueue());
@@ -2423,7 +2415,6 @@
                  << TaskTypeNames::TaskTypeToString(task_type));
     switch (task_type) {
       case TaskType::kInternalContentCapture:
-      case TaskType::kJavascriptTimerImmediate:
       case TaskType::kJavascriptTimerDelayedLowNesting:
       case TaskType::kJavascriptTimerDelayedHighNesting:
       case TaskType::kInternalTranslation:
@@ -2807,7 +2798,6 @@
 // expected time when throttled.
 TEST_F(FrameSchedulerImplTest, ThrottledJSTimerTasksRunTime) {
   constexpr TaskType kJavaScriptTimerTaskTypes[] = {
-      TaskType::kJavascriptTimerImmediate,
       TaskType::kJavascriptTimerDelayedLowNesting,
       TaskType::kJavascriptTimerDelayedHighNesting};
 
@@ -3736,10 +3726,6 @@
     FrameSchedulerImplTestWithIntensiveWakeUpThrottling,
     testing::Values(
         IntensiveWakeUpThrottlingTestParam{
-            /* task_type=*/TaskType::kJavascriptTimerImmediate,
-            /* can_intensively_throttle_low_nesting_level=*/false,
-            /* is_intensive_throttling_expected=*/false},
-        IntensiveWakeUpThrottlingTestParam{
             /* task_type=*/TaskType::kJavascriptTimerDelayedLowNesting,
             /* can_intensively_throttle_low_nesting_level=*/false,
             /* is_intensive_throttling_expected=*/false},
diff --git a/third_party/blink/renderer/platform/widget/input/scroll_predictor.cc b/third_party/blink/renderer/platform/widget/input/scroll_predictor.cc
index 95e5f3f..64858a6 100644
--- a/third_party/blink/renderer/platform/widget/input/scroll_predictor.cc
+++ b/third_party/blink/renderer/platform/widget/input/scroll_predictor.cc
@@ -13,8 +13,7 @@
 
 namespace blink {
 
-ScrollPredictor::ScrollPredictor()
-    : metrics_handler_("Event.InputEventPrediction.Scroll") {
+ScrollPredictor::ScrollPredictor() {
   // Get the predictor from feature flags
   std::string predictor_name = GetFieldTrialParamValueByFeature(
       blink::features::kResamplingScrollEvents, "predictor");
diff --git a/third_party/blink/web_tests/FlagExpectations/enable-blink-features=ForceSynchronousHTMLParsing b/third_party/blink/web_tests/FlagExpectations/enable-blink-features=ForceSynchronousHTMLParsing
index c39f613..f8e6daa3 100644
--- a/third_party/blink/web_tests/FlagExpectations/enable-blink-features=ForceSynchronousHTMLParsing
+++ b/third_party/blink/web_tests/FlagExpectations/enable-blink-features=ForceSynchronousHTMLParsing
@@ -8,9 +8,6 @@
 ### external/wpt/service-workers/service-worker/
 crbug.com/901056 external/wpt/service-workers/service-worker/xhr-response-url.https.html [ Crash ]
 
-### virtual/cache-storage-sequence/external/wpt/service-workers/service-worker/
-crbug.com/901056 virtual/cache-storage-sequence/external/wpt/service-workers/service-worker/xhr-response-url.https.html [ Crash ]
-
 ### virtual/omt-worker-fetch/external/wpt/service-workers/service-worker/
 crbug.com/901056 virtual/omt-worker-fetch/external/wpt/service-workers/service-worker/xhr-response-url.https.html [ Crash ]
 
diff --git a/third_party/blink/web_tests/MSANExpectations b/third_party/blink/web_tests/MSANExpectations
index 4455638..068ac88 100644
--- a/third_party/blink/web_tests/MSANExpectations
+++ b/third_party/blink/web_tests/MSANExpectations
@@ -153,3 +153,4 @@
 
 # Sheriff 2020-10-05
 crbug.com/1134580 [ Linux ] virtual/eye-dropper/color-picker-show-eye-dropper.html [ Pass Timeout ]
+crbug.com/1134580 [ Linux ] virtual/dark-color-scheme/virtual/eye-dropper/color-picker-show-eye-dropper.html [ Pass Timeout ]
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations
index a12138c..7e7ed98 100644
--- a/third_party/blink/web_tests/TestExpectations
+++ b/third_party/blink/web_tests/TestExpectations
@@ -979,6 +979,7 @@
 virtual/layout_ng_block_frag/external/wpt/css/css-multicol/multicol-span-all-007.html [ Pass ]
 virtual/layout_ng_block_frag/external/wpt/css/css-multicol/multicol-span-all-008.html [ Pass ]
 virtual/layout_ng_block_frag/external/wpt/css/css-multicol/multicol-span-all-014.html [ Pass ]
+virtual/layout_ng_block_frag/external/wpt/css/css-multicol/multicol-span-all-015.html [ Pass ]
 virtual/layout_ng_block_frag/external/wpt/css/css-multicol/multicol-span-all-fieldset-001.html [ Pass ]
 virtual/layout_ng_block_frag/external/wpt/css/css-multicol/multicol-span-all-margin-bottom-001.xht [ Pass ]
 virtual/layout_ng_block_frag/external/wpt/css/css-multicol/multicol-span-float-001.xht [ Pass ]
@@ -1368,6 +1369,29 @@
 # ====== Form Controls Refresh failures until here ======
 
 
+# ===== These tests fail when Web Components v0 is removed =====
+
+crbug.com/1081941 web-components-v0-only/* [ Skip ]
+crbug.com/1081941 virtual/web-components-v0-disabled/* [ Skip ]
+crbug.com/1081941 http/tests/htmlimports/* [ Skip ]
+crbug.com/1081941 http/tests/custom/xhr-response-does-not-have-registry.html [ Skip ]
+crbug.com/1081941 http/tests/custom-elements/no-registry-test.html [ Skip ]
+crbug.com/1081941 http/tests/devtools/import-open-inspector.js [ Skip ]
+crbug.com/1081941 http/tests/devtools/elements/html-link-import.js [ Skip ]
+crbug.com/1081941 http/tests/devtools/elements/styles-3/style-rule-from-imported-stylesheet.js [ Skip ]
+crbug.com/1081941 http/tests/devtools/network/network-imported-resource-content.js [ Skip ]
+crbug.com/1081941 http/tests/devtools/resource-tree/resource-tree-htmlimports.js [ Skip ]
+crbug.com/1081941 http/tests/linkHeader/link-rel-import-css-rule-capital.html [ Skip ]
+crbug.com/1081941 http/tests/security/contentSecurityPolicy/nonces/import-enforce-allowed.php [ Skip ]
+crbug.com/1081941 http/tests/security/contentSecurityPolicy/nonces/import-enforce-blocked.php [ Skip ]
+crbug.com/1081941 http/tests/security/contentSecurityPolicy/nonces/import-multiple-allowed.php [ Skip ]
+crbug.com/1081941 http/tests/security/contentSecurityPolicy/nonces/import-multiple-blocked.php [ Skip ]
+crbug.com/1081941 http/tests/security/contentSecurityPolicy/nonces/import-reportonly-allowed.php [ Skip ]
+crbug.com/1081941 http/tests/security/referrer-policy-attribute-import-no-referrer.html [ Skip ]
+crbug.com/1081941 http/tests/subresource_filter/resource-in-import-disallowed.html [ Skip ]
+
+# ===== Web Components v0 until here =====
+
 # Bug in FormControlsRefresh <select multiple> tap behavior:
 crbug.com/1045672 fast/forms/select/listbox-tap.html [ Failure ]
 
@@ -3209,6 +3233,7 @@
 crbug.com/957457 virtual/off-main-thread-css-paint/external/wpt/css/css-paint-api/invalid-image-pending-script.https.html [ Crash ]
 crbug.com/1034807 [ Linux ] virtual/off-main-thread-css-paint/external/wpt/css/css-paint-api/paint2d-gradient.https.html [ Failure ]
 crbug.com/1034807 [ Mac ] virtual/off-main-thread-css-paint/external/wpt/css/css-paint-api/paint2d-gradient.https.html [ Failure ]
+crbug.com/1034807 [ Win ] virtual/off-main-thread-css-paint/external/wpt/css/css-paint-api/paint2d-gradient.https.html [ Failure ]
 
 crbug.com/982116 http/tests/devtools/elements/styles-4/styles-new-API.js [ Pass Timeout ]
 
@@ -3270,6 +3295,7 @@
 crbug.com/926685 external/wpt/css/css-multicol/multicol-span-all-010.html [ Failure ]
 crbug.com/915204 external/wpt/css/css-multicol/multicol-span-all-011.html [ Failure ]
 crbug.com/829028 external/wpt/css/css-multicol/multicol-span-all-014.html [ Failure ]
+crbug.com/829028 external/wpt/css/css-multicol/multicol-span-all-015.html [ Failure ]
 crbug.com/892817 external/wpt/css/css-multicol/multicol-span-all-margin-bottom-001.xht [ Failure ]
 crbug.com/636055 external/wpt/css/css-multicol/multicol-span-all-margin-nested-002.xht [ Failure ]
 crbug.com/990240 external/wpt/css/css-multicol/multicol-span-all-rule-001.html [ Failure ]
@@ -5408,9 +5434,6 @@
 crbug.com/1062984 external/wpt/paint-timing/fcp-only/fcp-out-of-bounds-translate.html [ Failure ]
 crbug.com/1062984 external/wpt/paint-timing/fcp-only/fcp-text-input.html [ Failure ]
 
-# Sheriff 2019-03-01
-crbug.com/937416 http/tests/devtools/resource-tree/resource-tree-htmlimports.js [ Pass Failure ]
-
 # Also crbug.com/1044535
 crbug.com/937416 http/tests/devtools/resource-tree/resource-tree-frame-navigate.js [ Pass Failure Timeout ]
 
@@ -5442,7 +5465,6 @@
 crbug.com/945665 http/tests/devtools/elements/styles-3/styles-add-new-rule-tab.js [ Pass Failure ]
 crbug.com/945665 http/tests/devtools/elements/styles-3/styles-add-new-rule.js [ Pass Failure Timeout ]
 crbug.com/945665 http/tests/devtools/elements/styles-3/styles-disable-inherited.js [ Pass Failure ]
-crbug.com/945665 [ Win7 ] http/tests/devtools/elements/styles-3/style-rule-from-imported-stylesheet.js [ Failure Pass ]
 crbug.com/945665 http/tests/devtools/elements/styles-3/styles-change-node-while-editing.js [ Pass Failure ]
 crbug.com/945629 http/tests/devtools/network/network-filters.js [ Pass Failure Timeout ]
 
@@ -6621,6 +6643,10 @@
 crbug.com/1133342 external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/reporting-observer.html [ Pass Failure Timeout ]
 crbug.com/1083605 media/controls-styling-strict.html [ Pass Failure ]
 
+# Transform animation reftests
+crbug.com/1133901 virtual/threaded/external/wpt/css/css-transforms/animation/transform-interpolation-translate-em.html [ Failure ]
+crbug.com/1131252 virtual/threaded/external/wpt/css/css-transforms/animation/transform-interpolation-skew.html [ Failure ]
+
 # Sheriff 2020-09-30
 crbug.com/1133821 virtual/off-main-thread-css-paint/external/wpt/css/css-paint-api/one-custom-property-animation.https.html [ Pass Failure ]
 crbug.com/1133821 virtual/off-main-thread-css-paint/external/wpt/css/css-paint-api/two-custom-property-animation.https.html [ Pass Failure ]
diff --git a/third_party/blink/web_tests/VirtualTestSuites b/third_party/blink/web_tests/VirtualTestSuites
index 43d392c..db8f4ae 100644
--- a/third_party/blink/web_tests/VirtualTestSuites
+++ b/third_party/blink/web_tests/VirtualTestSuites
@@ -43,6 +43,7 @@
               "external/wpt/animation-worklet",
               "external/wpt/css/css-animations",
               "external/wpt/css/css-scroll-snap",
+              "external/wpt/css/css-transforms/animation",
               "external/wpt/feature-policy/experimental-features",
               "external/wpt/html/canvas/offscreen/manual/convert-to-blob",
               "external/wpt/scroll-animations",
@@ -546,9 +547,11 @@
   {
     "prefix": "dark-color-scheme",
     "bases": ["external/wpt/css/css-color-adjust/rendering/dark-color-scheme",
-              "fast/forms/color-scheme"],
+              "fast/forms/color-scheme",
+              "virtual/eye-dropper"],
     "args": ["--force-dark-mode",
-             "--enable-blink-features=CSSColorScheme,CSSColorSchemeUARendering"]
+             "--enable-blink-features=CSSColorScheme,CSSColorSchemeUARendering",
+             "--enable-features=EyeDropper"]
   },
   {
     "prefix": "appcache-origin-trial",
@@ -581,11 +584,6 @@
     "args": ["--disable-blink-features=PaymentRequestTotalOptional"]
   },
   {
-    "prefix": "cache-storage-sequence",
-    "bases": ["external/wpt/service-workers"],
-    "args": ["--enable-features=CacheStorageSequence"]
-  },
-  {
     "prefix": "conditional-appcache-delay",
     "bases": ["http/tests/loading/appcache-delay"],
     "args": ["--enable-features=VerifyHTMLFetchedFromAppCacheBeforeDelay"]
diff --git a/third_party/blink/web_tests/WebGPUExpectations b/third_party/blink/web_tests/WebGPUExpectations
index ea0a3f7c..6af1388 100644
--- a/third_party/blink/web_tests/WebGPUExpectations
+++ b/third_party/blink/web_tests/WebGPUExpectations
@@ -41,12 +41,12 @@
 
 # These tests aren't working on CQ, unclear whether the test or harness (or Chrome) is broken.
 # Mac: mostly works
-# Linux: actual is white/blank
-crbug.com/1083478 [ Linux ] wpt_internal/webgpu/webgpu/web-platform/reftests/canvas_clear.html [ Failure ]
-crbug.com/1083478 [ Linux ] wpt_internal/webgpu/webgpu/web-platform/reftests/canvas_complex_bgra8unorm.html [ Failure ]
-# Win: actual is black
-crbug.com/1083478 [ Win ] wpt_internal/webgpu/webgpu/web-platform/reftests/canvas_clear.html [ Failure ]
-crbug.com/1083478 [ Win ] wpt_internal/webgpu/webgpu/web-platform/reftests/canvas_complex_bgra8unorm.html [ Failure ]
+# Linux: actual is white/blank - is actually crashing silently
+crbug.com/1083478 [ Linux ] wpt_internal/webgpu/webgpu/web-platform/reftests/canvas_clear.html [ Skip ]
+crbug.com/1083478 [ Linux ] wpt_internal/webgpu/webgpu/web-platform/reftests/canvas_complex_bgra8unorm.html [ Skip ]
+# Win: takeScreenshot crashes
+crbug.com/1083478 [ Win ] wpt_internal/webgpu/webgpu/web-platform/reftests/canvas_clear.html [ Skip ]
+crbug.com/1083478 [ Win ] wpt_internal/webgpu/webgpu/web-platform/reftests/canvas_complex_bgra8unorm.html [ Skip ]
 
 #
 # Platform-independent failures
diff --git a/third_party/blink/web_tests/external/wpt/css/css-multicol/multicol-fill-balance-004.html b/third_party/blink/web_tests/external/wpt/css/css-multicol/multicol-fill-balance-004.html
new file mode 100644
index 0000000..1d90cc45
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-multicol/multicol-fill-balance-004.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<link rel="author" title="Morten Stenshorne" href="mstensho@chromium.org">
+<link rel="help" href="https://www.w3.org/TR/css-multicol-1/#cf" title="7.1. column-fill">
+<link rel="match" href="../reference/ref-filled-green-100px-square.xht">
+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+<div style="writing-mode:vertical-rl; columns:2; column-gap:0; inline-size:100px; background:red;">
+  <div style="block-size:20px;">
+    <div style="block-size:200px; background:green;"></div>
+  </div>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-multicol/multicol-span-all-015.html b/third_party/blink/web_tests/external/wpt/css/css-multicol/multicol-span-all-015.html
new file mode 100644
index 0000000..041c211
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-multicol/multicol-span-all-015.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org">
+<link rel="help" href="https://www.w3.org/TR/css-multicol-1/#spanning-columns">
+<link rel="help" href="https://www.w3.org/TR/css-break-3/#break-margins">
+<link rel="match" href="../reference/ref-filled-green-100px-square.xht">
+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+<div style="columns:2; column-gap:0; width:100px; background:red;">
+  <div style="height:30px;"></div>
+  <div style="height:30px; background:green;"></div>
+  <div>
+    <div style="column-span:all; height:40px; background:green;">
+      <div style="width:50px; height:40px; background:red;"></div>
+    </div>
+  </div>
+  <div style="margin-top:-70px; height:130px; background:green;"></div>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/animation/support/transform-interpolation-reftests.js b/third_party/blink/web_tests/external/wpt/css/css-transforms/animation/support/transform-interpolation-reftests.js
new file mode 100644
index 0000000..0094b8a
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-transforms/animation/support/transform-interpolation-reftests.js
@@ -0,0 +1,126 @@
+'use strict';
+
+// Each test is an array of [endpoint, midpoint, endpoint] and tests
+// whether the endpoints interpolate to the same visual state as the midpoint
+const transformTests = {
+  translate: [
+    ['translateX(0px)', 'translateX(25px)', 'translateX(50px)'],
+    ['translateY(0px)', 'translateY(25px)', 'translateY(50px)'],
+    ['translateX(0%)', 'translateX(25%)', 'translateX(50%)'],
+    ['translateY(0%)', 'translateY(25%)', 'translateY(50%)'],
+    ['translateX(50%)', 'translate(25%, 25%)', 'translateY(50%)'],
+    ['translateX(50%)', 'translate(25%, 25px)', 'translateY(50px)'],
+    ['translateX(50px)', 'translateX(calc(25px + 25%))', 'translateX(50%)']
+  ],
+  translateEm: [
+    ['translateX(0em)', 'translateX(2em)', 'translateX(4em)'],
+    ['translateX(-50px)', 'translateX(calc(2em - 25px))', 'translateX(4em)'],
+    ['translateX(50%)', 'translateX(calc(25% - 2em))', 'translateX(-4em)']
+  ],
+  rotate: [
+    ['rotate(0deg)', 'rotate(45deg)', 'rotate(90deg)'],
+    ['rotateX(0deg)', 'rotateX(45deg)', 'rotateX(90deg)'],
+    ['rotateY(0deg)', 'rotateY(45deg)', 'rotateY(90deg)'],
+    ['rotate(0deg)', 'rotate(180deg)', 'rotate(360deg)'],
+    ['rotate3d(7, 8, 9, 0deg)', 'rotate3d(7, 8, 9, 45deg)', 'rotate3d(7, 8, 9, 90deg)'],
+    // First endpoint is the same rotation as rotateZ(0deg) but triggers SLERP
+    ['rotateX(360deg)', 'rotateZ(45deg)', 'rotateZ(90deg)']
+  ],
+  scale: [
+    ['scaleX(0.5)', 'scaleX(0.75)', 'scaleX(1)'],
+    ['scaleY(0.5)', 'scaleY(0.75)', 'scaleY(1)'],
+    ['scale(0.5)', 'scale(0.75)', 'scale(1)'],
+    ['scaleX(0.5)', 'scale(0.75)', 'scaleY(0.5)'],
+    ['scale3d(0.5, 1, 2)', 'scale3d(0.75, 0.75, 3)', 'scale3d(1, 0.5, 4)']
+  ],
+  skew: [
+    ['skewX(0deg)', 'skewX(30deg)', 'skewX(60deg)'],
+    ['skewY(0deg)', 'skewY(30deg)', 'skewY(60deg)'],
+    ['skew(60deg, 0deg)', 'skew(30deg, 30deg)', 'skew(0deg, 60deg)'],
+    ['skewX(0deg) rotate(0deg)', 'skewX(0deg) rotate(180deg)', 'skewX(0deg) rotate(360deg)'],
+    ['skewX(0deg) rotate(0deg)', 'matrix(1, 0, 0, 1, 0, 0)', 'skewY(0deg) rotate(360deg)']
+  ],
+  matrix: [
+    // matched matrix parameters do not collapse the values after them
+    ['matrix(1,0,0,1,0,0) rotate(0deg)', 'matrix(1.5,0,0,1.5,0,0) rotate(180deg)', 'matrix(2,0,0,2,0,0) rotate(360deg)']
+  ]
+}
+
+// Initial setup, which includes properties that will be overridden to
+// test invalidation.
+function initialStyle(div) {
+  div.style.width = '180px';
+  div.style.height = '150px';
+  div.style.margin = '50px';
+  div.style.borderLeft = 'solid 40px blue';
+  div.style.backgroundColor = 'green';
+  div.style.willChange = 'transform';
+  div.style.fontSize = '30px';
+}
+
+function finalStyle(div) {
+  div.style.width = '80px';
+  div.style.height = '80px';
+  div.style.fontSize = '15px';
+}
+
+function styleBody(){
+  let body = document.body;
+  body.style.display = 'flex';
+  body.style.flexDirection = 'row';
+  body.style.flexWrap = 'wrap';
+}
+
+// Simulate a static image at 50% progeress with a running animation.
+// The easing curve has zero slope and curvature at its midpoint of 50% -> 50%.
+// The timing values are chosen so as so that a delay of up to 10s will not
+// cause a visual change.
+const easing = 'cubic-bezier(0,1,1,0)';
+const duration = 1e9;
+const delay = -duration/2;
+
+// Indices to unpack a test case, which is in the format
+// [start, midpoint, end]
+const startIndex = 0;
+const midIndex = 1;
+const endIndex = 2;
+
+async function createTests(tests) {
+  styleBody();
+  for (const test of tests) {
+    let div = document.createElement('div');
+    document.body.appendChild(div);
+    initialStyle(div);
+    var anim = div.animate(
+        {transform: [test[startIndex], test[endIndex]]},
+        {duration: duration, delay: delay, easing: easing});
+    await anim.ready;
+    finalStyle(div);  // Change size to test invalidation.
+  }
+
+  await new Promise(requestAnimationFrame);
+  await new Promise(requestAnimationFrame);
+  takeScreenshot();
+}
+
+// Create references using an animation with identical keyframes for start
+// and end so as to avoid rounding and anti-aliasing differences between
+// animated and non-animated pathways.
+async function createRefs(tests) {
+  styleBody();
+  for (const test of tests) {
+    let div = document.createElement('div');
+    document.body.appendChild(div);
+    initialStyle(div);
+    finalStyle(div);
+    var anim = div.animate(
+        {transform: [test[midIndex], test[midIndex]]},
+        {duration: duration, delay: delay, easing: easing});
+    await anim.ready;
+  }
+
+  await new Promise(requestAnimationFrame);
+  await new Promise(requestAnimationFrame);
+  takeScreenshot();
+}
+
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/animation/transform-interpolation-animated-ref.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/animation/transform-interpolation-animated-ref.html
new file mode 100644
index 0000000..0930a74
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-transforms/animation/transform-interpolation-animated-ref.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+
+<script src="../../../common/reftest-wait.js"></script>
+<script src="support/transform-interpolation-reftests.js"></script>
+
+<body>
+<script>
+const testName = window.location.search.substr(1);
+createRefsWithAnimation(transformTests[testName]);
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/animation/transform-interpolation-matrix.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/animation/transform-interpolation-matrix.html
new file mode 100644
index 0000000..b5f9c3cd
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-transforms/animation/transform-interpolation-matrix.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<link rel="match" href="transform-interpolation-ref.html?matrix">
+<link rel="help" href="https://drafts.csswg.org/css-transforms/">
+
+<script src="../../../common/reftest-wait.js"></script>
+<script src="support/transform-interpolation-reftests.js"></script>
+
+<body>
+<script>
+createTests(transformTests.matrix);
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/animation/transform-interpolation-ref.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/animation/transform-interpolation-ref.html
new file mode 100644
index 0000000..2fee6f7
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-transforms/animation/transform-interpolation-ref.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+
+<script src="../../../common/reftest-wait.js"></script>
+<script src="support/transform-interpolation-reftests.js"></script>
+
+<body>
+<script>
+const testName = window.location.search.substr(1);
+createRefs(transformTests[testName]);
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/animation/transform-interpolation-rotate.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/animation/transform-interpolation-rotate.html
new file mode 100644
index 0000000..9d94d83
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-transforms/animation/transform-interpolation-rotate.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<link rel="match" href="transform-interpolation-ref.html?rotate">
+<link rel="help" href="https://drafts.csswg.org/css-transforms/">
+
+<script src="../../../common/reftest-wait.js"></script>
+<script src="support/transform-interpolation-reftests.js"></script>
+
+<body>
+<script>
+createTests(transformTests.rotate);
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/animation/transform-interpolation-scale.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/animation/transform-interpolation-scale.html
new file mode 100644
index 0000000..ef0da0d
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-transforms/animation/transform-interpolation-scale.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<link rel="match" href="transform-interpolation-ref.html?scale">
+<link rel="help" href="https://drafts.csswg.org/css-transforms/">
+
+<script src="../../../common/reftest-wait.js"></script>
+<script src="support/transform-interpolation-reftests.js"></script>
+
+<body>
+<script>
+createTests(transformTests.scale);
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/animation/transform-interpolation-skew.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/animation/transform-interpolation-skew.html
new file mode 100644
index 0000000..4f8aa52f
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-transforms/animation/transform-interpolation-skew.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<link rel="match" href="transform-interpolation-ref.html?skew">
+<link rel="help" href="https://drafts.csswg.org/css-transforms/">
+
+<script src="../../../common/reftest-wait.js"></script>
+<script src="support/transform-interpolation-reftests.js"></script>
+
+<body>
+<script>
+createTests(transformTests.skew);
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/animation/transform-interpolation-translate-em.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/animation/transform-interpolation-translate-em.html
new file mode 100644
index 0000000..aff613a
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-transforms/animation/transform-interpolation-translate-em.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<link rel="match" href="transform-interpolation-ref.html?translateEm">
+<link rel="help" href="https://drafts.csswg.org/css-transforms/">
+
+<script src="../../../common/reftest-wait.js"></script>
+<script src="support/transform-interpolation-reftests.js"></script>
+
+<body>
+<script>
+createTests(transformTests.translateEm);
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-transforms/animation/transform-interpolation-translate.html b/third_party/blink/web_tests/external/wpt/css/css-transforms/animation/transform-interpolation-translate.html
new file mode 100644
index 0000000..5abeb24
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-transforms/animation/transform-interpolation-translate.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<link rel="match" href="transform-interpolation-ref.html?translate">
+<link rel="help" href="https://drafts.csswg.org/css-transforms/">
+
+<script src="../../../common/reftest-wait.js"></script>
+<script src="support/transform-interpolation-reftests.js"></script>
+
+<body>
+<script>
+createTests(transformTests.translate);
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/custom-elements/historical-expected.txt b/third_party/blink/web_tests/external/wpt/custom-elements/historical-expected.txt
index cfda088..9ba1937 100644
--- a/third_party/blink/web_tests/external/wpt/custom-elements/historical-expected.txt
+++ b/third_party/blink/web_tests/external/wpt/custom-elements/historical-expected.txt
@@ -1,5 +1,5 @@
 This is a testharness.js-based test.
-FAIL document.registerElement should not exist assert_false: expected false got true
+PASS document.registerElement should not exist
 FAIL document.createElement(localName, "string") should not work assert_false: expected false got true
 FAIL document.createElementNS(namespace, qualifiedName, "string") should not work assert_false: expected false got true
 Harness: the test ran to completion.
diff --git a/third_party/blink/web_tests/external/wpt/shadow-dom/historical-expected.txt b/third_party/blink/web_tests/external/wpt/shadow-dom/historical-expected.txt
index cd93b8b2..14ab3be 100644
--- a/third_party/blink/web_tests/external/wpt/shadow-dom/historical-expected.txt
+++ b/third_party/blink/web_tests/external/wpt/shadow-dom/historical-expected.txt
@@ -1,7 +1,7 @@
 This is a testharness.js-based test.
-FAIL element.createShadowRoot should not exist assert_false: expected false got true
-FAIL element.getDestinationInsertionPoints should not exist assert_false: expected false got true
-FAIL text.getDestinationInsertionPoints should not exist assert_false: expected false got true
+PASS element.createShadowRoot should not exist
+PASS element.getDestinationInsertionPoints should not exist
+PASS text.getDestinationInsertionPoints should not exist
 FAIL event.path should not exist assert_false: expected false got true
 FAIL HTMLContentElement should not exist assert_false: expected false got true
 Harness: the test ran to completion.
diff --git a/third_party/blink/web_tests/fast/dom/resources/timer-throttling-frame.html b/third_party/blink/web_tests/fast/dom/resources/timer-throttling-frame.html
index 2d63c86..72c0ff91 100644
--- a/third_party/blink/web_tests/fast/dom/resources/timer-throttling-frame.html
+++ b/third_party/blink/web_tests/fast/dom/resources/timer-throttling-frame.html
@@ -1,6 +1,6 @@
 <!DOCTYPE html>
 
-<!-- Measures the delay between two successive short-delay timeouts. 
+<!-- Measures the delay between two successive short-delay timeouts.
   Note that scheduler allows a small number of quick tasks to run without
   throttling, so the delay is 20ms to avoid this.
 -->
@@ -12,6 +12,6 @@
       let end = performance.now();
       e.source.postMessage(end - start, e.origin);
     }, 20);
-  }, 0);
+  }, 20);
 });
 </script>
diff --git a/third_party/blink/web_tests/fast/dom/timer-throttling-out-of-view-cross-origin-page.html b/third_party/blink/web_tests/fast/dom/timer-throttling-out-of-view-cross-origin-page.html
index affb47c..2f138bc 100644
--- a/third_party/blink/web_tests/fast/dom/timer-throttling-out-of-view-cross-origin-page.html
+++ b/third_party/blink/web_tests/fast/dom/timer-throttling-out-of-view-cross-origin-page.html
@@ -20,9 +20,7 @@
   // Throttling only happens after the first layout, so start the test after
   // that.
   requestAnimationFrame(() => {
-    setTimeout(() => {
-      frame.contentWindow.postMessage(null, '*');
-    });
+    frame.contentWindow.postMessage(null, '*');
   });
 });
 
diff --git a/third_party/blink/web_tests/fast/forms/color-scheme/href/href-appearance-basic.html b/third_party/blink/web_tests/fast/forms/color-scheme/href/href-appearance-basic.html
new file mode 100644
index 0000000..a815e8a
--- /dev/null
+++ b/third_party/blink/web_tests/fast/forms/color-scheme/href/href-appearance-basic.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+
+<head>
+    <meta name="color-scheme" content="light dark">
+</head>
+
+<body>
+    <ul>
+        <li><a href="#" id="website1">Website</a></li>
+        <li><a href="#" id="website2">Website - Active</a></li>
+    </ul>
+</body>
+
+<script>
+    var website2 = document.getElementById("website2");
+
+    var mouseX = website2.offsetLeft;
+    var mouseY = website2.offsetTop;
+    eventSender.mouseMoveTo(mouseX, mouseY);
+    eventSender.mouseDown();
+</script>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/http/tests/origin_trials/webexposed/webcomponentsv0-basic-import-disabled.html b/third_party/blink/web_tests/http/tests/origin_trials/webexposed/webcomponentsv0-basic-import-disabled.html
deleted file mode 100644
index 6c825cfb..0000000
--- a/third_party/blink/web_tests/http/tests/origin_trials/webexposed/webcomponentsv0-basic-import-disabled.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-
-<link id="target" rel="import" href="resources/html-imports-hello.html">
-
-<script src="../../../../resources/testharness.js"></script>
-<script src="../../../../resources/testharnessreport.js"></script>
-<script>
-// Behavior is different depending on if the runtime flag is enabled.
-if (self.internals.runtimeFlags.htmlImportsEnabled) {
-	// Runtime flag is enabled, so import will actually work. Explicitly call
-	// done() to avoid timeout while test framework waits for a test to run.
-	setup({single_test: true});
-	done();
-} else {
-  test(() => {
-  	  assert_equals(target.import, undefined);
-    }, 'Basic html file should not be imported');
-}
-</script>
diff --git a/third_party/blink/web_tests/http/tests/origin_trials/webexposed/webcomponentsv0-basic-import-enabled-insecure-context.html b/third_party/blink/web_tests/http/tests/origin_trials/webexposed/webcomponentsv0-basic-import-enabled-insecure-context.html
deleted file mode 100644
index 695b9cc277..0000000
--- a/third_party/blink/web_tests/http/tests/origin_trials/webexposed/webcomponentsv0-basic-import-enabled-insecure-context.html
+++ /dev/null
@@ -1,23 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<!-- NOTE: The token must match the UNAUTHENTICATED_ORIGIN used in the test.
-  Generate this token with the command:
-generate_token.py http://example.test:8000 WebComponentsV0 --expire-timestamp=2000000000
--->
-<meta http-equiv="origin-trial" content="ApvQmWyEJ1hMIUp80AK+wjmYaGlmF2UA9MSWCt5vej5J+gj5XsYaAyyczK5df2RvdvrgZ8YloMdZRXp3v1pi9AoAAABaeyJvcmlnaW4iOiAiaHR0cDovL2V4YW1wbGUudGVzdDo4MDAwIiwgImZlYXR1cmUiOiAiV2ViQ29tcG9uZW50c1YwIiwgImV4cGlyeSI6IDIwMDAwMDAwMDB9"/>
-
-<link id="target" rel="import" href="resources/html-imports-hello.html">  
-
-<script src="../../resources/testharness.js"></script>
-<script src="../../resources/testharnessreport.js"></script>
-<script src="../../resources/get-host-info.js"></script>
-<script>
-  if (window.location.origin != get_host_info().UNAUTHENTICATED_ORIGIN) {
-    window.location = get_host_info().UNAUTHENTICATED_ORIGIN +
-      window.location.pathname;
-  } else {
-    test(() => {
-        assert_equals(target.import.querySelector('h1').textContent, 'Hello');
-      }, 'Basic html file should be imported in insecure context');
-  }
-</script>
diff --git a/third_party/blink/web_tests/http/tests/origin_trials/webexposed/webcomponentsv0-basic-import-enabled.html b/third_party/blink/web_tests/http/tests/origin_trials/webexposed/webcomponentsv0-basic-import-enabled.html
deleted file mode 100644
index c94fb44..0000000
--- a/third_party/blink/web_tests/http/tests/origin_trials/webexposed/webcomponentsv0-basic-import-enabled.html
+++ /dev/null
@@ -1,16 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<!-- Generate this token with the command:
-generate_token.py http://127.0.0.1:8000 WebComponentsV0 --expire-timestamp=2000000000
--->
-<meta http-equiv="origin-trial" content="Ar9dxxaQ+S9WJDVAL5PqZEtGNqgN2jeewmtzi1+9TK2oavYps7dKu36815FgbztKvcJJ2QATr2g0k0U6nQaDOAMAAABXeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiV2ViQ29tcG9uZW50c1YwIiwgImV4cGlyeSI6IDIwMDAwMDAwMDB9" />
-
-<link id="target" rel="import" href="resources/html-imports-hello.html">
-
-<script src="../../../../resources/testharness.js"></script>
-<script src="../../../../resources/testharnessreport.js"></script>
-<script>
-  test(() => {
-  	  assert_equals(target.import.querySelector('h1').textContent, 'Hello');
-    }, 'Basic html file should be imported');
-</script>
diff --git a/third_party/blink/web_tests/http/tests/origin_trials/webexposed/webcomponentsv0-nested-import-disabled.html b/third_party/blink/web_tests/http/tests/origin_trials/webexposed/webcomponentsv0-nested-import-disabled.html
deleted file mode 100644
index 58aba60..0000000
--- a/third_party/blink/web_tests/http/tests/origin_trials/webexposed/webcomponentsv0-nested-import-disabled.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-
-<link id="target" rel="import" href="resources/html-imports-parent.html">
-
-<script src="../../../../resources/testharness.js"></script>
-<script src="../../../../resources/testharnessreport.js"></script>
-<script>
-  // Behavior is different depending on if the runtime flag is enabled.
-  if (self.internals.runtimeFlags.htmlImportsEnabled) {
-    // Runtime flag is enabled, so import will actually work. Explicitly call
-    // done() to avoid timeout while test framework waits for a test to run.
-    setup({single_test: true});
-    done();
-  } else {
-    test(() => {
-      assert_equals(document.nestedChildScriptHasRun, undefined);
-    }, 'Script should not run in nested child import');
-  }
-</script>
diff --git a/third_party/blink/web_tests/http/tests/origin_trials/webexposed/webcomponentsv0-nested-import-enabled.html b/third_party/blink/web_tests/http/tests/origin_trials/webexposed/webcomponentsv0-nested-import-enabled.html
deleted file mode 100644
index 46db5a6..0000000
--- a/third_party/blink/web_tests/http/tests/origin_trials/webexposed/webcomponentsv0-nested-import-enabled.html
+++ /dev/null
@@ -1,16 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<!-- Generate this token with the command:
-generate_token.py http://127.0.0.1:8000 WebComponentsV0 --expire-timestamp=2000000000
--->
-<meta http-equiv="origin-trial" content="Ar9dxxaQ+S9WJDVAL5PqZEtGNqgN2jeewmtzi1+9TK2oavYps7dKu36815FgbztKvcJJ2QATr2g0k0U6nQaDOAMAAABXeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiV2ViQ29tcG9uZW50c1YwIiwgImV4cGlyeSI6IDIwMDAwMDAwMDB9" />
-
-<link id="target" rel="import" href="resources/html-imports-parent.html">
-
-<script src="../../../../resources/testharness.js"></script>
-<script src="../../../../resources/testharnessreport.js"></script>
-<script>
-  test(() => {
-  	  assert_true(document.nestedChildScriptHasRun);
-    }, 'Script should run in nested child import');
-</script>
diff --git a/third_party/blink/web_tests/http/tests/origin_trials/webexposed/webcomponentsv0-usecounter-customelementv0.html b/third_party/blink/web_tests/http/tests/origin_trials/webexposed/webcomponentsv0-usecounter-customelementv0.html
deleted file mode 100644
index 71c247c..0000000
--- a/third_party/blink/web_tests/http/tests/origin_trials/webexposed/webcomponentsv0-usecounter-customelementv0.html
+++ /dev/null
@@ -1,21 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<!-- Generate this token with the command:
-generate_token.py http://127.0.0.1:8000 WebComponentsV0 --expire-timestamp=2000000000
--->
-<meta http-equiv="origin-trial" content="Ar9dxxaQ+S9WJDVAL5PqZEtGNqgN2jeewmtzi1+9TK2oavYps7dKu36815FgbztKvcJJ2QATr2g0k0U6nQaDOAMAAABXeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiV2ViQ29tcG9uZW50c1YwIiwgImV4cGlyeSI6IDIwMDAwMDAwMDB9" />
-
-<div id="div"></div>
-
-<script src="../../../../resources/testharness.js"></script>
-<script src="../../../../resources/testharnessreport.js"></script>
-<script>
-test(() => {
-  // From blink/public/mojom/web_feature/web_feature.mojom
-  const DocumentRegisterElementOnReverseOriginTrials = 2849;
-  assert_false(internals.isUseCounted(document, DocumentRegisterElementOnReverseOriginTrials));
-  document.registerElement('my-tag');
-  const isCounted = internals.isUseCounted(document, DocumentRegisterElementOnReverseOriginTrials);
-  assert_true(isCounted);
-}, 'Comfirm DocumentRegisterElementOnReverseOriginTrials counter');
-</script>
diff --git a/third_party/blink/web_tests/http/tests/origin_trials/webexposed/webcomponentsv0-usecounter-htmlimports.html b/third_party/blink/web_tests/http/tests/origin_trials/webexposed/webcomponentsv0-usecounter-htmlimports.html
deleted file mode 100644
index fe11caf..0000000
--- a/third_party/blink/web_tests/http/tests/origin_trials/webexposed/webcomponentsv0-usecounter-htmlimports.html
+++ /dev/null
@@ -1,21 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<!-- Generate this token with the command:
-generate_token.py http://127.0.0.1:8000 WebComponentsV0 --expire-timestamp=2000000000
--->
-<meta http-equiv="origin-trial" content="Ar9dxxaQ+S9WJDVAL5PqZEtGNqgN2jeewmtzi1+9TK2oavYps7dKu36815FgbztKvcJJ2QATr2g0k0U6nQaDOAMAAABXeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiV2ViQ29tcG9uZW50c1YwIiwgImV4cGlyeSI6IDIwMDAwMDAwMDB9" />
-
-<div id="div"></div>
-
-<script src="../../../../resources/testharness.js"></script>
-<script src="../../../../resources/testharnessreport.js"></script>
-<script>
-test(() => {
-  // From blink/public/mojom/web_feature/web_feature.mojom
-  const HTMLImportsOnReverseOriginTrials = 2847;
-  assert_false(internals.isUseCounted(document, HTMLImportsOnReverseOriginTrials));
-  div.innerHTML = "<link id='target' rel='import' href='resources/html-imports-hello.html'>"
-  const isCounted = internals.isUseCounted(document, HTMLImportsOnReverseOriginTrials);
-  assert_true(isCounted);
-}, 'Comfirm HTMLImportsOnReverseOriginTrials counter');
-</script>
diff --git a/third_party/blink/web_tests/http/tests/origin_trials/webexposed/webcomponentsv0-usecounter-shadowdomv0.html b/third_party/blink/web_tests/http/tests/origin_trials/webexposed/webcomponentsv0-usecounter-shadowdomv0.html
deleted file mode 100644
index 5443751..0000000
--- a/third_party/blink/web_tests/http/tests/origin_trials/webexposed/webcomponentsv0-usecounter-shadowdomv0.html
+++ /dev/null
@@ -1,21 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<!-- Generate this token with the command:
-generate_token.py http://127.0.0.1:8000 WebComponentsV0 --expire-timestamp=2000000000
--->
-<meta http-equiv="origin-trial" content="Ar9dxxaQ+S9WJDVAL5PqZEtGNqgN2jeewmtzi1+9TK2oavYps7dKu36815FgbztKvcJJ2QATr2g0k0U6nQaDOAMAAABXeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiV2ViQ29tcG9uZW50c1YwIiwgImV4cGlyeSI6IDIwMDAwMDAwMDB9" />
-
-<div id="div"></div>
-
-<script src="../../../../resources/testharness.js"></script>
-<script src="../../../../resources/testharnessreport.js"></script>
-<script>
-test(() => {
-  // From blink/public/mojom/web_feature/web_feature.mojom
-  const ElementCreateShadowRootOnReverseOriginTrials = 2848;
-  assert_false(internals.isUseCounted(document, ElementCreateShadowRootOnReverseOriginTrials));
-  div.createShadowRoot();
-  const isCounted = internals.isUseCounted(document, ElementCreateShadowRootOnReverseOriginTrials);
-  assert_true(isCounted);
-}, 'Comfirm ElementCreateShadowRootOnReverseOriginTrials counter');
-</script>
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/href/href-appearance-basic-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/href/href-appearance-basic-expected.png
new file mode 100644
index 0000000..5278e1e
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/href/href-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/fast/forms/color-scheme/href/href-appearance-basic-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/fast/forms/color-scheme/href/href-appearance-basic-expected.png
new file mode 100644
index 0000000..3595ce6a
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/fast/forms/color-scheme/href/href-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/color/color-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/color/color-picker-appearance-expected.png
index 5dae442..b9dcce2 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/color/color-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/color/color-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/color/color-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/color/color-suggestion-picker-appearance-expected.png
new file mode 100644
index 0000000..c38969ef
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/color/color-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/color/color-suggestion-picker-appearance-with-scrollbar-expected.png b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/color/color-suggestion-picker-appearance-with-scrollbar-expected.png
new file mode 100644
index 0000000..c2729ae
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/color/color-suggestion-picker-appearance-with-scrollbar-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/href/href-appearance-basic-expected.png b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/href/href-appearance-basic-expected.png
new file mode 100644
index 0000000..6a1a0c5
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/href/href-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/virtual/eye-dropper/color-picker-show-eye-dropper-expected.png b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/virtual/eye-dropper/color-picker-show-eye-dropper-expected.png
new file mode 100644
index 0000000..ba69b29
--- /dev/null
+++ b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/virtual/eye-dropper/color-picker-show-eye-dropper-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/fast/forms/color-scheme/href/href-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/fast/forms/color-scheme/href/href-appearance-basic-expected.png
new file mode 100644
index 0000000..32a2132
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/fast/forms/color-scheme/href/href-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/dark-color-scheme/fast/forms/color-scheme/href/href-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/dark-color-scheme/fast/forms/color-scheme/href/href-appearance-basic-expected.png
new file mode 100644
index 0000000..5b78ebf
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/dark-color-scheme/fast/forms/color-scheme/href/href-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/controls-refresh-hc/fast/forms/color-scheme/href/href-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/controls-refresh-hc/fast/forms/color-scheme/href/href-appearance-basic-expected.png
new file mode 100644
index 0000000..32a2132
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/controls-refresh-hc/fast/forms/color-scheme/href/href-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/dark-color-scheme/fast/forms/color-scheme/href/href-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/dark-color-scheme/fast/forms/color-scheme/href/href-appearance-basic-expected.png
new file mode 100644
index 0000000..5b78ebf
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/dark-color-scheme/fast/forms/color-scheme/href/href-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/controls-refresh-hc/fast/forms/color-scheme/href/href-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/controls-refresh-hc/fast/forms/color-scheme/href/href-appearance-basic-expected.png
new file mode 100644
index 0000000..32a2132
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/controls-refresh-hc/fast/forms/color-scheme/href/href-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/dark-color-scheme/fast/forms/color-scheme/href/href-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/dark-color-scheme/fast/forms/color-scheme/href/href-appearance-basic-expected.png
new file mode 100644
index 0000000..5b78ebf
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/dark-color-scheme/fast/forms/color-scheme/href/href-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/controls-refresh-hc/fast/forms/color-scheme/href/href-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/controls-refresh-hc/fast/forms/color-scheme/href/href-appearance-basic-expected.png
new file mode 100644
index 0000000..32a2132
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/controls-refresh-hc/fast/forms/color-scheme/href/href-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/dark-color-scheme/fast/forms/color-scheme/href/href-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/dark-color-scheme/fast/forms/color-scheme/href/href-appearance-basic-expected.png
new file mode 100644
index 0000000..5b78ebf
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/dark-color-scheme/fast/forms/color-scheme/href/href-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/href/href-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/href/href-appearance-basic-expected.png
new file mode 100644
index 0000000..32a2132
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/href/href-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/href/href-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/href/href-appearance-basic-expected.png
new file mode 100644
index 0000000..32a2132
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/href/href-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/color/color-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/color/color-picker-appearance-expected.png
index 56640826..019dd0b 100644
--- a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/color/color-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/color/color-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/color/color-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/color/color-suggestion-picker-appearance-expected.png
new file mode 100644
index 0000000..4928904
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/color/color-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/color/color-suggestion-picker-appearance-with-scrollbar-expected.png b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/color/color-suggestion-picker-appearance-with-scrollbar-expected.png
new file mode 100644
index 0000000..61e06f70
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/color/color-suggestion-picker-appearance-with-scrollbar-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/href/href-appearance-basic-expected.png b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/href/href-appearance-basic-expected.png
new file mode 100644
index 0000000..5b78ebf
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/href/href-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/virtual/eye-dropper/color-picker-show-eye-dropper-expected.png b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/virtual/eye-dropper/color-picker-show-eye-dropper-expected.png
new file mode 100644
index 0000000..d0f466fcf
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/virtual/eye-dropper/color-picker-show-eye-dropper-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/href/href-appearance-basic-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/href/href-appearance-basic-expected.png
new file mode 100644
index 0000000..c3216f2
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/href/href-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/fast/forms/color-scheme/href/href-appearance-basic-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/fast/forms/color-scheme/href/href-appearance-basic-expected.png
new file mode 100644
index 0000000..032f0f77
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/fast/forms/color-scheme/href/href-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/color/color-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/color/color-picker-appearance-expected.png
index 60e26a3..64b6e3d7 100644
--- a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/color/color-picker-appearance-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/color/color-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/color/color-suggestion-picker-appearance-expected.png b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/color/color-suggestion-picker-appearance-expected.png
new file mode 100644
index 0000000..8b09fd4
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/color/color-suggestion-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/color/color-suggestion-picker-appearance-with-scrollbar-expected.png b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/color/color-suggestion-picker-appearance-with-scrollbar-expected.png
new file mode 100644
index 0000000..5ad8a4e
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/color/color-suggestion-picker-appearance-with-scrollbar-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/href/href-appearance-basic-expected.png b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/href/href-appearance-basic-expected.png
new file mode 100644
index 0000000..69fc1f5e
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/href/href-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/virtual/eye-dropper/color-picker-show-eye-dropper-expected.png b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/virtual/eye-dropper/color-picker-show-eye-dropper-expected.png
new file mode 100644
index 0000000..df07c72
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/virtual/eye-dropper/color-picker-show-eye-dropper-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization-disable-yuv/images/yuv-decode-eligible/color-profile-border-radius-expected.png b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization-disable-yuv/images/yuv-decode-eligible/color-profile-border-radius-expected.png
index 296830b..f605ffa 100644
--- a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization-disable-yuv/images/yuv-decode-eligible/color-profile-border-radius-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization-disable-yuv/images/yuv-decode-eligible/color-profile-border-radius-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization-disable-yuv/images/yuv-decode-eligible/color-profile-filter-expected.png b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization-disable-yuv/images/yuv-decode-eligible/color-profile-filter-expected.png
index e224b08a..f7a5ff2 100644
--- a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization-disable-yuv/images/yuv-decode-eligible/color-profile-filter-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization-disable-yuv/images/yuv-decode-eligible/color-profile-filter-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization-disable-yuv/images/yuv-decode-eligible/color-profile-image-expected.png b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization-disable-yuv/images/yuv-decode-eligible/color-profile-image-expected.png
index 6225e0a..ffe3813 100644
--- a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization-disable-yuv/images/yuv-decode-eligible/color-profile-image-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization-disable-yuv/images/yuv-decode-eligible/color-profile-image-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization-disable-yuv/images/yuv-decode-eligible/color-profile-image-profile-match-expected.png b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization-disable-yuv/images/yuv-decode-eligible/color-profile-image-profile-match-expected.png
index b6a8beb3d..0c2af13 100644
--- a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization-disable-yuv/images/yuv-decode-eligible/color-profile-image-profile-match-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization-disable-yuv/images/yuv-decode-eligible/color-profile-image-profile-match-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization-disable-yuv/images/yuv-decode-eligible/webp-no-color-profile-lossy-expected.png b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization-disable-yuv/images/yuv-decode-eligible/webp-no-color-profile-lossy-expected.png
index 622c0d1..b419bff 100644
--- a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization-disable-yuv/images/yuv-decode-eligible/webp-no-color-profile-lossy-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization-disable-yuv/images/yuv-decode-eligible/webp-no-color-profile-lossy-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/color-profile-background-image-cover-expected.png b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/color-profile-background-image-cover-expected.png
index f220edc..cb4cc2b0 100644
--- a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/color-profile-background-image-cover-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/color-profile-background-image-cover-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/color-profile-background-image-repeat-expected.png b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/color-profile-background-image-repeat-expected.png
index 1ad18ce..3209d53 100644
--- a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/color-profile-background-image-repeat-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/color-profile-background-image-repeat-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/color-profile-background-image-space-expected.png b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/color-profile-background-image-space-expected.png
index ac6cb8d..01fd3cd0 100644
--- a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/color-profile-background-image-space-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/color-profile-background-image-space-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/color-profile-border-image-expected.png b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/color-profile-border-image-expected.png
new file mode 100644
index 0000000..fade0fb5
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/color-profile-border-image-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/color-profile-image-canvas-expected.png b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/color-profile-image-canvas-expected.png
index 708af9e..65885e1 100644
--- a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/color-profile-image-canvas-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/color-profile-image-canvas-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/color-profile-image-canvas-pattern-expected.png b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/color-profile-image-canvas-pattern-expected.png
index e1f93bd7..026b36f 100644
--- a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/color-profile-image-canvas-pattern-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/color-profile-image-canvas-pattern-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/color-profile-image-filter-all-expected.png b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/color-profile-image-filter-all-expected.png
index 2ef7fed..60234a68 100644
--- a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/color-profile-image-filter-all-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/color-profile-image-filter-all-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/color-profile-mask-image-svg-expected.png b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/color-profile-mask-image-svg-expected.png
index 9aae273..049267c 100644
--- a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/color-profile-mask-image-svg-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/color-profile-mask-image-svg-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/color-profile-object-expected.png b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/color-profile-object-expected.png
index f8b7f7a..848aca5 100644
--- a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/color-profile-object-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/color-profile-object-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/color-profile-svg-expected.png b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/color-profile-svg-expected.png
new file mode 100644
index 0000000..8811964
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/color-profile-svg-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/color-profile-svg-fill-text-expected.png b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/color-profile-svg-fill-text-expected.png
index 487d226..bf6b3984 100644
--- a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/color-profile-svg-fill-text-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/color-profile-svg-fill-text-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/cross-fade-background-size-expected.png b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/cross-fade-background-size-expected.png
index ff3c4d1..4c229be 100644
--- a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/cross-fade-background-size-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/cross-fade-background-size-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/cross-fade-overflow-position-expected.png b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/cross-fade-overflow-position-expected.png
index 3b7bf55..5f6514fa 100644
--- a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/cross-fade-overflow-position-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/cross-fade-overflow-position-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/jpeg-yuv-progressive-image-expected.png b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/jpeg-yuv-progressive-image-expected.png
new file mode 100644
index 0000000..3bfea43
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/jpeg-yuv-progressive-image-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/rgb-png-with-cmyk-color-profile-expected.png b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/rgb-png-with-cmyk-color-profile-expected.png
new file mode 100644
index 0000000..198816d
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/rgb-png-with-cmyk-color-profile-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/sprite-no-bleed-expected.png b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/sprite-no-bleed-expected.png
index 50c2ded..ca40b5c 100644
--- a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/sprite-no-bleed-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/sprite-no-bleed-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/ycbcr-with-cmyk-color-profile-expected.png b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/ycbcr-with-cmyk-color-profile-expected.png
index f72a8cc..7b4d6c5e 100644
--- a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/ycbcr-with-cmyk-color-profile-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/ycbcr-with-cmyk-color-profile-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/yuv-decode-eligible/color-profile-filter-expected.png b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/yuv-decode-eligible/color-profile-filter-expected.png
index e224b08a..f7a5ff2 100644
--- a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/yuv-decode-eligible/color-profile-filter-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/yuv-decode-eligible/color-profile-filter-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/yuv-decode-eligible/color-profile-image-expected.png b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/yuv-decode-eligible/color-profile-image-expected.png
index 6225e0a..ffe3813 100644
--- a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/yuv-decode-eligible/color-profile-image-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/yuv-decode-eligible/color-profile-image-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/yuv-decode-eligible/color-profile-image-profile-match-expected.png b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/yuv-decode-eligible/color-profile-image-profile-match-expected.png
index b6a8beb3d..0c2af13 100644
--- a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/yuv-decode-eligible/color-profile-image-profile-match-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/yuv-decode-eligible/color-profile-image-profile-match-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/yuv-decode-eligible/webp-no-color-profile-lossy-expected.png b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/yuv-decode-eligible/webp-no-color-profile-lossy-expected.png
index 622c0d1..b419bff 100644
--- a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/yuv-decode-eligible/webp-no-color-profile-lossy-expected.png
+++ b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/yuv-decode-eligible/webp-no-color-profile-lossy-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/fast/forms/color-scheme/href/href-appearance-basic-expected.png b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/fast/forms/color-scheme/href/href-appearance-basic-expected.png
new file mode 100644
index 0000000..032f0f77
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/fast/forms/color-scheme/href/href-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/dark-color-scheme/fast/forms/color-scheme/href/href-appearance-basic-expected.png b/third_party/blink/web_tests/platform/win7/virtual/dark-color-scheme/fast/forms/color-scheme/href/href-appearance-basic-expected.png
new file mode 100644
index 0000000..69fc1f5e
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/dark-color-scheme/fast/forms/color-scheme/href/href-appearance-basic-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization-disable-yuv/images/yuv-decode-eligible/color-profile-border-radius-expected.png b/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization-disable-yuv/images/yuv-decode-eligible/color-profile-border-radius-expected.png
new file mode 100644
index 0000000..f605ffa
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization-disable-yuv/images/yuv-decode-eligible/color-profile-border-radius-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization-disable-yuv/images/yuv-decode-eligible/color-profile-filter-expected.png b/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization-disable-yuv/images/yuv-decode-eligible/color-profile-filter-expected.png
new file mode 100644
index 0000000..f7a5ff2
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization-disable-yuv/images/yuv-decode-eligible/color-profile-filter-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization-disable-yuv/images/yuv-decode-eligible/color-profile-image-expected.png b/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization-disable-yuv/images/yuv-decode-eligible/color-profile-image-expected.png
new file mode 100644
index 0000000..ffe3813
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization-disable-yuv/images/yuv-decode-eligible/color-profile-image-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization-disable-yuv/images/yuv-decode-eligible/color-profile-image-profile-match-expected.png b/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization-disable-yuv/images/yuv-decode-eligible/color-profile-image-profile-match-expected.png
new file mode 100644
index 0000000..0c2af13
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization-disable-yuv/images/yuv-decode-eligible/color-profile-image-profile-match-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization-disable-yuv/images/yuv-decode-eligible/webp-no-color-profile-lossy-expected.png b/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization-disable-yuv/images/yuv-decode-eligible/webp-no-color-profile-lossy-expected.png
new file mode 100644
index 0000000..b419bff
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization-disable-yuv/images/yuv-decode-eligible/webp-no-color-profile-lossy-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/color-profile-background-image-cover-expected.png b/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/color-profile-background-image-cover-expected.png
new file mode 100644
index 0000000..cb4cc2b0
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/color-profile-background-image-cover-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/color-profile-background-image-repeat-expected.png b/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/color-profile-background-image-repeat-expected.png
new file mode 100644
index 0000000..3209d53
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/color-profile-background-image-repeat-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/color-profile-background-image-space-expected.png b/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/color-profile-background-image-space-expected.png
new file mode 100644
index 0000000..01fd3cd0
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/color-profile-background-image-space-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/color-profile-border-image-expected.png b/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/color-profile-border-image-expected.png
new file mode 100644
index 0000000..fade0fb5
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/color-profile-border-image-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/color-profile-image-canvas-expected.png b/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/color-profile-image-canvas-expected.png
new file mode 100644
index 0000000..65885e1
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/color-profile-image-canvas-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/color-profile-image-canvas-pattern-expected.png b/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/color-profile-image-canvas-pattern-expected.png
new file mode 100644
index 0000000..026b36f
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/color-profile-image-canvas-pattern-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/color-profile-image-filter-all-expected.png b/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/color-profile-image-filter-all-expected.png
new file mode 100644
index 0000000..60234a68
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/color-profile-image-filter-all-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/color-profile-mask-image-svg-expected.png b/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/color-profile-mask-image-svg-expected.png
new file mode 100644
index 0000000..049267c
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/color-profile-mask-image-svg-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/color-profile-object-expected.png b/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/color-profile-object-expected.png
new file mode 100644
index 0000000..848aca5
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/color-profile-object-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/color-profile-svg-expected.png b/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/color-profile-svg-expected.png
new file mode 100644
index 0000000..8811964
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/color-profile-svg-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/color-profile-svg-fill-text-expected.png b/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/color-profile-svg-fill-text-expected.png
new file mode 100644
index 0000000..bf6b3984
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/color-profile-svg-fill-text-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/cross-fade-background-size-expected.png b/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/cross-fade-background-size-expected.png
new file mode 100644
index 0000000..4c229be
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/cross-fade-background-size-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/cross-fade-overflow-position-expected.png b/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/cross-fade-overflow-position-expected.png
new file mode 100644
index 0000000..5f6514fa
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/cross-fade-overflow-position-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/jpeg-yuv-progressive-image-expected.png b/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/jpeg-yuv-progressive-image-expected.png
new file mode 100644
index 0000000..3bfea43
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/jpeg-yuv-progressive-image-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/rgb-png-with-cmyk-color-profile-expected.png b/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/rgb-png-with-cmyk-color-profile-expected.png
new file mode 100644
index 0000000..198816d
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/rgb-png-with-cmyk-color-profile-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/sprite-no-bleed-expected.png b/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/sprite-no-bleed-expected.png
new file mode 100644
index 0000000..ca40b5c
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/sprite-no-bleed-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/ycbcr-with-cmyk-color-profile-expected.png b/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/ycbcr-with-cmyk-color-profile-expected.png
new file mode 100644
index 0000000..7b4d6c5e
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/ycbcr-with-cmyk-color-profile-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/yuv-decode-eligible/color-profile-filter-expected.png b/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/yuv-decode-eligible/color-profile-filter-expected.png
new file mode 100644
index 0000000..f7a5ff2
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/yuv-decode-eligible/color-profile-filter-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/yuv-decode-eligible/color-profile-image-expected.png b/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/yuv-decode-eligible/color-profile-image-expected.png
new file mode 100644
index 0000000..ffe3813
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/yuv-decode-eligible/color-profile-image-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/yuv-decode-eligible/color-profile-image-profile-match-expected.png b/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/yuv-decode-eligible/color-profile-image-profile-match-expected.png
new file mode 100644
index 0000000..0c2af13
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/yuv-decode-eligible/color-profile-image-profile-match-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/yuv-decode-eligible/webp-no-color-profile-lossy-expected.png b/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/yuv-decode-eligible/webp-no-color-profile-lossy-expected.png
new file mode 100644
index 0000000..b419bff
--- /dev/null
+++ b/third_party/blink/web_tests/platform/win7/virtual/gpu-rasterization/images/yuv-decode-eligible/webp-no-color-profile-lossy-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/virtual/cache-storage-sequence/external/wpt/service-workers/README.txt b/third_party/blink/web_tests/virtual/cache-storage-sequence/external/wpt/service-workers/README.txt
deleted file mode 100644
index 42eab14..0000000
--- a/third_party/blink/web_tests/virtual/cache-storage-sequence/external/wpt/service-workers/README.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-This suite runs the ServiceWorker and CacheStorage tests with the
-CacheStorageSequence feature enabled.  This makes CacheStorage operate on
-the IO thread in the browser process.
diff --git a/third_party/blink/web_tests/virtual/eye-dropper/color-picker-show-eye-dropper.html b/third_party/blink/web_tests/virtual/eye-dropper/color-picker-show-eye-dropper.html
index 2643b4c..6bb5042c 100644
--- a/third_party/blink/web_tests/virtual/eye-dropper/color-picker-show-eye-dropper.html
+++ b/third_party/blink/web_tests/virtual/eye-dropper/color-picker-show-eye-dropper.html
@@ -1,6 +1,7 @@
 <!DOCTYPE html>
 <html>
 <head>
+<meta name="color-scheme" content="light dark">
 <script>
 testRunner.waitUntilDone();
 </script>
diff --git a/third_party/blink/web_tests/virtual/threaded/external/wpt/css/css-transforms/animation/README.txt b/third_party/blink/web_tests/virtual/threaded/external/wpt/css/css-transforms/animation/README.txt
new file mode 100644
index 0000000..1b8ea39
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/threaded/external/wpt/css/css-transforms/animation/README.txt
@@ -0,0 +1,2 @@
+# This suite runs the test in external/wpt/css/css-transforms/animation/ with
+# --enable-threaded-compositing
diff --git a/third_party/blink/web_tests/webexposed/element-instance-property-listing-expected.txt b/third_party/blink/web_tests/webexposed/element-instance-property-listing-expected.txt
index d1c8c23..e81a91e 100644
--- a/third_party/blink/web_tests/webexposed/element-instance-property-listing-expected.txt
+++ b/third_party/blink/web_tests/webexposed/element-instance-property-listing-expected.txt
@@ -104,7 +104,6 @@
     property computedStyleMap
     property contains
     property contentEditable
-    property createShadowRoot
     property dataset
     property dir
     property dispatchEvent
@@ -122,7 +121,6 @@
     property getAttributeNodeNS
     property getBoundingClientRect
     property getClientRects
-    property getDestinationInsertionPoints
     property getElementsByClassName
     property getElementsByTagName
     property getElementsByTagNameNS
@@ -782,7 +780,6 @@
     property hreflang
     property imageSizes
     property imageSrcset
-    property import
     property importance
     property integrity
     property media
@@ -1315,7 +1312,6 @@
     property computedRole
     property computedStyleMap
     property contains
-    property createShadowRoot
     property dataset
     property dispatchEvent
     property elementTiming
@@ -1330,7 +1326,6 @@
     property getAttributeNodeNS
     property getBoundingClientRect
     property getClientRects
-    property getDestinationInsertionPoints
     property getElementsByClassName
     property getElementsByTagName
     property getElementsByTagNameNS
diff --git a/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt b/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt
index 13c3d00..d270acd 100644
--- a/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt
+++ b/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt
@@ -1787,7 +1787,6 @@
     method queryCommandValue
     method querySelector
     method querySelectorAll
-    method registerElement
     method releaseEvents
     method replaceChildren
     method requestStorageAccess
@@ -2091,7 +2090,6 @@
     method closest
     method computedStyleMap
     method constructor
-    method createShadowRoot
     method getAnimations
     method getAttribute
     method getAttributeNS
@@ -2100,7 +2098,6 @@
     method getAttributeNodeNS
     method getBoundingClientRect
     method getClientRects
-    method getDestinationInsertionPoints
     method getElementsByClassName
     method getElementsByTagName
     method getElementsByTagNameNS
@@ -3585,7 +3582,6 @@
     getter hreflang
     getter imageSizes
     getter imageSrcset
-    getter import
     getter importance
     getter integrity
     getter media
@@ -8282,7 +8278,6 @@
     getter assignedSlot
     getter wholeText
     method constructor
-    method getDestinationInsertionPoints
     method splitText
 interface TextDecoder
     attribute @@toStringTag
diff --git a/third_party/libvpx/README.chromium b/third_party/libvpx/README.chromium
index ebe65ae4c..e7a2b74 100644
--- a/third_party/libvpx/README.chromium
+++ b/third_party/libvpx/README.chromium
@@ -6,9 +6,9 @@
 License File: source/libvpx/LICENSE
 Security Critical: yes
 
-Date: Monday September 14 2020
+Date: Friday October 02 2020
 Branch: master
-Commit: 97356acb50e212fcfb7c91715718ec70953f780c
+Commit: 7e8ea22e4056a3da04b139fcc812a3f6937bbed7
 
 Description:
 Contains the sources used to compile libvpx binaries used by Google Chrome and
diff --git a/third_party/libvpx/source/config/vpx_version.h b/third_party/libvpx/source/config/vpx_version.h
index c9472c2..23c120a65 100644
--- a/third_party/libvpx/source/config/vpx_version.h
+++ b/third_party/libvpx/source/config/vpx_version.h
@@ -2,8 +2,8 @@
 #define VERSION_MAJOR 1
 #define VERSION_MINOR 9
 #define VERSION_PATCH 0
-#define VERSION_EXTRA "65-g97356acb5"
+#define VERSION_EXTRA "75-g7e8ea22e4"
 #define VERSION_PACKED \
   ((VERSION_MAJOR << 16) | (VERSION_MINOR << 8) | (VERSION_PATCH))
-#define VERSION_STRING_NOSP "v1.9.0-65-g97356acb5"
-#define VERSION_STRING " v1.9.0-65-g97356acb5"
+#define VERSION_STRING_NOSP "v1.9.0-75-g7e8ea22e4"
+#define VERSION_STRING " v1.9.0-75-g7e8ea22e4"
diff --git a/third_party/node/node_modules.py b/third_party/node/node_modules.py
index d45f1c3..7e38863 100755
--- a/third_party/node/node_modules.py
+++ b/third_party/node/node_modules.py
@@ -38,8 +38,8 @@
   return _path_in_node_modules('svgo', 'bin', 'svgo')
 
 
-def PathToTerser():
-  return _path_in_node_modules('terser', 'bin', 'terser')
+def PathToUglify():
+  return _path_in_node_modules('uglify-es', 'bin', 'uglifyjs')
 
 # Typescript is not approved for general use in Chromium. Email chromium-dev
 # if you want to use it.
diff --git a/third_party/node/node_modules.tar.gz.sha1 b/third_party/node/node_modules.tar.gz.sha1
index 4cc191db..3a89d20 100644
--- a/third_party/node/node_modules.tar.gz.sha1
+++ b/third_party/node/node_modules.tar.gz.sha1
@@ -1 +1 @@
-57ebd65121c4ed969896f4bd8441077850951083
+a9603a3dc03fa41af9cc5c8ac28d23d1f98dfe3c
diff --git a/third_party/node/package-lock.json b/third_party/node/package-lock.json
index 2f766bb..5795bd76 100644
--- a/third_party/node/package-lock.json
+++ b/third_party/node/package-lock.json
@@ -485,11 +485,6 @@
         "concat-map": "0.0.1"
       }
     },
-    "buffer-from": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
-      "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A=="
-    },
     "callsites": {
       "version": "3.1.0",
       "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
@@ -612,6 +607,11 @@
         "typical": "^2.6.0"
       }
     },
+    "commander": {
+      "version": "2.13.0",
+      "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz",
+      "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA=="
+    },
     "concat-map": {
       "version": "0.0.1",
       "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
@@ -2212,22 +2212,6 @@
       "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
       "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
     },
-    "source-map-support": {
-      "version": "0.5.19",
-      "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz",
-      "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==",
-      "requires": {
-        "buffer-from": "^1.0.0",
-        "source-map": "^0.6.0"
-      },
-      "dependencies": {
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
-        }
-      }
-    },
     "sprintf-js": {
       "version": "1.0.3",
       "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
@@ -2383,28 +2367,6 @@
         "wordwrapjs": "^2.0.0-0"
       }
     },
-    "terser": {
-      "version": "5.3.3",
-      "resolved": "https://registry.npmjs.org/terser/-/terser-5.3.3.tgz",
-      "integrity": "sha512-vRQDIlD+2Pg8YMwVK9kMM3yGylG95EIwzBai1Bw7Ot4OBfn3VP1TZn3EWx4ep2jERN/AmnVaTiGuelZSN7ds/A==",
-      "requires": {
-        "commander": "^2.20.0",
-        "source-map": "~0.7.2",
-        "source-map-support": "~0.5.19"
-      },
-      "dependencies": {
-        "commander": {
-          "version": "2.20.3",
-          "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
-          "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
-        },
-        "source-map": {
-          "version": "0.7.3",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
-          "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ=="
-        }
-      }
-    },
     "test-value": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/test-value/-/test-value-2.1.0.tgz",
@@ -2473,6 +2435,22 @@
       "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz",
       "integrity": "sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0="
     },
+    "uglify-es": {
+      "version": "3.3.9",
+      "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz",
+      "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==",
+      "requires": {
+        "commander": "~2.13.0",
+        "source-map": "~0.6.1"
+      },
+      "dependencies": {
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        }
+      }
+    },
     "unquote": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz",
diff --git a/third_party/node/package.json b/third_party/node/package.json
index c3c1a14..d0801ae 100644
--- a/third_party/node/package.json
+++ b/third_party/node/package.json
@@ -8,7 +8,7 @@
     "eslint": "5.16.0",
     "polymer-bundler": "4.0.10",
     "polymer-css-build": "0.7.0",
-    "terser": "5.3.3",
+    "uglify-es": "3.3.9",
     "svgo": "1.2.0",
     "typescript": "3.5.3"
   }
diff --git a/third_party/wayland-protocols/BUILD.gn b/third_party/wayland-protocols/BUILD.gn
index 09def4b4..3182228 100644
--- a/third_party/wayland-protocols/BUILD.gn
+++ b/third_party/wayland-protocols/BUILD.gn
@@ -8,6 +8,11 @@
   sources = [ "unstable/gtk-primary-selection/gtk-primary-selection.xml" ]
 }
 
+wayland_protocol("primary_selection_protocol") {
+  sources =
+      [ "src/unstable/primary-selection/primary-selection-unstable-v1.xml" ]
+}
+
 wayland_protocol("input_method_protocol") {
   sources = [ "src/unstable/input-method/input-method-unstable-v1.xml" ]
 }
diff --git a/tools/accessibility/DEPS b/tools/accessibility/DEPS
index 8efc528..ab6b7492 100644
--- a/tools/accessibility/DEPS
+++ b/tools/accessibility/DEPS
@@ -1,4 +1,5 @@
 include_rules = [
   "+content/browser/accessibility",
   "+content/public/browser",
+  "+ui/accessibility/platform/inspect",
 ]
diff --git a/tools/accessibility/inspect/ax_dump_events.cc b/tools/accessibility/inspect/ax_dump_events.cc
index 580581d4..d3b51dc9 100644
--- a/tools/accessibility/inspect/ax_dump_events.cc
+++ b/tools/accessibility/inspect/ax_dump_events.cc
@@ -16,6 +16,8 @@
 #include "tools/accessibility/inspect/ax_event_server.h"
 #include "tools/accessibility/inspect/ax_utils.h"
 
+using ui::AXTreeSelector;
+
 namespace {
 
 constexpr char kPidSwitch[] = "pid";
@@ -67,7 +69,7 @@
 
   const std::string pid_str =
       base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII(kPidSwitch);
-  const tools::TreeSelector selector =
+  const AXTreeSelector selector =
       tools::TreeSelectorFromCommandLine(command_line);
 
   if (pid_str.empty() && selector.empty()) {
diff --git a/tools/accessibility/inspect/ax_dump_tree.cc b/tools/accessibility/inspect/ax_dump_tree.cc
index 58aee62..e0239d2 100644
--- a/tools/accessibility/inspect/ax_dump_tree.cc
+++ b/tools/accessibility/inspect/ax_dump_tree.cc
@@ -13,7 +13,7 @@
 #include "tools/accessibility/inspect/ax_tree_server.h"
 #include "tools/accessibility/inspect/ax_utils.h"
 
-using TreeSelector = content::AccessibilityTreeFormatter::TreeSelector;
+using ui::AXTreeSelector;
 
 char kIdSwitch[] =
 #if defined(WINDOWS)
@@ -104,7 +104,7 @@
     return 0;
   }
 
-  TreeSelector selector = tools::TreeSelectorFromCommandLine(command_line);
+  AXTreeSelector selector = tools::TreeSelectorFromCommandLine(command_line);
   if (!selector.empty()) {
     std::unique_ptr<content::AXTreeServer> server(
         new content::AXTreeServer(selector, filters_path, use_json));
diff --git a/tools/accessibility/inspect/ax_event_server.cc b/tools/accessibility/inspect/ax_event_server.cc
index 36b89e20a..34912311 100644
--- a/tools/accessibility/inspect/ax_event_server.cc
+++ b/tools/accessibility/inspect/ax_event_server.cc
@@ -8,9 +8,8 @@
 
 namespace tools {
 
-AXEventServer::AXEventServer(
-    base::ProcessId pid,
-    const content::AccessibilityTreeFormatter::TreeSelector& selector)
+AXEventServer::AXEventServer(base::ProcessId pid,
+                             const ui::AXTreeSelector& selector)
     : recorder_(
           content::AccessibilityEventRecorder::Create(nullptr, pid, selector)) {
   recorder_->ListenToEvents(
diff --git a/tools/accessibility/inspect/ax_event_server.h b/tools/accessibility/inspect/ax_event_server.h
index 4a50fee..f6d8074 100644
--- a/tools/accessibility/inspect/ax_event_server.h
+++ b/tools/accessibility/inspect/ax_event_server.h
@@ -19,9 +19,8 @@
  public:
   // Dumps events into console for application identified either by process id
   // or tree selector.
-  explicit AXEventServer(
-      base::ProcessId pid,
-      const content::AccessibilityTreeFormatter::TreeSelector& selector);
+  explicit AXEventServer(base::ProcessId pid,
+                         const ui::AXTreeSelector& selector);
   ~AXEventServer();
 
  private:
diff --git a/tools/accessibility/inspect/ax_tree_server.cc b/tools/accessibility/inspect/ax_tree_server.cc
index cf8cb0c7..787d0d75 100644
--- a/tools/accessibility/inspect/ax_tree_server.cc
+++ b/tools/accessibility/inspect/ax_tree_server.cc
@@ -26,8 +26,10 @@
 constexpr char kAllowOptStr[] = "@ALLOW:";
 constexpr char kDenyOptStr[] = "@DENY:";
 
+using ui::AXTreeSelector;
+
 std::unique_ptr<base::DictionaryValue> BuildTreeForSelector(
-    const AccessibilityTreeFormatter::TreeSelector& selector,
+    const AXTreeSelector& selector,
     AccessibilityTreeFormatter* formatter) {
   return formatter->BuildAccessibilityTreeForSelector(selector);
 }
@@ -38,10 +40,9 @@
   return formatter->BuildAccessibilityTreeForWindow(widget);
 }
 
-AXTreeServer::AXTreeServer(
-    const AccessibilityTreeFormatter::TreeSelector& selector,
-    const base::FilePath& filters_path,
-    bool use_json) {
+AXTreeServer::AXTreeServer(const AXTreeSelector& selector,
+                           const base::FilePath& filters_path,
+                           bool use_json) {
   Run(base::BindOnce(&BuildTreeForSelector, selector), filters_path, use_json);
 }
 
diff --git a/tools/accessibility/inspect/ax_tree_server.h b/tools/accessibility/inspect/ax_tree_server.h
index d3fe5ac..38949a63 100644
--- a/tools/accessibility/inspect/ax_tree_server.h
+++ b/tools/accessibility/inspect/ax_tree_server.h
@@ -22,7 +22,7 @@
   AXTreeServer(gfx::AcceleratedWidget widget,
                const base::FilePath& filters_path,
                bool use_json);
-  AXTreeServer(const AccessibilityTreeFormatter::TreeSelector& selector,
+  AXTreeServer(const ui::AXTreeSelector& selector,
                const base::FilePath& filters_path,
                bool use_json);
 
diff --git a/tools/accessibility/inspect/ax_utils.cc b/tools/accessibility/inspect/ax_utils.cc
index df4a2d9c..f558f21 100644
--- a/tools/accessibility/inspect/ax_utils.cc
+++ b/tools/accessibility/inspect/ax_utils.cc
@@ -13,6 +13,8 @@
 char kPatternSwitch[] = "pattern";
 char kSafariSwitch[] = "safari";
 
+using ui::AXTreeSelector;
+
 namespace tools {
 
 void PrintHelpForTreeSelectors() {
@@ -25,24 +27,24 @@
   printf("    --active-tab\tActive tab of a choosen browser\n");
 }
 
-TreeSelector TreeSelectorFromCommandLine(
+AXTreeSelector TreeSelectorFromCommandLine(
     const base::CommandLine* command_line) {
-  int selectors = TreeSelector::None;
+  int selectors = AXTreeSelector::None;
   if (command_line->HasSwitch(kChromeSwitch)) {
-    selectors = TreeSelector::Chrome;
+    selectors = AXTreeSelector::Chrome;
   } else if (command_line->HasSwitch(kChromiumSwitch)) {
-    selectors = TreeSelector::Chromium;
+    selectors = AXTreeSelector::Chromium;
   } else if (command_line->HasSwitch(kFirefoxSwitch)) {
-    selectors = TreeSelector::Firefox;
+    selectors = AXTreeSelector::Firefox;
   } else if (command_line->HasSwitch(kSafariSwitch)) {
-    selectors = TreeSelector::Safari;
+    selectors = AXTreeSelector::Safari;
   }
   if (command_line->HasSwitch(kActiveTabSwitch)) {
-    selectors |= TreeSelector::ActiveTab;
+    selectors |= AXTreeSelector::ActiveTab;
   }
 
   std::string pattern_str = command_line->GetSwitchValueASCII(kPatternSwitch);
-  return TreeSelector(selectors, pattern_str);
+  return AXTreeSelector(selectors, pattern_str);
 }
 
 }  // namespace tools
diff --git a/tools/accessibility/inspect/ax_utils.h b/tools/accessibility/inspect/ax_utils.h
index 30ed2312..35b61f3 100644
--- a/tools/accessibility/inspect/ax_utils.h
+++ b/tools/accessibility/inspect/ax_utils.h
@@ -5,17 +5,16 @@
 #ifndef TOOLS_ACCESSIBILITY_INSPECT_AX_UTILS_H_
 #define TOOLS_ACCESSIBILITY_INSPECT_AX_UTILS_H_
 
-#include "content/public/browser/accessibility_tree_formatter.h"
+#include "base/command_line.h"
+#include "ui/accessibility/platform/inspect/inspect.h"
 
 namespace tools {
 
-using TreeSelector = content::AccessibilityTreeFormatter::TreeSelector;
-
 // Prints help for tree selectors like --pattern, --chromium etc.
 void PrintHelpForTreeSelectors();
 
 // Returns tree selector from command line arguments.
-TreeSelector TreeSelectorFromCommandLine(const base::CommandLine*);
+ui::AXTreeSelector TreeSelectorFromCommandLine(const base::CommandLine*);
 
 }  // namespace tools
 
diff --git a/tools/clang/scripts/goma_link.py b/tools/clang/scripts/goma_link.py
index 15fb617..9beecb3 100755
--- a/tools/clang/scripts/goma_link.py
+++ b/tools/clang/scripts/goma_link.py
@@ -237,7 +237,7 @@
       '-Wl,--lto.*',
       '-Wl,--thin.*',
   )))
-  MLLVM_RE = re.compile('(?:-Wl,)?([-/]mllvm)[:=]?(.*)', re.IGNORECASE)
+  MLLVM_RE = re.compile('(?:-Wl,)?([-/]mllvm)[:=,]?(.*)', re.IGNORECASE)
   OBJ_RE = re.compile('(.*)\\.(o(?:bj)?)', re.IGNORECASE)
 
   def _no_codegen(self, args):
diff --git a/tools/clang/scripts/goma_link_unit_tests.py b/tools/clang/scripts/goma_link_unit_tests.py
index 255ff6a..d792b59f 100755
--- a/tools/clang/scripts/goma_link_unit_tests.py
+++ b/tools/clang/scripts/goma_link_unit_tests.py
@@ -228,6 +228,13 @@
       self.assertTrue(os.path.exists('test'))
       self.assertRaises(OSError, goma_link.ensure_file, 'test/impossible')
 
+  def test_transform_codegen_param_on_mllvm(self):
+    # Regression test for crbug.com/1135234
+    link = goma_ld.GomaLinkUnix()
+    self.assertEqual(
+        link.transform_codegen_param_common('-mllvm,-import-instr-limit=20'),
+        ['-mllvm', '-import-instr-limit=20'])
+
 
 if __name__ == '__main__':
   unittest.main()
diff --git a/tools/grit/minify_with_uglify.py b/tools/grit/minify_with_uglify.py
index 1c12140..788ffa6 100755
--- a/tools/grit/minify_with_uglify.py
+++ b/tools/grit/minify_with_uglify.py
@@ -23,8 +23,8 @@
        tempfile.NamedTemporaryFile(suffix='.js') as outfile:
     infile.write(source)
     infile.flush();
-    node.RunNode(
-        [node_modules.PathToTerser(), infile.name, '--output', outfile.name])
+    node.RunNode([
+        node_modules.PathToUglify(), infile.name, '--output', outfile.name])
     result = outfile.read()
     return result
 
diff --git a/tools/ipc_fuzzer/fuzzer/fuzzer.cc b/tools/ipc_fuzzer/fuzzer/fuzzer.cc
index b64a0e7..ab939eb 100644
--- a/tools/ipc_fuzzer/fuzzer/fuzzer.cc
+++ b/tools/ipc_fuzzer/fuzzer/fuzzer.cc
@@ -1817,7 +1817,7 @@
     if (!fuzzer->ShouldGenerate())
       return true;
 
-    switch (RandInRange(3)) {
+    switch (RandInRange(2)) {
       case 0: {
         // network::DataElement::Type::TYPE_BYTES
         if (RandEvent(2)) {
@@ -1847,20 +1847,6 @@
         p->SetToFilePathRange(path, offset, length, modification_time);
         return true;
       }
-      case 2: {
-        // network::DataElement::Type::TYPE_BLOB
-        std::string uuid;
-        uint64_t offset;
-        uint64_t length;
-        if (!FuzzParam(&uuid, fuzzer))
-          return false;
-        if (!FuzzParam(&offset, fuzzer))
-          return false;
-        if (!FuzzParam(&length, fuzzer))
-          return false;
-        p->SetToBlobRange(uuid, offset, length);
-        return true;
-      }
       default: {
         NOTREACHED();
         return false;
diff --git a/tools/metrics/actions/actions.xml b/tools/metrics/actions/actions.xml
index c9a94fc..d4178168 100644
--- a/tools/metrics/actions/actions.xml
+++ b/tools/metrics/actions/actions.xml
@@ -18303,6 +18303,12 @@
   <description>Please enter the description of this user action.</description>
 </action>
 
+<action name="Options_ShowSafeBrowsingEnhancedProtection">
+  <owner>xinghuilu@chromium.org</owner>
+  <owner>chrome-safebrowsing-alerts@google.com</owner>
+  <description>Settings: Safe Browsing enhanced protection</description>
+</action>
+
 <action name="Options_ShowStorageManager">
   <owner>fukino@chromium.org</owner>
   <description>Settings: Storage management</description>
diff --git a/tools/metrics/histograms/README.md b/tools/metrics/histograms/README.md
index 77ae423..d6841300 100644
--- a/tools/metrics/histograms/README.md
+++ b/tools/metrics/histograms/README.md
@@ -516,14 +516,29 @@
 bug in Monorail. It's important that somebody familiar with the histogram
 notices and triages such bugs!
 
+### Components
+
+Histograms may be associated with components, which can help make sure that
+histogram expiry bugs don't fall through the cracks.
+
+There are two ways in which components may be associated with a histogram. The
+first and recommended way is to add a tag to a histogram or histogram suffix,
+e.g. <component>UI&gt;Shell</component>. The second way is to specify an OWNERS
+file as a secondary owner for a histogram. If the OWNERS file contains a
+component, then the component is associated with the histogram. If the specified
+OWNERS file doesn't have a component, but an OWNERS file in a parent directory
+does, then the parent directory's component is used.
+
 ### Cleaning Up Histogram Entries
 
 Do not delete histograms from histograms.xml. Instead, mark unused
 histograms as obsolete and annotate them with the date or milestone in
 the `<obsolete>` tag entry.
 
-If the histogram used [histogram suffixes](#Histogram-Suffixes), mark
-the suffix entry for the histogram as obsolete as well.
+If deprecating only some variants of a
+[patterned histogram](#Patterned-Histograms), mark each deprecated `<variant>`
+as obsolete as well. Similarly, if the histogram used histogram suffixes, mark
+the suffix entry for the histogram as obsolete.
 
 If the histogram is being replaced by a new version:
 
@@ -550,34 +565,88 @@
 been recorded to. For example, it's fine to correct a typo where the histogram
 name in the metadata does not match the name in the Chromium source code.
 
-### Pattern histogram
+### Patterned Histograms
 
 It is sometimes useful to record several closely related metrics, which measure
-the same type of data, with some minor variations. It is often useful to use one
-or more <variants> elements to save on redundant verbosity in
-[histograms.xml](./histograms.xml). You can put the placeholder string in
-anywhere of the histogram name. Each placeholder string should associate with
-a single token based on the token's key. Each token can specify the `variants`
-attribute to associate with an out-of-line `<variants>` or declare a list of
-`<variant>`s as its children. These <variant>s will then replace the
-corresponding placeholder string in the histogram name to create a family of
-histograms.
+the same type of data, with some minor variations. You can declare the metadata
+for these concisely using patterned histograms. For example:
 
-You can't declare ownership of `<variants>` but can declare ownership of
-`<variant>`. If there's no owner specified, the generated histograms will
-inherit owners from the parents.
+```xml
+<histogram name="Pokemon.{Character}.EfficacyAgainst{OpponentType}" ...>
+  <owner>individual@chromium.org</owner>
+  <owner>team@chromium.org</owner>
+  <summary>
+    The efficacy multiplier for {Character} against an opponent of
+    {OpponentType} type.
+  </summary>
+  <token key="Character">
+    <variant name="Bulbasaur"/>
+    <variant name="Charizard"/>
+    <variant name="Mewtwo"/>
+  </token>
+  <token key="OpponentType">
+    <variant name="Dragon" summary="dragon"/>
+    <variant name="Flying" summary="flappity-flap"/>
+    <variant name="Psychic" summary="psychic"/>
+    <variant name="Water" summary="water"/>
+  </token>
+</histogram>
+```
+
+This example defines metadata for 12 (= 3 x 4) concrete histograms, such as
+
+```xml
+<histogram name="Pokemon.Charizard.EfficacyAgainstWater" ...>
+  <owner>individual@chromium.org</owner>
+  <owner>team@chromium.org</owner>
+  <summary>
+    The efficacy multiplier for Charizard against an opponent of water type.
+  </summary>
+</histogram>
+```
+
+Note that each token `<variant>` defines what text should be substituted for it,
+both in the histogram name and in the summary text. As shorthand, a `<variant>`
+that omits the `summary` attribute will substitute the value of the `name`
+attribute in the histogram's `<summary>` text as well.
+
+*** promo
+Tip: You can declare an optional token by listing an empty name: `<variant
+name="" summary="aggregated across all breakdowns"/>`. This can be useful when
+recording a "parent" histogram that aggregates across a set of breakdowns.
+***
+
+You can use the `<variants>` tag to define a set of `<variant>`s out-of-line.
+This is useful for token substitutions that are shared among multiple families
+of histograms. See
+[histograms.xml](https://source.chromium.org/search?q=file:histograms.xml%20%3Cvariants)
+for examples.
+
+By default, a `<variant>` will inherit the owners declared for the patterned
+histogram. Each variant can optionally override the inherited list with custom
+owners:
+```xml
+<variant name="SubteamBreakdown" ...>
+  <owner>subteam-lead@chromium.org</owner>
+  <owner>subteam@chromium.org</owner>
+</variant>
+```
 
 As [with histogram entries](#Cleaning-Up-Histogram-Entries), never delete
-variants. If the variant expansion is no longer used, mark it as
-obsolete.
+variants. If the variant expansion is no longer used, mark it as `<obsolete>`.
 
-If you feel unclear about which histograms will be generated from the pattern
-histogram. Consider using the `print_histogram_names.py --diff` tool to
-enumerate all the histogram names that are generated by a particular CL. e.g.
-(from the repo root):
+*** promo
+Tip: You can run `print_histogram_names.py --diff` to enumerate all the
+histogram names that are generated by a particular CL. For example, this can be
+run (from the repo root) as:
 ```
 ./tools/metrics/histograms/print_histogram_names.py --diff origin/master
 ```
+***
+
+For documentation about the `<histogram_suffixes>` syntax, which is deprecated,
+see
+https://chromium.googlesource.com/chromium/src/+/refs/tags/87.0.4270.1/tools/metrics/histograms/one-pager.md#histogram-suffixes-deprecated-in-favor-of-pattern-histograms
 
 ## When To Use Sparse Histograms
 
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml
index 3e3b6dd..d4f9533 100644
--- a/tools/metrics/histograms/enums.xml
+++ b/tools/metrics/histograms/enums.xml
@@ -34125,11 +34125,11 @@
 <enum name="GoogleUpdateErrorCode">
   <int value="0" label="GOOGLE_UPDATE_NO_ERROR"/>
   <int value="1" label="CANNOT_UPGRADE_CHROME_IN_THIS_DIRECTORY"/>
-  <int value="2" label="GOOGLE_UPDATE_JOB_SERVER_CREATION_FAILED"/>
+  <int value="2" label="GOOGLE_UPDATE_JOB_SERVER_CREATION_FAILED (deprecated)"/>
   <int value="3" label="GOOGLE_UPDATE_ONDEMAND_CLASS_NOT_FOUND"/>
   <int value="4" label="GOOGLE_UPDATE_ONDEMAND_CLASS_REPORTED_ERROR"/>
-  <int value="5" label="GOOGLE_UPDATE_GET_RESULT_CALL_FAILED"/>
-  <int value="6" label="GOOGLE_UPDATE_GET_VERSION_INFO_FAILED"/>
+  <int value="5" label="GOOGLE_UPDATE_GET_RESULT_CALL_FAILED (deprecated)"/>
+  <int value="6" label="GOOGLE_UPDATE_GET_VERSION_INFO_FAILED (deprecated)"/>
   <int value="7" label="GOOGLE_UPDATE_ERROR_UPDATING"/>
   <int value="8" label="GOOGLE_UPDATE_DISABLED_BY_POLICY"/>
   <int value="9" label="GOOGLE_UPDATE_DISABLED_BY_POLICY_AUTO_ONLY"/>
@@ -34157,8 +34157,8 @@
 </enum>
 
 <enum name="GoogleUpdateUpgradeStatus">
-  <int value="0" label="UPGRADE_STARTED"/>
-  <int value="1" label="UPGRADE_CHECK_STARTED"/>
+  <int value="0" label="UPGRADE_STARTED (deprecated)"/>
+  <int value="1" label="UPGRADE_CHECK_STARTED (deprecated)"/>
   <int value="2" label="UPGRADE_IS_AVAILABLE"/>
   <int value="3" label="UPGRADE_SUCCESSFUL"/>
   <int value="4" label="UPGRADE_ALREADY_UP_TO_DATE"/>
@@ -35697,8 +35697,11 @@
       label="custom error for taskbar::CustomHresultCodes::kWindowsInvisible"/>
   <int value="-2147220477"
       label="custom error for taskbar::CustomHresultCodes::kImageLoading"/>
+  <int value="-2147219705" label="GOOPDATE_E_INSTANCES_RUNNING"/>
   <int value="-2147219455" label="GOOPDATE_E_NO_NETWORK"/>
   <int value="-2147219437" label="GOOPDATE_E_APP_UPDATE_DISABLED_BY_POLICY"/>
+  <int value="-2147219425"
+      label="GOOPDATE_E_APP_UPDATE_DISABLED_BY_POLICY_MANUAL"/>
   <int value="-2147219198" label="GOOPDATEINSTALL_E_INSTALLER_FAILED"/>
   <int value="-2147168255" label="ITF_E_FONTFILE_UTIL_TOO_MANY_FILES_PER_FACE"/>
   <int value="-2147168254" label="ITF_E_FONTFILE_UTIL_EMPTY_FILE_PATH"/>
@@ -35721,6 +35724,7 @@
   <int value="-2147023728" label="ERROR_NOT_FOUND"/>
   <int value="-2147023673" label="ERROR_CANCELLED"/>
   <int value="-2147023605" label="ERROR_DRIVER_PROCESS_TERMINATED"/>
+  <int value="-2147023589" label="ERROR_INVALID_OWNER"/>
   <int value="-2147023504" label="ERROR_FILE_CORRUPT"/>
   <int value="-2147023436" label="ERROR_TIMEOUT"/>
   <int value="-2147023179" label="RPC_S_UNKNOWN_IF"/>
@@ -35729,6 +35733,7 @@
   <int value="-2147012889" label="WININET_E_NAME_NOT_RESOLVED"/>
   <int value="-2147012867" label="WININET_E_CANNOT_CONNECT"/>
   <int value="-2147012866" label="WININET_E_CONNECTION_ABORTED"/>
+  <int value="-2147012851" label="WININET_E_INVALID_CA"/>
   <int value="-2147009295" label="ERROR_INSTALL_PACKAGE_NOT_FOUND"/>
   <int value="-2146959355" label="CO_E_SERVER_EXEC_FAILURE"/>
   <int value="-2005270527" label="DXGI_ERROR_INVALID_CALL"/>
@@ -37779,8 +37784,8 @@
   <int value="61" label="SETUP_SINGLETON_RELEASED"/>
   <int value="62" label="DELETE_OLD_VERSIONS_SUCCESS"/>
   <int value="63" label="DELETE_OLD_VERSIONS_TOO_MANY_ATTEMPTS"/>
-  <int value="64" label="SAVE_DMTOKEN_FAILED"/>
-  <int value="65" label="SAVE_DMTOKEN_SUCCESS"/>
+  <int value="64" label="STORE_DMTOKEN_FAILED"/>
+  <int value="65" label="STORE_DMTOKEN_SUCCESS"/>
 </enum>
 
 <enum name="InstanceIDResult">
@@ -41155,6 +41160,7 @@
   <int value="-1993730028" label="CrostiniPortForwarding:enabled"/>
   <int value="-1990614981" label="StoragePressureUI:disabled"/>
   <int value="-1989747818" label="TabStripKeyboardFocus:disabled"/>
+  <int value="-1989134646" label="PhoneHubUseBle:disabled"/>
   <int value="-1988840552" label="WebViewExtraHeadersSameOriginOnly:disabled"/>
   <int value="-1985452239" label="SmartDim20190221:disabled"/>
   <int value="-1985239289" label="AutofillRichMetadataQueries:enabled"/>
@@ -41917,6 +41923,7 @@
   <int value="-1272593346" label="NewTabLoadingAnimation:disabled"/>
   <int value="-1271563519" label="enable-appcontainer"/>
   <int value="-1271441871" label="AmbientColor:enabled"/>
+  <int value="-1270634957" label="PhoneHubUseBle:enabled"/>
   <int value="-1269962982" label="SyncUSSPasswords:disabled"/>
   <int value="-1269093329" label="AndroidOmniboxPreviewsBadge:disabled"/>
   <int value="-1269084216" label="ash-md"/>
@@ -44951,6 +44958,7 @@
   <int value="1842219851" label="enable-incognito-window-counter"/>
   <int value="1843088575" label="OutOfBlinkCors:enabled"/>
   <int value="1844110073" label="enable-app-view"/>
+  <int value="1846717591" label="CaptureMode:disabled"/>
   <int value="1847024354" label="enable-hotword-hardware"/>
   <int value="1847658464" label="MeteredShowToggle:disabled"/>
   <int value="1848974467" label="DelayAsyncScriptExecution:disabled"/>
@@ -44986,6 +44994,7 @@
   <int value="1872185826" label="LocationHardReload:enabled"/>
   <int value="1874195462" label="ChromeHomeMenuItemsExpandSheet:disabled"/>
   <int value="1874604540" label="UseSuggestionsEvenIfFew:disabled"/>
+  <int value="1875156497" label="CaptureMode:enabled"/>
   <int value="1878331098" label="GuestViewCrossProcessFrames:enabled"/>
   <int value="1880955305" label="enable-preconnect-to-search"/>
   <int value="1881036528" label="disable-multilingual-spellchecker"/>
@@ -70138,6 +70147,9 @@
 </enum>
 
 <enum name="SyncMissingBookmarkPermanentNodes">
+  <obsolete>
+    Removed 2020-10.
+  </obsolete>
   <int value="0" label="Bookmark Bar"/>
   <int value="1" label="Other Bookmarks"/>
   <int value="2" label="Mobile Bookmarks"/>
@@ -71748,6 +71760,19 @@
   <int value="30" label="kModuleBlacklistCacheMD5Digest"/>
 </enum>
 
+<enum name="TranslateAssistContentResult">
+  <int value="0" label="The feature was disabled"/>
+  <int value="1" label="The tab was null"/>
+  <int value="2" label="The tab was an incognito tab"/>
+  <int value="3" label="The activity was in overview mode"/>
+  <int value="4" label="canTranslateTab() was false"/>
+  <int value="5" label="The original page language was missing"/>
+  <int value="6" label="The current page language was missing"/>
+  <int value="7" label="There was a JSONException"/>
+  <int value="8" label="The page was translatable"/>
+  <int value="9" label="The page has already been translated"/>
+</enum>
+
 <enum name="TranslateBubbleUiEvent">
   <int value="1" label="Switch to Options page"/>
   <int value="2" label="Leave Options page"/>
diff --git a/tools/metrics/histograms/extract_histograms.py b/tools/metrics/histograms/extract_histograms.py
index 5fb64d7..ef50dad2 100644
--- a/tools/metrics/histograms/extract_histograms.py
+++ b/tools/metrics/histograms/extract_histograms.py
@@ -370,6 +370,29 @@
   return owners, has_owner
 
 
+def _ExtractComponents(histogram):
+  """Extracts component information from the given histogram element.
+
+  Components are present when a histogram has a component tag, e.g.
+  <component>UI&gt;Browser</component>. Components may also be present when an
+  OWNERS file is given as a histogram owner, e.g. <owner>src/dir/OWNERS</owner>.
+  See _ExtractComponentFromOWNERS() in the following file for details:
+  chromium/src/tools/metrics/histograms/expand_owners.py.
+
+  Args:
+    histogram: A DOM Element corresponding to a histogram.
+
+  Returns:
+    A list of the components associated with the histogram, e.g.
+    ['UI>Browser>Spellcheck'].
+  """
+  component_nodes = histogram.getElementsByTagName('component')
+  return [
+      _GetTextFromChildNodes(component_node)
+      for component_node in component_nodes
+  ]
+
+
 def _ValidateDateString(date_str):
   """Checks if |date_str| matches 'YYYY-MM-DD'.
 
@@ -553,6 +576,11 @@
     if owners:
       histogram_entry['owners'] = owners
 
+    # Find <component> tag.
+    components = _ExtractComponents(histogram)
+    if components:
+      histogram_entry['components'] = components
+
     # Find <summary> tag.
     summary_nodes = list(IterElementsWithTag(histogram, 'summary'))
 
diff --git a/tools/metrics/histograms/extract_histograms_test.py b/tools/metrics/histograms/extract_histograms_test.py
index 096cba24..7744338e 100644
--- a/tools/metrics/histograms/extract_histograms_test.py
+++ b/tools/metrics/histograms/extract_histograms_test.py
@@ -445,6 +445,33 @@
         'Multi-paragraph sample description UI>Browser. Words.\n\n'
         'Still multi-paragraph sample description.\n\nHere.')
 
+  def testComponentExtraction(self):
+    """Checks that components are successfully extracted from histograms."""
+    histogram = xml.dom.minidom.parseString("""
+<histogram-configuration>
+<histograms>
+  <histogram name="Coffee" expires_after="2022-01-01">
+    <owner>histogram_owner@google.com</owner>
+    <summary>An ode to coffee.</summary>
+    <component>Liquid&gt;Hot</component>
+    <component>Caffeine</component>
+  </histogram>
+</histograms>
+
+<histogram_suffixes_list>
+  <histogram_suffixes name="Brand" separator=".">
+    <suffix name="Dunkies" label="The coffee is from Dunkin."/>
+    <affected-histogram name="Coffee"/>
+  </histogram_suffixes>
+</histogram_suffixes_list>
+</histogram-configuration>
+""")
+    histograms, _ = extract_histograms.ExtractHistogramsFromDom(histogram)
+    self.assertEqual(histograms['Coffee']['components'],
+                     ['Liquid>Hot', 'Caffeine'])
+    self.assertEqual(histograms['Coffee.Dunkies']['components'],
+                     ['Liquid>Hot', 'Caffeine'])
+
   def testNewHistogramWithoutSummary(self):
     histogram_without_summary = xml.dom.minidom.parseString("""
 <histogram-configuration>
diff --git a/tools/metrics/histograms/generate_expired_histograms_array.py b/tools/metrics/histograms/generate_expired_histograms_array.py
index c6591c3..baae460 100755
--- a/tools/metrics/histograms/generate_expired_histograms_array.py
+++ b/tools/metrics/histograms/generate_expired_histograms_array.py
@@ -221,6 +221,14 @@
   return header_file_content
 
 
+def CheckUnsyncedHistograms(inputs):
+  """Checks whether --inputs is in sync with |histogram_paths.ALL_XMLS|."""
+  all_xmls_set = set(histogram_paths.ALL_XMLS)
+  inputs_set = set(os.path.abspath(input) for input in inputs)
+  to_add, to_remove = all_xmls_set - inputs_set, inputs_set - all_xmls_set
+  return to_add, to_remove
+
+
 def _GenerateFile(arguments):
   """Generates header file containing array with hashes of expired histograms.
 
@@ -233,13 +241,15 @@
       arguments.major_branch_date_filepath: File path for base date.
       arguments.milestone_filepath: File path for milestone information.
   """
-  # TODO(sweilun): Assert that the |--inputs| is the same as
-  # |histogram_paths.ALL_XMLS| to make sure we have the most updated list of
-  # histogram descriptions. Otherwise, inform the cl owner to update the
-  # --inputs.
-  # assert histogram_paths.ALL_XMLS == arguments.inputs, "The --inputs is not "
-  # "sync with the most updated list of xmls. Please update the inputs in "
-  # "chrome/browser/metrics/BUILD.gn and ios/chrome/browser/metrics/BUILD.gn."
+  # Assert that the |--inputs| is the same as |histogram_paths.ALL_XMLS| to make
+  # sure we have the most updated list of histogram descriptions. Otherwise,
+  # inform the cl owner to update the --inputs.
+  to_add, to_remove = CheckUnsyncedHistograms(arguments.inputs)
+  assert len(to_add) == 0 and len(to_remove) == 0, (
+      "The --inputs is not in sync with the most updated list of xmls. Please "
+      "update the inputs in "
+      "components/metrics/generate_expired_histograms_array.gni.\n"
+      "  add: %s\n  remove: %s" % (', '.join(to_add), ', '.join(to_remove)))
 
   descriptions = merge_xml.MergeFiles(arguments.inputs)
   with open(arguments.major_branch_date_filepath, "r") as date_file:
diff --git a/tools/metrics/histograms/histogram_configuration_model.py b/tools/metrics/histograms/histogram_configuration_model.py
index 37b4bee..0e7cda01 100644
--- a/tools/metrics/histograms/histogram_configuration_model.py
+++ b/tools/metrics/histograms/histogram_configuration_model.py
@@ -12,6 +12,7 @@
 
 _OBSOLETE_TYPE = models.TextNodeType('obsolete')
 _OWNER_TYPE = models.TextNodeType('owner', single_line=True)
+_COMPONENT_TYPE = models.TextNodeType('component', single_line=True)
 _SUMMARY_TYPE = models.TextNodeType('summary', single_line=True)
 _DETAILS_TYPE = models.TextNodeType('details')
 
@@ -142,6 +143,7 @@
     alphabetization=[
         (_OBSOLETE_TYPE.tag, _KEEP_ORDER),
         (_OWNER_TYPE.tag, _KEEP_ORDER),
+        (_COMPONENT_TYPE.tag, _KEEP_ORDER),
         (_SUMMARY_TYPE.tag, _KEEP_ORDER),
         (_DETAILS_TYPE.tag, _KEEP_ORDER),
         (_TOKEN_TYPE.tag, _KEEP_ORDER),
@@ -150,6 +152,7 @@
     children=[
         models.ChildType(_OBSOLETE_TYPE.tag, _OBSOLETE_TYPE, multiple=False),
         models.ChildType(_OWNER_TYPE.tag, _OWNER_TYPE, multiple=True),
+        models.ChildType(_COMPONENT_TYPE.tag, _COMPONENT_TYPE, multiple=True),
         models.ChildType(_SUMMARY_TYPE.tag, _SUMMARY_TYPE, multiple=False),
         models.ChildType(_DETAILS_TYPE.tag, _DETAILS_TYPE, multiple=False),
         models.ChildType(_TOKEN_TYPE.tag, _TOKEN_TYPE, multiple=True),
diff --git a/tools/metrics/histograms/histogram_configuration_model_test_histograms.py b/tools/metrics/histograms/histogram_configuration_model_test_histograms.py
index 49cd783..528703e 100644
--- a/tools/metrics/histograms/histogram_configuration_model_test_histograms.py
+++ b/tools/metrics/histograms/histogram_configuration_model_test_histograms.py
@@ -84,6 +84,7 @@
   </obsolete>
   <owner>owner1@chromium.org</owner>
   <owner>owner2@chromium.org</owner>
+  <component>Component&gt;Subcomponent</component>
   <summary>Summary text</summary>
 </histogram>
 
@@ -119,6 +120,7 @@
   </obsolete>
   <owner>owner1@chromium.org</owner>
   <owner>owner2@chromium.org</owner>
+  <component>Component&gt;Subcomponent</component>
   <summary>Summary text</summary>
 </histogram>
 
@@ -189,6 +191,7 @@
     </obsolete>
       <owner>owner1@chromium.org</owner>
       <owner>owner2@chromium.org</owner>
+      <component>Component&gt;Subcomponent</component>
     <summary>Summary text</summary>
   </histogram>
 
@@ -224,6 +227,9 @@
     owner1@chromium.org
   </owner>
   <owner>owner2@chromium.org</owner>
+  <component>
+    Component&gt;Subcomponent
+  </component>
   <summary>
     Summary text
   </summary>
@@ -259,6 +265,7 @@
   </obsolete>
   <owner>owner1@chromium.org</owner>
   <owner>owner2@chromium.org</owner>
+  <component>Component&gt;Subcomponent</component>
   <summary>Summary text</summary>
 
 </histogram>
@@ -292,6 +299,7 @@
   </obsolete>
   <summary>Summary text</summary>
   <owner>owner1@chromium.org</owner>
+  <component>Component&gt;Subcomponent</component>
   <owner>owner2@chromium.org</owner>
 </histogram>
 
diff --git a/tools/metrics/histograms/histograms_xml/cookie/histograms.xml b/tools/metrics/histograms/histograms_xml/cookie/histograms.xml
index 3d907ebb..1e577fa 100644
--- a/tools/metrics/histograms/histograms_xml/cookie/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/cookie/histograms.xml
@@ -113,10 +113,28 @@
 
 <histogram name="Cookie.ExpirationDurationMinutes" units="minutes"
     expires_after="M85">
+  <obsolete>
+    Removed Oct 2020 in favor of two new histograms to divide into Secure and
+    non-Secure cookies.
+  </obsolete>
   <owner>battre@chromium.org</owner>
   <summary>Number of minutes until cookie expires when set.</summary>
 </histogram>
 
+<histogram name="Cookie.ExpirationDurationMinutesNonSecure" units="minutes"
+    expires_after="2021-06-30">
+  <owner>kaustubhag@chromium.org</owner>
+  <owner>chlily@chromium.org</owner>
+  <summary>Number of minutes until non-Secure cookie expires when set.</summary>
+</histogram>
+
+<histogram name="Cookie.ExpirationDurationMinutesSecure" units="minutes"
+    expires_after="2021-06-30">
+  <owner>kaustubhag@chromium.org</owner>
+  <owner>chlily@chromium.org</owner>
+  <summary>Number of minutes until Secure cookie expires when set.</summary>
+</histogram>
+
 <histogram name="Cookie.HeaderLength" units="bytes" expires_after="2020-09-13">
   <owner>mkwst@chromium.org</owner>
   <summary>
diff --git a/tools/metrics/histograms/histograms_xml/google/histograms.xml b/tools/metrics/histograms/histograms_xml/google/histograms.xml
index cee60bc..a4b0ce1 100644
--- a/tools/metrics/histograms/histograms_xml/google/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/google/histograms.xml
@@ -21,8 +21,9 @@
 
 <histograms>
 
-<histogram name="GoogleUpdate.ErrorHresult" enum="Hresult" expires_after="M85">
+<histogram name="GoogleUpdate.ErrorHresult" enum="Hresult" expires_after="M86">
   <owner>grt@chromium.org</owner>
+  <owner>ydago@chromium.org</owner>
   <summary>The HRESULT for a failed on-demand update check.</summary>
 </histogram>
 
@@ -117,8 +118,9 @@
 </histogram>
 
 <histogram name="GoogleUpdate.InstallerExitCode" enum="InstallStatus"
-    expires_after="M85">
+    expires_after="M86">
   <owner>grt@chromium.org</owner>
+  <owner>ydago@chromium.org</owner>
   <summary>
     The exit code from Chrome's installer following a failed on-demand update
     check. All values reported for this histogram fall in the
@@ -196,6 +198,9 @@
 
 <histogram name="GoogleUpdate.UnexpectedState" units="units"
     expires_after="M85">
+  <obsolete>
+    Removed in M87.
+  </obsolete>
   <owner>grt@chromium.org</owner>
   <summary>
     An unrecognized CurrentState value received from Google Update while polling
@@ -204,14 +209,16 @@
 </histogram>
 
 <histogram name="GoogleUpdate.UpdateErrorCode" enum="GoogleUpdateErrorCode"
-    expires_after="M85">
+    expires_after="M86">
   <owner>grt@chromium.org</owner>
+  <owner>ydago@chromium.org</owner>
   <summary>The error code for a failed on-demand update check.</summary>
 </histogram>
 
 <histogram name="GoogleUpdate.UpgradeResult" enum="GoogleUpdateUpgradeStatus"
-    expires_after="M85">
+    expires_after="M86">
   <owner>grt@chromium.org</owner>
+  <owner>ydago@chromium.org</owner>
   <summary>The result of an on-demand update check.</summary>
 </histogram>
 
diff --git a/tools/metrics/histograms/histograms_xml/others/histograms.xml b/tools/metrics/histograms/histograms_xml/others/histograms.xml
index bd1f700..4e08d06e 100644
--- a/tools/metrics/histograms/histograms_xml/others/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/others/histograms.xml
@@ -2245,6 +2245,16 @@
   </summary>
 </histogram>
 
+<histogram name="Clipboard.ExtensionContentScriptReadHasUserActivation"
+    units="proportion" expires_after="2021-04-01">
+  <owner>huangdarwin@chromium.org</owner>
+  <owner>src/third_party/blink/renderer/modules/clipboard/OWNERS</owner>
+  <summary>
+    For calls to document.execCommand('paste') by extensions via content
+    scripts, record the proportion of calls with user activation.
+  </summary>
+</histogram>
+
 <histogram name="Clipboard.Read" enum="ClipboardFormatRead"
     expires_after="2021-03-07">
   <owner>huangdarwin@chromium.org</owner>
@@ -11336,8 +11346,9 @@
 </histogram>
 
 <histogram name="RenderViewContextMenu.Shown" enum="RenderViewContextMenuItem"
-    expires_after="M85">
+    expires_after="M95">
   <owner>avi@chromium.org</owner>
+  <owner>edwardjung@chromium.org</owner>
   <owner>mpearson@chromium.org</owner>
   <summary>Count of renderer view context menu items shown.</summary>
 </histogram>
diff --git a/tools/metrics/histograms/histograms_xml/password/histograms.xml b/tools/metrics/histograms/histograms_xml/password/histograms.xml
index caa775c..f32f0e3 100644
--- a/tools/metrics/histograms/histograms_xml/password/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/password/histograms.xml
@@ -2432,8 +2432,8 @@
 </histogram>
 
 <histogram name="PasswordProtection.VisualFeatureExtractionDuration" units="ms"
-    expires_after="M85">
-  <owner>vakh@chromium.org</owner>
+    expires_after="2021-04-05">
+  <owner>drubery@chromium.org</owner>
   <owner>chrome-safebrowsing-alerts@google.com</owner>
   <summary>
     The time it takes to extract the visual features of a login page before
diff --git a/tools/metrics/histograms/histograms_xml/sync/histograms.xml b/tools/metrics/histograms/histograms_xml/sync/histograms.xml
index 6ac807c..7d3ec2c8 100644
--- a/tools/metrics/histograms/histograms_xml/sync/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/sync/histograms.xml
@@ -470,6 +470,9 @@
 
 <histogram name="Sync.MissingBookmarkPermanentNodes"
     enum="SyncMissingBookmarkPermanentNodes" expires_after="2020-08-02">
+  <obsolete>
+    Removed as of 10/2020.
+  </obsolete>
   <owner>mamir@chromium.org</owner>
   <owner>mastiz@chromium.org</owner>
   <summary>
diff --git a/tools/metrics/histograms/histograms_xml/translate/histograms.xml b/tools/metrics/histograms/histograms_xml/translate/histograms.xml
index 178a11bb..512a971 100644
--- a/tools/metrics/histograms/histograms_xml/translate/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/translate/histograms.xml
@@ -635,6 +635,17 @@
   </summary>
 </histogram>
 
+<histogram name="Translate.TranslateAssistContentResult"
+    enum="TranslateAssistContentResult" expires_after="M90">
+  <owner>jds@chromium.org</owner>
+  <owner>chrome-language@google.com</owner>
+  <summary>
+    Android: Records the result of assembling translate data to provide to
+    Assistant via AssistContent. See TranslateAssistContentResult in enums.xml
+    for possible values.
+  </summary>
+</histogram>
+
 <histogram name="Translate.TranslateFrameCount" units="frames"
     expires_after="M88">
   <owner>sclittle@google.com</owner>
diff --git a/tools/metrics/histograms/histograms_xml/variations/histograms.xml b/tools/metrics/histograms/histograms_xml/variations/histograms.xml
index d1f3ce2..fe3b5b61 100644
--- a/tools/metrics/histograms/histograms_xml/variations/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/variations/histograms.xml
@@ -121,6 +121,7 @@
     expires_after="2020-12-15">
   <owner>caitlinfischer@google.com</owner>
   <owner>src/base/metrics/OWNERS</owner>
+  <component>Internals&gt;Metrics</component>
   <summary>
     The owner of the top-level domain from which certain subframe-initiated HTTP
     requests are made. It's logged after determining that (i) the request should
@@ -148,6 +149,7 @@
   <owner>jwd@chromium.org</owner>
   <owner>caitlinfischer@google.com</owner>
   <owner>src/base/metrics/OWNERS</owner>
+  <component>Internals&gt;Metrics</component>
   <summary>
     Details about the request context in which an HTTP request is made. Logged
     after determining that the request should include variations headers but
diff --git a/tools/perf/core/about_tracing_integration_test.py b/tools/perf/core/about_tracing_integration_test.py
deleted file mode 100644
index fdd2971..0000000
--- a/tools/perf/core/about_tracing_integration_test.py
+++ /dev/null
@@ -1,37 +0,0 @@
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-from telemetry import decorators
-from telemetry.testing import tab_test_case
-
-
-class AboutTracingIntegrationTest(tab_test_case.TabTestCase):
-
-  @decorators.Disabled('android',
-                       'win',       # https://crbug.com/632871
-                       'chromeos')  # https://crbug.com/654044
-  def testBasicTraceRecording(self):
-    action_runner = self._tab.action_runner
-    action_runner.Navigate('chrome://tracing')
-    record_button_js = (
-        "document.querySelector('tr-ui-timeline-view').shadowRoot."
-        "querySelector('#record-button')")
-
-    # Click 'record' to trigger record selection diaglog.
-    action_runner.WaitForElement(element_function=record_button_js)
-    action_runner.ClickElement(element_function=record_button_js)
-
-    # Wait for record selection diaglog to pop up, then click record.
-    action_runner.WaitForElement(selector='.overlay')
-    action_runner.ClickElement(
-        element_function=("document.querySelector('.overlay').shadowRoot."
-                          "querySelectorAll('button')[0]"))
-
-    # Stop recording after 1 seconds.
-    action_runner.Wait(1)
-    action_runner.ClickElement(
-        element_function=
-        "document.querySelector('.overlay').querySelector('button')")
-
-    # Make sure that we can see the browser track.
-    action_runner.WaitForElement(selector='div[title~="Browser"]')
diff --git a/ui/accessibility/platform/BUILD.gn b/ui/accessibility/platform/BUILD.gn
index 2f015b9..8baee77 100644
--- a/ui/accessibility/platform/BUILD.gn
+++ b/ui/accessibility/platform/BUILD.gn
@@ -57,6 +57,9 @@
     # Used by //chrome/test/browser_tests/browser_view_browsertest.cc
     "ax_platform_node_test_helper.cc",
     "ax_platform_node_test_helper.h",
+
+    # Used by DumpAccTree testsuite and a11y tools
+    "inspect/inspect.h",
   ]
 
   public_deps = [
diff --git a/ui/accessibility/platform/inspect/inspect.h b/ui/accessibility/platform/inspect/inspect.h
new file mode 100644
index 0000000..09d0749
--- /dev/null
+++ b/ui/accessibility/platform/inspect/inspect.h
@@ -0,0 +1,39 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef UI_ACCESSIBILITY_PLATFORM_INSPECT_INSPECT_H_
+#define UI_ACCESSIBILITY_PLATFORM_INSPECT_INSPECT_H_
+
+#include <string>
+
+#include "ui/accessibility/ax_export.h"
+
+namespace ui {
+
+// Tree selector used to identify an accessible tree to traverse, it can be
+// built by a pre-defined tree type like Chromium to indicate that Chromium
+// browser tree should be traversed and/or by a string pattern which matches
+// an accessible name of a root of some accessible subtree.
+struct AX_EXPORT AXTreeSelector {
+  enum Type {
+    None = 0,
+    ActiveTab = 1 << 0,
+    Chrome = 1 << 1,
+    Chromium = 1 << 2,
+    Firefox = 1 << 3,
+    Safari = 1 << 4,
+  };
+  int types{None};
+  std::string pattern;
+
+  AXTreeSelector() = default;
+  AXTreeSelector(int types, const std::string& pattern)
+      : types(types), pattern(pattern) {}
+
+  bool empty() const { return types == None && pattern.empty(); }
+};
+
+}  // namespace ui
+
+#endif  // UI_ACCESSIBILITY_PLATFORM_INSPECT_INSPECT_H_
diff --git a/ui/base/prediction/prediction_metrics_handler.cc b/ui/base/prediction/prediction_metrics_handler.cc
index f1d9b1d8..e782e67 100644
--- a/ui/base/prediction/prediction_metrics_handler.cc
+++ b/ui/base/prediction/prediction_metrics_handler.cc
@@ -2,18 +2,14 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include <utility>
-
 #include "ui/base/prediction/prediction_metrics_handler.h"
 
 #include "base/metrics/histogram_functions.h"
-#include "base/strings/strcat.h"
 
 namespace ui {
 
-PredictionMetricsHandler::PredictionMetricsHandler(const char* histogram_name)
-    : histogram_name_(std::move(histogram_name)) {}
-PredictionMetricsHandler::~PredictionMetricsHandler() = default;
+PredictionMetricsHandler::PredictionMetricsHandler() {}
+PredictionMetricsHandler::~PredictionMetricsHandler() {}
 
 void PredictionMetricsHandler::AddRealEvent(const gfx::PointF& pos,
                                             const base::TimeTicks& time_stamp,
@@ -134,25 +130,25 @@
   for (int i = 0; i < first_needed_event - 1; i++)
     events_queue_.pop_front();
 
+  std::string kPredictionMetrics = "Event.InputEventPrediction.Scroll.";
+
   double score = ComputeOverUnderPredictionMetric();
   if (score >= 0) {
-    base::UmaHistogramCounts1000(
-        base::StrCat({histogram_name_, ".OverPrediction"}), score);
+    base::UmaHistogramCounts1000(kPredictionMetrics + "OverPrediction", score);
   } else {
-    base::UmaHistogramCounts1000(
-        base::StrCat({histogram_name_, ".UnderPrediction"}), -score);
+    base::UmaHistogramCounts1000(kPredictionMetrics + "UnderPrediction",
+                                 -score);
   }
 
   // Need |last_predicted_| to compute WrongDirection and Jitter metrics.
   if (!last_predicted_.has_value())
     return;
 
-  base::UmaHistogramBoolean(base::StrCat({histogram_name_, ".WrongDirection"}),
+  base::UmaHistogramBoolean(kPredictionMetrics + "WrongDirection",
                             ComputeWrongDirectionMetric());
-  base::UmaHistogramCounts1000(
-      base::StrCat({histogram_name_, ".PredictionJitter"}),
-      ComputePredictionJitterMetric());
-  base::UmaHistogramCounts1000(base::StrCat({histogram_name_, ".VisualJitter"}),
+  base::UmaHistogramCounts1000(kPredictionMetrics + "PredictionJitter",
+                               ComputePredictionJitterMetric());
+  base::UmaHistogramCounts1000(kPredictionMetrics + "VisualJitter",
                                ComputeVisualJitterMetric());
 }
 
diff --git a/ui/base/prediction/prediction_metrics_handler.h b/ui/base/prediction/prediction_metrics_handler.h
index 24167f5..648ccdd 100644
--- a/ui/base/prediction/prediction_metrics_handler.h
+++ b/ui/base/prediction/prediction_metrics_handler.h
@@ -25,7 +25,7 @@
 // few metrics.
 class COMPONENT_EXPORT(UI_BASE_PREDICTION) PredictionMetricsHandler {
  public:
-  explicit PredictionMetricsHandler(const char* histogram_name);
+  explicit PredictionMetricsHandler();
   ~PredictionMetricsHandler();
 
   // Struct used to store predicted and real event information.
@@ -103,12 +103,6 @@
   base::Optional<gfx::PointF> last_predicted_ = base::nullopt;
   // The first real event position which time is later than the predicted time.
   gfx::PointF next_real_;
-
-  // Beginning of the full histogram name. It will have the various metrics'
-  // names (.OverPrediction, .UnderPrediction, .WrongDirection,
-  // .PredictionJitter, .VisualJitter) appended to it when counting the metric
-  // in a histogram.
-  const char* const histogram_name_;
 };
 
 }  // namespace ui
diff --git a/ui/base/prediction/prediction_metrics_handler_unittest.cc b/ui/base/prediction/prediction_metrics_handler_unittest.cc
index fcfa9c0..f44df0d 100644
--- a/ui/base/prediction/prediction_metrics_handler_unittest.cc
+++ b/ui/base/prediction/prediction_metrics_handler_unittest.cc
@@ -29,8 +29,7 @@
   explicit PredictionMetricsHandlerTest() {}
 
   void SetUp() override {
-    metrics_handler_ = std::make_unique<PredictionMetricsHandler>(
-        "Event.InputEventPrediction.Scroll");
+    metrics_handler_ = std::make_unique<PredictionMetricsHandler>();
     histogram_tester_ = std::make_unique<base::HistogramTester>();
   }
 
diff --git a/ui/chromeos/translations/ui_chromeos_strings_de.xtb b/ui/chromeos/translations/ui_chromeos_strings_de.xtb
index 3ad9d3a..b852ee1e 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_de.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_de.xtb
@@ -282,6 +282,7 @@
 <translation id="4072248638558688893">Tamil-Tastatur (phonetisch)</translation>
 <translation id="4124935795427217608">Einhorn</translation>
 <translation id="4158739975813877944">Wiedergabeliste öffnen</translation>
+<translation id="4159731583141908892"><ph name="FILE_NAME" /> verschoben.</translation>
 <translation id="418179967336296930">Russische Tastatur (YaZHert)</translation>
 <translation id="4193154014135846272">Google-Dokument</translation>
 <translation id="4195249722193633765">App mit Linux (Beta) installieren</translation>
@@ -317,6 +318,7 @@
 <translation id="4582497162516204941">Installation mit Linux (Beta)</translation>
 <translation id="4594543368593301662">Ergebnisse für <ph name="SEARCH_TERM" />.</translation>
 <translation id="4603392156942865207"><ph name="FILE_NAME" /> wird in den Ordner "<ph name="FOLDER_NAME" />" kopiert</translation>
+<translation id="4627439232948440198">Sanskrit</translation>
 <translation id="4631887759990505102">Musiker</translation>
 <translation id="4656293982926141856">Auf diesem Computer</translation>
 <translation id="4669606053856530811">Mitglieder von "<ph name="SOURCE_NAME" />" verlieren den Zugriff, sofern Sie diese Dateien nicht mit ihnen teilen.</translation>
@@ -617,6 +619,7 @@
 <translation id="7693909743393669729">Durch die Formatierung eines Laufwerks werden alle darauf gespeicherten Daten gelöscht und alle vorhandenen Partitionen entfernt. Dies schließt ggf. auch Partitionen ein, die nicht sichtbar sind. Diese Aktion kann nicht rückgängig gemacht werden.</translation>
 <translation id="7695430100978772476">"<ph name="DRIVE_NAME" />" konnte nicht formatiert werden</translation>
 <translation id="770015031906360009">Griechisch</translation>
+<translation id="7705251383879779343"><ph name="FILE_NAME" /> kopiert.</translation>
 <translation id="7706319470528945664">Portugiesische Tastatur</translation>
 <translation id="7711920809702896782">Bildinformationen</translation>
 <translation id="7724603315864178912">Ausschneiden</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_es-419.xtb b/ui/chromeos/translations/ui_chromeos_strings_es-419.xtb
index 9f4e9bd..4fc30d5 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_es-419.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_es-419.xtb
@@ -282,6 +282,7 @@
 <translation id="4072248638558688893">Teclado tamil (fonético)</translation>
 <translation id="4124935795427217608">Unicornio</translation>
 <translation id="4158739975813877944">Abrir lista de reproducción</translation>
+<translation id="4159731583141908892">Se movió <ph name="FILE_NAME" />.</translation>
 <translation id="418179967336296930">Teclado fonético de ruso (YaZHert)</translation>
 <translation id="4193154014135846272">Documento de Google</translation>
 <translation id="4195249722193633765">Instalar app con Linux (Beta)</translation>
@@ -317,6 +318,7 @@
 <translation id="4582497162516204941">Instalar con Linux (Beta)</translation>
 <translation id="4594543368593301662">Se muestran los resultados de <ph name="SEARCH_TERM" />.</translation>
 <translation id="4603392156942865207">Copiando <ph name="FILE_NAME" /> a <ph name="FOLDER_NAME" /></translation>
+<translation id="4627439232948440198">Sánscrito</translation>
 <translation id="4631887759990505102">Artista</translation>
 <translation id="4656293982926141856">Esta computadora</translation>
 <translation id="4669606053856530811">Los miembros de "<ph name="SOURCE_NAME" />" ya no tendrán acceso a estos elementos, a menos que se los comparta con ellos.</translation>
@@ -617,6 +619,7 @@
 <translation id="7693909743393669729">Si formateas una unidad, se borrarán todos los datos almacenados allí y se eliminarán todas las particiones existentes, incluidas las que no están visibles. No se puede deshacer esta acción.</translation>
 <translation id="7695430100978772476">No se pudo formatear <ph name="DRIVE_NAME" /></translation>
 <translation id="770015031906360009">Griego</translation>
+<translation id="7705251383879779343">Se copió <ph name="FILE_NAME" />.</translation>
 <translation id="7706319470528945664">Teclado portugués</translation>
 <translation id="7711920809702896782">Información de la imagen</translation>
 <translation id="7724603315864178912">Cortar</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_fr.xtb b/ui/chromeos/translations/ui_chromeos_strings_fr.xtb
index f0bef4c..06d4dbf 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_fr.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_fr.xtb
@@ -282,6 +282,7 @@
 <translation id="4072248638558688893">Clavier tamoul (phonétique)</translation>
 <translation id="4124935795427217608">Licorne</translation>
 <translation id="4158739975813877944">Ouvrir la playlist</translation>
+<translation id="4159731583141908892"><ph name="FILE_NAME" /> déplacé.</translation>
 <translation id="418179967336296930">Clavier russe phonétique (YaZHert)</translation>
 <translation id="4193154014135846272">Document Google</translation>
 <translation id="4195249722193633765">Installez l'application avec Linux (Bêta)</translation>
@@ -317,6 +318,7 @@
 <translation id="4582497162516204941">Installer avec Linux (Bêta)</translation>
 <translation id="4594543368593301662">Résultats de recherche pour <ph name="SEARCH_TERM" />.</translation>
 <translation id="4603392156942865207">Copie du fichier <ph name="FILE_NAME" /> dans <ph name="FOLDER_NAME" />…</translation>
+<translation id="4627439232948440198">Sanscrit</translation>
 <translation id="4631887759990505102">Artiste</translation>
 <translation id="4656293982926141856">Cet ordinateur</translation>
 <translation id="4669606053856530811">Les membres de "<ph name="SOURCE_NAME" />" n'auront plus accès à ces éléments, à moins qu'ils ne soient partagés avec eux.</translation>
@@ -617,6 +619,7 @@
 <translation id="7693909743393669729">Le formatage d'un disque entraîne la suppression de toutes les données qu'il contient et de toutes ses partitions, y compris les partitions invisibles. Cette action est irréversible.</translation>
 <translation id="7695430100978772476">Impossible de formater <ph name="DRIVE_NAME" /></translation>
 <translation id="770015031906360009">Grec</translation>
+<translation id="7705251383879779343"><ph name="FILE_NAME" /> copié.</translation>
 <translation id="7706319470528945664">Clavier portugais</translation>
 <translation id="7711920809702896782">Informations sur les fichiers image</translation>
 <translation id="7724603315864178912">Couper</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_mr.xtb b/ui/chromeos/translations/ui_chromeos_strings_mr.xtb
index d48306ac..182e272 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_mr.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_mr.xtb
@@ -282,6 +282,7 @@
 <translation id="4072248638558688893">तामिळ (Phonetic)</translation>
 <translation id="4124935795427217608">युनिकॉर्न</translation>
 <translation id="4158739975813877944">प्लेलिस्ट उघडा</translation>
+<translation id="4159731583141908892"><ph name="FILE_NAME" /> हलवला.</translation>
 <translation id="418179967336296930">रशियन ध्वन्यात्मक (YaZHert) कीबोर्ड</translation>
 <translation id="4193154014135846272">Google दस्तऐवज</translation>
 <translation id="4195249722193633765">Linux (बीटा) सह ॲप इंस्टॉल करा</translation>
@@ -317,6 +318,7 @@
 <translation id="4582497162516204941">Linux (बीटा) इंस्टॉल करा</translation>
 <translation id="4594543368593301662"><ph name="SEARCH_TERM" /> साठी परिणाम दाखवत आहे.</translation>
 <translation id="4603392156942865207"><ph name="FILE_NAME" /> <ph name="FOLDER_NAME" /> वर कॉपी करत आहे</translation>
+<translation id="4627439232948440198">संस्कृत</translation>
 <translation id="4631887759990505102">कलाकार</translation>
 <translation id="4656293982926141856">हा कॉंप्युटर</translation>
 <translation id="4669606053856530811">'<ph name="SOURCE_NAME" />' च्या सदस्यांशी हे आयटम शेअर केले जात नाही तोवर त्यांना ॲक्सेस असणार नाही.</translation>
@@ -617,6 +619,7 @@
 <translation id="7693909743393669729">ड्राइव्ह फॉरमॅट केल्याने त्यावर स्टोअर केलेला सर्व डेटा मिटवला जाईल आणि दृश्यमान नसू शकणार्‍या पार्टिशनसह, सध्याची सर्व पार्टिशन काढून टाकली जातील. ही कृती पहिल्यासारखी केली जाऊ शकत नाही.</translation>
 <translation id="7695430100978772476"><ph name="DRIVE_NAME" /> फॉरमॅट करता आली नाही</translation>
 <translation id="770015031906360009">ग्रीक</translation>
+<translation id="7705251383879779343"><ph name="FILE_NAME" /> कॉपी केला.</translation>
 <translation id="7706319470528945664">पोर्तुगीज कीबोर्ड</translation>
 <translation id="7711920809702896782">इमेज माहिती</translation>
 <translation id="7724603315864178912">कट करा</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_nl.xtb b/ui/chromeos/translations/ui_chromeos_strings_nl.xtb
index 296762e..61843e0 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_nl.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_nl.xtb
@@ -282,6 +282,7 @@
 <translation id="4072248638558688893">Tamil toetsenbord (fonetisch)</translation>
 <translation id="4124935795427217608">Eenhoorn</translation>
 <translation id="4158739975813877944">Playlist openen</translation>
+<translation id="4159731583141908892"><ph name="FILE_NAME" /> verplaatst.</translation>
 <translation id="418179967336296930">Fonetisch Russisch toetsenbord (YaZHert)</translation>
 <translation id="4193154014135846272">Google-document</translation>
 <translation id="4195249722193633765">App met Linux (bèta) installeren</translation>
@@ -317,6 +318,7 @@
 <translation id="4582497162516204941">Installeren met Linux (bèta)</translation>
 <translation id="4594543368593301662">Resultaten voor <ph name="SEARCH_TERM" />.</translation>
 <translation id="4603392156942865207"><ph name="FILE_NAME" /> kopiëren naar <ph name="FOLDER_NAME" /></translation>
+<translation id="4627439232948440198">Sanskriet</translation>
 <translation id="4631887759990505102">Artiest</translation>
 <translation id="4656293982926141856">Deze computer</translation>
 <translation id="4669606053856530811">Leden van '<ph name="SOURCE_NAME" />' hebben geen toegang meer, tenzij deze items met ze zijn gedeeld.</translation>
@@ -618,6 +620,7 @@
 <translation id="7693909743393669729">Tijdens het formatteren van een schijf worden alle opgeslagen gegevens en alle bestaande partities verwijderd, inclusief partities die mogelijk niet zichtbaar zijn. Deze actie kan niet ongedaan worden gemaakt.</translation>
 <translation id="7695430100978772476">Formatteren van <ph name="DRIVE_NAME" /> is mislukt</translation>
 <translation id="770015031906360009">Grieks</translation>
+<translation id="7705251383879779343"><ph name="FILE_NAME" /> gekopieerd.</translation>
 <translation id="7706319470528945664">Portugees toetsenbord</translation>
 <translation id="7711920809702896782">Afbeeldingsgegevens</translation>
 <translation id="7724603315864178912">Knip</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_pt-BR.xtb b/ui/chromeos/translations/ui_chromeos_strings_pt-BR.xtb
index 14955215..76af4d3 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_pt-BR.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_pt-BR.xtb
@@ -282,6 +282,7 @@
 <translation id="4072248638558688893">Teclado tâmil (fonético)</translation>
 <translation id="4124935795427217608">Unicórnio</translation>
 <translation id="4158739975813877944">Abrir lista de reprodução</translation>
+<translation id="4159731583141908892"><ph name="FILE_NAME" /> movido.</translation>
 <translation id="418179967336296930">Teclado fonético russo (YaZHert)</translation>
 <translation id="4193154014135846272">Documento do Google</translation>
 <translation id="4195249722193633765">Instalar aplicativo com o Linux (Beta)</translation>
@@ -317,6 +318,7 @@
 <translation id="4582497162516204941">Instalar com o Linux (Beta)</translation>
 <translation id="4594543368593301662">Exibindo resultados para <ph name="SEARCH_TERM" />.</translation>
 <translation id="4603392156942865207">Copiando <ph name="FILE_NAME" /> para <ph name="FOLDER_NAME" /></translation>
+<translation id="4627439232948440198">Sânscrito</translation>
 <translation id="4631887759990505102">Artista</translation>
 <translation id="4656293982926141856">Neste computador</translation>
 <translation id="4669606053856530811">Membros de '<ph name="SOURCE_NAME" />' perderão acesso a menos que esses itens sejam compartilhados com eles.</translation>
@@ -617,6 +619,7 @@
 <translation id="7693909743393669729">Formatar uma unidade excluirá todos os dados armazenados nela e todas as partições existentes, incluindo partições não visíveis. Essa ação não pode ser desfeita.</translation>
 <translation id="7695430100978772476">Não foi possível formatar <ph name="DRIVE_NAME" />.</translation>
 <translation id="770015031906360009">Grego</translation>
+<translation id="7705251383879779343"><ph name="FILE_NAME" /> copiado.</translation>
 <translation id="7706319470528945664">Teclado português</translation>
 <translation id="7711920809702896782">Informações sobre a imagem</translation>
 <translation id="7724603315864178912">Recortar</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ru.xtb b/ui/chromeos/translations/ui_chromeos_strings_ru.xtb
index be377881..7c97fbb 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_ru.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_ru.xtb
@@ -282,6 +282,7 @@
 <translation id="4072248638558688893">Тамильская раскладка (фонетическая)</translation>
 <translation id="4124935795427217608">Единорог</translation>
 <translation id="4158739975813877944">Открыть плейлист</translation>
+<translation id="4159731583141908892">Перемещено: <ph name="FILE_NAME" />.</translation>
 <translation id="418179967336296930">Русская раскладка (фонетическая – YaZHert)</translation>
 <translation id="4193154014135846272">Документ Google</translation>
 <translation id="4195249722193633765">Установка приложения для Linux (бета)</translation>
@@ -317,6 +318,7 @@
 <translation id="4582497162516204941">Установить с помощью ОС Linux (бета-версия)</translation>
 <translation id="4594543368593301662">Результаты поиска по запросу "<ph name="SEARCH_TERM" />".</translation>
 <translation id="4603392156942865207">Копирование файла "<ph name="FILE_NAME" />" в папку "<ph name="FOLDER_NAME" />"…</translation>
+<translation id="4627439232948440198">Санскрит</translation>
 <translation id="4631887759990505102">Исполнитель</translation>
 <translation id="4656293982926141856">С компьютера</translation>
 <translation id="4669606053856530811">Пользователи общего диска "<ph name="SOURCE_NAME" />" больше не смогут использовать эти объекты, если к ним не будет включен общий доступ.</translation>
@@ -617,6 +619,7 @@
 <translation id="7693909743393669729">При форматировании диска все хранящиеся на нем данные и созданные разделы (включая скрытые) будут удалены. Это действие нельзя отменить.</translation>
 <translation id="7695430100978772476">Не удалось отформатировать внешнее хранилище "<ph name="DRIVE_NAME" />".</translation>
 <translation id="770015031906360009">Греческий</translation>
+<translation id="7705251383879779343">Скопировано: <ph name="FILE_NAME" />.</translation>
 <translation id="7706319470528945664">Португальская раскладка</translation>
 <translation id="7711920809702896782">Информация об изображении</translation>
 <translation id="7724603315864178912">Вырезать</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_th.xtb b/ui/chromeos/translations/ui_chromeos_strings_th.xtb
index ba85321..cdc3957 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_th.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_th.xtb
@@ -282,6 +282,7 @@
 <translation id="4072248638558688893">แป้นพิมพ์ภาษาทมิฬ (คำที่ใช้ออกเสียง)</translation>
 <translation id="4124935795427217608">ยูนิคอร์น</translation>
 <translation id="4158739975813877944">เปิดเพลย์ลิสต์</translation>
+<translation id="4159731583141908892">ย้าย <ph name="FILE_NAME" /> แล้ว</translation>
 <translation id="418179967336296930">แป้นพิมพ์การถ่ายเสียงภาษารัสเซีย (YaZHert)</translation>
 <translation id="4193154014135846272">เอกสารของ Google</translation>
 <translation id="4195249722193633765">ติดตั้งแอปด้วย Linux (เบต้า)</translation>
@@ -317,6 +318,7 @@
 <translation id="4582497162516204941">ติดตั้งด้วย Linux (เบต้า)</translation>
 <translation id="4594543368593301662">กำลังแสดงผลการค้นหาสำหรับ <ph name="SEARCH_TERM" /></translation>
 <translation id="4603392156942865207">กำลังคัดลอก <ph name="FILE_NAME" /> ไปยัง <ph name="FOLDER_NAME" /></translation>
+<translation id="4627439232948440198">สันสกฤต</translation>
 <translation id="4631887759990505102">ศิลปิน</translation>
 <translation id="4656293982926141856">คอมพิวเตอร์เครื่องนี้</translation>
 <translation id="4669606053856530811">สมาชิกของ "<ph name="SOURCE_NAME" />" จะสูญเสียสิทธิ์เข้าถึง เว้นแต่มีการแชร์รายการเหล่านี้กับสมาชิกดังกล่าว</translation>
@@ -617,6 +619,7 @@
 <translation id="7693909743393669729">การฟอร์แมตไดรฟ์จะลบข้อมูลทั้งหมดที่เก็บไว้ในไดรฟ์และลบพาร์ติชันที่มีอยู่ทั้งหมด รวมถึงพาร์ติชันที่อาจมองไม่เห็น การดำเนินการนี้เลิกทำไม่ได้</translation>
 <translation id="7695430100978772476">จัดรูปแบบ <ph name="DRIVE_NAME" /> ไม่ได้</translation>
 <translation id="770015031906360009">กรีก</translation>
+<translation id="7705251383879779343">คัดลอก <ph name="FILE_NAME" /> แล้ว</translation>
 <translation id="7706319470528945664">แป้นพิมพ์ภาษาโปรตุเกส</translation>
 <translation id="7711920809702896782">ข้อมูลรูปภาพ</translation>
 <translation id="7724603315864178912">ตัด</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ur.xtb b/ui/chromeos/translations/ui_chromeos_strings_ur.xtb
index 77da0c5..183c53f 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_ur.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_ur.xtb
@@ -282,6 +282,7 @@
 <translation id="4072248638558688893">تامل کی بورڈ (فونیٹک)</translation>
 <translation id="4124935795427217608">یونیکارن</translation>
 <translation id="4158739975813877944">پلے لسٹ کھولیں</translation>
+<translation id="4159731583141908892"><ph name="FILE_NAME" /> منتقل ہو گیا۔</translation>
 <translation id="418179967336296930">‏روسی فونیٹک (YaZHert) کی بورڈ</translation>
 <translation id="4193154014135846272">‏Google دستاویز</translation>
 <translation id="4195249722193633765">‏Linux (بی ٹا) کے ساتھ ایپ انسٹال کریں</translation>
@@ -317,6 +318,7 @@
 <translation id="4582497162516204941">‏Linux (بی ٹا) کے ساتھ انسٹال کریں</translation>
 <translation id="4594543368593301662"><ph name="SEARCH_TERM" /> کے لیے نتائج دکھائے جا رہے ہیں۔</translation>
 <translation id="4603392156942865207">‫<ph name="FILE_NAME" /> کو <ph name="FOLDER_NAME" /> میں کاپی کیا جا رہا ہے</translation>
+<translation id="4627439232948440198">سنسکرت</translation>
 <translation id="4631887759990505102">فن کار</translation>
 <translation id="4656293982926141856">اس کمپیوٹر پر</translation>
 <translation id="4669606053856530811">جب تک ان آئٹمز کا ان کے ساتھ اشتراک نہیں کیا جاتا ہے، <ph name="SOURCE_NAME" /> کے اراکین کی رسائی منقطع ہو جائے گي۔</translation>
@@ -616,6 +618,7 @@
 <translation id="7693909743393669729">ڈرائیو کو فارمیٹ کرنے سے اس پر اسٹور کردہ تمام ڈیٹا حذف ہو جائے گا اور سبھی موجودہ پارٹیشنز ہٹ جائيں گے، بشمول وہ پارٹیشنز جو شاید دکھائی نہ دے رہے ہوں۔ اس عمل کو کالعدم نہیں کیا جا سکتا۔</translation>
 <translation id="7695430100978772476"><ph name="DRIVE_NAME" /> کو فارمیٹ نہیں کیا جا سکا</translation>
 <translation id="770015031906360009">يونانی</translation>
+<translation id="7705251383879779343"><ph name="FILE_NAME" /> کاپی ہو گیا۔</translation>
 <translation id="7706319470528945664">پرتگالی کی بورڈ</translation>
 <translation id="7711920809702896782">تصویر کی معلومات</translation>
 <translation id="7724603315864178912">کٹ کریں</translation>
diff --git a/ui/ozone/platform/wayland/BUILD.gn b/ui/ozone/platform/wayland/BUILD.gn
index e61680b..2f4b01fc 100644
--- a/ui/ozone/platform/wayland/BUILD.gn
+++ b/ui/ozone/platform/wayland/BUILD.gn
@@ -47,6 +47,12 @@
     "host/gtk_primary_selection_device_manager.h",
     "host/gtk_primary_selection_offer.cc",
     "host/gtk_primary_selection_offer.h",
+    "host/zwp_primary_selection_device.cc",
+    "host/zwp_primary_selection_device.h",
+    "host/zwp_primary_selection_device_manager.cc",
+    "host/zwp_primary_selection_device_manager.h",
+    "host/zwp_primary_selection_offer.cc",
+    "host/zwp_primary_selection_offer.h",
     "host/shell_object_factory.cc",
     "host/shell_object_factory.h",
     "host/shell_popup_wrapper.cc",
@@ -157,6 +163,7 @@
     "//third_party/wayland-protocols:linux_dmabuf_protocol",
     "//third_party/wayland-protocols:linux_explicit_synchronization_protocol",
     "//third_party/wayland-protocols:presentation_time_protocol",
+    "//third_party/wayland-protocols:primary_selection_protocol",
     "//third_party/wayland-protocols:text_input_protocol",
     "//third_party/wayland-protocols:viewporter_protocol",
     "//third_party/wayland-protocols:wayland_drm_protocol",
diff --git a/ui/ozone/platform/wayland/common/wayland_object.cc b/ui/ozone/platform/wayland/common/wayland_object.cc
index 6d9c7536..1c8d7d7e 100644
--- a/ui/ozone/platform/wayland/common/wayland_object.cc
+++ b/ui/ozone/platform/wayland/common/wayland_object.cc
@@ -10,6 +10,7 @@
 #include <linux-dmabuf-unstable-v1-client-protocol.h>
 #include <linux-explicit-synchronization-unstable-v1-client-protocol.h>
 #include <presentation-time-client-protocol.h>
+#include <primary-selection-unstable-v1-client-protocol.h>
 #include <text-input-unstable-v1-client-protocol.h>
 #include <viewporter-client-protocol.h>
 #include <wayland-drm-client-protocol.h>
@@ -92,6 +93,30 @@
 void (*ObjectTraits<gtk_primary_selection_source>::deleter)(
     gtk_primary_selection_source*) = &gtk_primary_selection_source_destroy;
 
+const wl_interface*
+    ObjectTraits<zwp_primary_selection_device_manager_v1>::interface =
+        &zwp_primary_selection_device_manager_v1_interface;
+void (*ObjectTraits<zwp_primary_selection_device_manager_v1>::deleter)(
+    zwp_primary_selection_device_manager_v1*) =
+    &zwp_primary_selection_device_manager_v1_destroy;
+
+const wl_interface* ObjectTraits<zwp_primary_selection_device_v1>::interface =
+    &zwp_primary_selection_device_v1_interface;
+void (*ObjectTraits<zwp_primary_selection_device_v1>::deleter)(
+    zwp_primary_selection_device_v1*) =
+    &zwp_primary_selection_device_v1_destroy;
+
+const wl_interface* ObjectTraits<zwp_primary_selection_offer_v1>::interface =
+    &zwp_primary_selection_offer_v1_interface;
+void (*ObjectTraits<zwp_primary_selection_offer_v1>::deleter)(
+    zwp_primary_selection_offer_v1*) = &zwp_primary_selection_offer_v1_destroy;
+
+const wl_interface* ObjectTraits<zwp_primary_selection_source_v1>::interface =
+    &zwp_primary_selection_source_v1_interface;
+void (*ObjectTraits<zwp_primary_selection_source_v1>::deleter)(
+    zwp_primary_selection_source_v1*) =
+    &zwp_primary_selection_source_v1_destroy;
+
 const wl_interface* ObjectTraits<wl_buffer>::interface = &wl_buffer_interface;
 void (*ObjectTraits<wl_buffer>::deleter)(wl_buffer*) = &wl_buffer_destroy;
 
diff --git a/ui/ozone/platform/wayland/common/wayland_object.h b/ui/ozone/platform/wayland/common/wayland_object.h
index bfc61f88..393f08a 100644
--- a/ui/ozone/platform/wayland/common/wayland_object.h
+++ b/ui/ozone/platform/wayland/common/wayland_object.h
@@ -13,6 +13,10 @@
 struct gtk_primary_selection_device_manager;
 struct gtk_primary_selection_offer;
 struct gtk_primary_selection_source;
+struct zwp_primary_selection_device_v1;
+struct zwp_primary_selection_device_manager_v1;
+struct zwp_primary_selection_offer_v1;
+struct zwp_primary_selection_source_v1;
 struct wl_buffer;
 struct wl_callback;
 struct wl_compositor;
@@ -104,6 +108,30 @@
 };
 
 template <>
+struct ObjectTraits<zwp_primary_selection_device_manager_v1> {
+  static const wl_interface* interface;
+  static void (*deleter)(zwp_primary_selection_device_manager_v1*);
+};
+
+template <>
+struct ObjectTraits<zwp_primary_selection_device_v1> {
+  static const wl_interface* interface;
+  static void (*deleter)(zwp_primary_selection_device_v1*);
+};
+
+template <>
+struct ObjectTraits<zwp_primary_selection_offer_v1> {
+  static const wl_interface* interface;
+  static void (*deleter)(zwp_primary_selection_offer_v1*);
+};
+
+template <>
+struct ObjectTraits<zwp_primary_selection_source_v1> {
+  static const wl_interface* interface;
+  static void (*deleter)(zwp_primary_selection_source_v1*);
+};
+
+template <>
 struct ObjectTraits<wl_buffer> {
   static const wl_interface* interface;
   static void (*deleter)(wl_buffer*);
diff --git a/ui/ozone/platform/wayland/host/gtk_primary_selection_device.cc b/ui/ozone/platform/wayland/host/gtk_primary_selection_device.cc
index 1a68f9d..4554064 100644
--- a/ui/ozone/platform/wayland/host/gtk_primary_selection_device.cc
+++ b/ui/ozone/platform/wayland/host/gtk_primary_selection_device.cc
@@ -43,7 +43,7 @@
   DCHECK(self);
 
   self->connection()->clipboard()->UpdateSequenceNumber(
-      ClipboardBuffer::kCopyPaste);
+      ClipboardBuffer::kSelection);
 
   self->set_data_offer(std::make_unique<GtkPrimarySelectionOffer>(offer));
 }
diff --git a/ui/ozone/platform/wayland/host/gtk_primary_selection_offer.cc b/ui/ozone/platform/wayland/host/gtk_primary_selection_offer.cc
index a611215..f6e4cbd 100644
--- a/ui/ozone/platform/wayland/host/gtk_primary_selection_offer.cc
+++ b/ui/ozone/platform/wayland/host/gtk_primary_selection_offer.cc
@@ -6,12 +6,7 @@
 
 #include <gtk-primary-selection-client-protocol.h>
 
-#include <fcntl.h>
-#include <algorithm>
-
-#include "base/check.h"
 #include "base/files/file_util.h"
-#include "base/stl_util.h"
 #include "ui/base/clipboard/clipboard_constants.h"
 
 namespace ui {
diff --git a/ui/ozone/platform/wayland/host/wayland_clipboard.cc b/ui/ozone/platform/wayland/host/wayland_clipboard.cc
index e39d1ee0..43d1412 100644
--- a/ui/ozone/platform/wayland/host/wayland_clipboard.cc
+++ b/ui/ozone/platform/wayland/host/wayland_clipboard.cc
@@ -14,6 +14,8 @@
 #include "ui/ozone/platform/wayland/common/wayland_object.h"
 #include "ui/ozone/platform/wayland/host/gtk_primary_selection_device.h"
 #include "ui/ozone/platform/wayland/host/gtk_primary_selection_device_manager.h"
+#include "ui/ozone/platform/wayland/host/zwp_primary_selection_device.h"
+#include "ui/ozone/platform/wayland/host/zwp_primary_selection_device_manager.h"
 #include "ui/ozone/platform/wayland/host/wayland_connection.h"
 #include "ui/ozone/platform/wayland/host/wayland_data_device.h"
 #include "ui/ozone/platform/wayland/host/wayland_data_device_manager.h"
@@ -185,7 +187,8 @@
 }
 
 bool WaylandClipboard::IsSelectionBufferAvailable() const {
-  return (connection_->primary_selection_device_manager() != nullptr);
+  return (connection_->zwp_primary_selection_device_manager() != nullptr) ||
+         (connection_->gtk_primary_selection_device_manager() != nullptr);
 }
 
 void WaylandClipboard::SetData(PlatformClipboard::Data contents,
@@ -214,7 +217,15 @@
     return copypaste_clipboard_.get();
 
   if (buffer == ClipboardBuffer::kSelection) {
-    if (auto* manager = connection_->primary_selection_device_manager()) {
+    if (auto* manager = connection_->zwp_primary_selection_device_manager()) {
+      if (!primary_selection_clipboard_) {
+        primary_selection_clipboard_ =
+            std::make_unique<wl::ClipboardImpl<ZwpPrimarySelectionDeviceManager>>(
+                manager);
+      }
+      return primary_selection_clipboard_.get();
+    } else if (auto* manager =
+                   connection_->gtk_primary_selection_device_manager()) {
       if (!primary_selection_clipboard_) {
         primary_selection_clipboard_ = std::make_unique<
             wl::ClipboardImpl<GtkPrimarySelectionDeviceManager>>(manager);
diff --git a/ui/ozone/platform/wayland/host/wayland_connection.cc b/ui/ozone/platform/wayland/host/wayland_connection.cc
index 4c99dc8..3fc4631 100644
--- a/ui/ozone/platform/wayland/host/wayland_connection.cc
+++ b/ui/ozone/platform/wayland/host/wayland_connection.cc
@@ -21,6 +21,7 @@
 #include "ui/gfx/geometry/point.h"
 #include "ui/ozone/platform/wayland/common/wayland_object.h"
 #include "ui/ozone/platform/wayland/host/gtk_primary_selection_device_manager.h"
+#include "ui/ozone/platform/wayland/host/zwp_primary_selection_device_manager.h"
 #include "ui/ozone/platform/wayland/host/wayland_buffer_manager_host.h"
 #include "ui/ozone/platform/wayland/host/wayland_clipboard.h"
 #include "ui/ozone/platform/wayland/host/wayland_cursor.h"
@@ -351,14 +352,23 @@
         std::make_unique<WaylandDataDeviceManager>(
             data_device_manager.release(), connection);
     connection->CreateDataObjectsIfReady();
-  } else if (!connection->primary_selection_device_manager_ &&
+  } else if (!connection->gtk_primary_selection_device_manager_ &&
              strcmp(interface, "gtk_primary_selection_device_manager") == 0) {
-    wl::Object<gtk_primary_selection_device_manager> manager =
-        wl::Bind<gtk_primary_selection_device_manager>(
+    wl::Object<::gtk_primary_selection_device_manager> manager =
+        wl::Bind<::gtk_primary_selection_device_manager>(
             registry, name, kMaxGtkPrimarySelectionDeviceManagerVersion);
-    connection->primary_selection_device_manager_ =
+    connection->gtk_primary_selection_device_manager_ =
         std::make_unique<GtkPrimarySelectionDeviceManager>(manager.release(),
                                                            connection);
+  } else if (!connection->zwp_primary_selection_device_manager_ &&
+             strcmp(interface, "zwp_primary_selection_device_manager_v1") ==
+                 0) {
+    wl::Object<zwp_primary_selection_device_manager_v1> manager =
+        wl::Bind<zwp_primary_selection_device_manager_v1>(
+            registry, name, kMaxGtkPrimarySelectionDeviceManagerVersion);
+    connection->zwp_primary_selection_device_manager_ =
+        std::make_unique<ZwpPrimarySelectionDeviceManager>(manager.release(),
+                                                        connection);
   } else if (!connection->linux_explicit_synchronization_ &&
              (strcmp(interface, "zwp_linux_explicit_synchronization_v1") ==
               0)) {
diff --git a/ui/ozone/platform/wayland/host/wayland_connection.h b/ui/ozone/platform/wayland/host/wayland_connection.h
index ec7beb9..dbc7642 100644
--- a/ui/ozone/platform/wayland/host/wayland_connection.h
+++ b/ui/ozone/platform/wayland/host/wayland_connection.h
@@ -36,6 +36,7 @@
 class WaylandCursorPosition;
 class WaylandWindowDragController;
 class GtkPrimarySelectionDeviceManager;
+class ZwpPrimarySelectionDeviceManager;
 class XdgForeignWrapper;
 
 class WaylandConnection {
@@ -130,8 +131,13 @@
     return data_device_manager_.get();
   }
 
-  GtkPrimarySelectionDeviceManager* primary_selection_device_manager() const {
-    return primary_selection_device_manager_.get();
+  GtkPrimarySelectionDeviceManager* gtk_primary_selection_device_manager()
+      const {
+    return gtk_primary_selection_device_manager_.get();
+  }
+
+  ZwpPrimarySelectionDeviceManager* zwp_primary_selection_device_manager() const {
+    return zwp_primary_selection_device_manager_.get();
   }
 
   WaylandDataDragController* data_drag_controller() const {
@@ -218,7 +224,10 @@
   std::unique_ptr<XdgForeignWrapper> xdg_foreign_;
 
   std::unique_ptr<GtkPrimarySelectionDeviceManager>
-      primary_selection_device_manager_;
+      gtk_primary_selection_device_manager_;
+
+  std::unique_ptr<ZwpPrimarySelectionDeviceManager>
+      zwp_primary_selection_device_manager_;
 
   std::unique_ptr<WaylandDataDragController> data_drag_controller_;
   std::unique_ptr<WaylandWindowDragController> window_drag_controller_;
diff --git a/ui/ozone/platform/wayland/host/wayland_data_source.cc b/ui/ozone/platform/wayland/host/wayland_data_source.cc
index aaaf384..2788c04 100644
--- a/ui/ozone/platform/wayland/host/wayland_data_source.cc
+++ b/ui/ozone/platform/wayland/host/wayland_data_source.cc
@@ -5,6 +5,7 @@
 #include "ui/ozone/platform/wayland/host/wayland_data_source.h"
 
 #include <gtk-primary-selection-client-protocol.h>
+#include <primary-selection-unstable-v1-client-protocol.h>
 
 #include <cstdint>
 #include <vector>
@@ -145,6 +146,26 @@
   connection_->ScheduleFlush();
 }
 
+template <>
+void DataSource<zwp_primary_selection_source_v1>::Initialize() {
+  static const struct zwp_primary_selection_source_v1_listener
+      kDataSourceListener = {
+          DataSource<zwp_primary_selection_source_v1>::OnSend,
+          DataSource<zwp_primary_selection_source_v1>::OnCancel};
+  zwp_primary_selection_source_v1_add_listener(data_source_.get(),
+                                               &kDataSourceListener, this);
+}
+
+template <>
+void DataSource<zwp_primary_selection_source_v1>::Offer(
+    const std::vector<std::string>& mime_types) {
+  for (const auto& mime_type : mime_types)
+    zwp_primary_selection_source_v1_offer(data_source_.get(),
+                                          mime_type.c_str());
+  connection_->ScheduleFlush();
+}
+
 template class DataSource<gtk_primary_selection_source>;
+template class DataSource<zwp_primary_selection_source_v1>;
 
 }  // namespace wl
diff --git a/ui/ozone/platform/wayland/host/wayland_data_source.h b/ui/ozone/platform/wayland/host/wayland_data_source.h
index 2bcee21..b78a7f1e 100644
--- a/ui/ozone/platform/wayland/host/wayland_data_source.h
+++ b/ui/ozone/platform/wayland/host/wayland_data_source.h
@@ -15,6 +15,7 @@
 
 struct wl_data_source;
 struct gtk_primary_selection_source;
+struct zwp_primary_selection_source_v1;
 
 namespace wl {
 template <typename T>
@@ -34,13 +35,13 @@
 // Implementation wise, these variants are share a single class template, with
 // specializations defined for each underlying supported extensions. Below are
 // the type aliases for the variants currently supported.
-//
-// TODO(crbug.com/1088132): Support standard primary selection extension.
 
 using WaylandDataSource = wl::DataSource<wl_data_source>;
 
 using GtkPrimarySelectionSource = wl::DataSource<gtk_primary_selection_source>;
 
+using ZwpPrimarySelectionSource = wl::DataSource<zwp_primary_selection_source_v1>;
+
 }  // namespace ui
 
 namespace wl {
diff --git a/ui/ozone/platform/wayland/host/zwp_primary_selection_device.cc b/ui/ozone/platform/wayland/host/zwp_primary_selection_device.cc
new file mode 100644
index 0000000..afa8192
--- /dev/null
+++ b/ui/ozone/platform/wayland/host/zwp_primary_selection_device.cc
@@ -0,0 +1,72 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ui/ozone/platform/wayland/host/zwp_primary_selection_device.h"
+
+#include <primary-selection-unstable-v1-client-protocol.h>
+
+#include "ui/ozone/platform/wayland/host/zwp_primary_selection_offer.h"
+#include "ui/ozone/platform/wayland/host/wayland_connection.h"
+#include "ui/ozone/platform/wayland/host/wayland_data_source.h"
+
+namespace ui {
+
+// static
+ZwpPrimarySelectionDevice::ZwpPrimarySelectionDevice(
+    WaylandConnection* connection,
+    zwp_primary_selection_device_v1* data_device)
+    : WaylandDataDeviceBase(connection), data_device_(data_device) {
+  static const struct zwp_primary_selection_device_v1_listener kListener = {
+      ZwpPrimarySelectionDevice::OnDataOffer, ZwpPrimarySelectionDevice::OnSelection};
+  zwp_primary_selection_device_v1_add_listener(data_device_.get(), &kListener,
+                                               this);
+}
+
+ZwpPrimarySelectionDevice::~ZwpPrimarySelectionDevice() = default;
+
+void ZwpPrimarySelectionDevice::SetSelectionSource(
+    ZwpPrimarySelectionSource* source) {
+  DCHECK(source);
+  zwp_primary_selection_device_v1_set_selection(
+      data_device_.get(), source->data_source(), connection()->serial());
+  connection()->ScheduleFlush();
+}
+
+// static
+void ZwpPrimarySelectionDevice::OnDataOffer(
+    void* data,
+    zwp_primary_selection_device_v1* data_device,
+    zwp_primary_selection_offer_v1* offer) {
+  auto* self = static_cast<ZwpPrimarySelectionDevice*>(data);
+  DCHECK(self);
+
+  self->connection()->clipboard()->UpdateSequenceNumber(
+      ClipboardBuffer::kSelection);
+
+  self->set_data_offer(std::make_unique<ZwpPrimarySelectionOffer>(offer));
+}
+
+// static
+void ZwpPrimarySelectionDevice::OnSelection(
+    void* data,
+    zwp_primary_selection_device_v1* data_device,
+    zwp_primary_selection_offer_v1* offer) {
+  auto* self = static_cast<ZwpPrimarySelectionDevice*>(data);
+  DCHECK(self);
+
+  // 'offer' will be null to indicate that the selection is no longer valid,
+  // i.e. there is no longer clipboard data available to paste.
+  if (!offer) {
+    self->ResetDataOffer();
+
+    // Clear Clipboard cache.
+    self->connection()->clipboard()->SetData({}, {});
+    return;
+  }
+
+  DCHECK(self->data_offer());
+  self->data_offer()->EnsureTextMimeTypeIfNeeded();
+}
+
+}  // namespace ui
diff --git a/ui/ozone/platform/wayland/host/zwp_primary_selection_device.h b/ui/ozone/platform/wayland/host/zwp_primary_selection_device.h
new file mode 100644
index 0000000..69a7ee2
--- /dev/null
+++ b/ui/ozone/platform/wayland/host/zwp_primary_selection_device.h
@@ -0,0 +1,50 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef UI_OZONE_PLATFORM_WAYLAND_HOST_PRIMARY_SELECTION_DEVICE_H_
+#define UI_OZONE_PLATFORM_WAYLAND_HOST_PRIMARY_SELECTION_DEVICE_H_
+
+#include "ui/ozone/platform/wayland/common/wayland_object.h"
+#include "ui/ozone/platform/wayland/host/wayland_data_device_base.h"
+#include "ui/ozone/platform/wayland/host/wayland_data_source.h"
+
+struct zwp_primary_selection_device_v1;
+
+namespace ui {
+
+class WaylandConnection;
+
+// This class provides access to primary selection clipboard
+class ZwpPrimarySelectionDevice : public WaylandDataDeviceBase {
+ public:
+  ZwpPrimarySelectionDevice(WaylandConnection* connection,
+                         zwp_primary_selection_device_v1* data_device);
+
+  ZwpPrimarySelectionDevice(const ZwpPrimarySelectionDevice&) = delete;
+  ZwpPrimarySelectionDevice& operator =(const ZwpPrimarySelectionDevice&) = delete;
+
+  ~ZwpPrimarySelectionDevice() override;
+
+  zwp_primary_selection_device_v1* data_device() const {
+    return data_device_.get();
+  }
+
+  void SetSelectionSource(ZwpPrimarySelectionSource* source);
+
+ private:
+  // primary_selection_device_listener callbacks
+  static void OnDataOffer(void* data,
+                          zwp_primary_selection_device_v1* data_device,
+                          zwp_primary_selection_offer_v1* offer);
+  static void OnSelection(void* data,
+                          zwp_primary_selection_device_v1* data_device,
+                          zwp_primary_selection_offer_v1* offer);
+
+  // The Wayland object wrapped by this instance.
+  wl::Object<zwp_primary_selection_device_v1> data_device_;
+};
+
+}  // namespace ui
+
+#endif  // UI_OZONE_PLATFORM_WAYLAND_HOST_PRIMARY_SELECTION_DEVICE_H_
diff --git a/ui/ozone/platform/wayland/host/zwp_primary_selection_device_manager.cc b/ui/ozone/platform/wayland/host/zwp_primary_selection_device_manager.cc
new file mode 100644
index 0000000..f117180
--- /dev/null
+++ b/ui/ozone/platform/wayland/host/zwp_primary_selection_device_manager.cc
@@ -0,0 +1,47 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ui/ozone/platform/wayland/host/zwp_primary_selection_device_manager.h"
+
+#include <primary-selection-unstable-v1-client-protocol.h>
+
+#include <memory>
+
+#include "ui/ozone/platform/wayland/host/zwp_primary_selection_device.h"
+#include "ui/ozone/platform/wayland/host/wayland_connection.h"
+#include "ui/ozone/platform/wayland/host/wayland_data_source.h"
+
+namespace ui {
+
+ZwpPrimarySelectionDeviceManager::ZwpPrimarySelectionDeviceManager(
+    zwp_primary_selection_device_manager_v1* manager,
+    WaylandConnection* connection)
+    : device_manager_(manager), connection_(connection) {
+  DCHECK(connection_);
+  DCHECK(device_manager_);
+}
+
+ZwpPrimarySelectionDeviceManager::~ZwpPrimarySelectionDeviceManager() = default;
+
+ZwpPrimarySelectionDevice* ZwpPrimarySelectionDeviceManager::GetDevice() {
+  DCHECK(connection_->seat());
+  if (!device_) {
+    device_ = std::make_unique<ZwpPrimarySelectionDevice>(
+        connection_, zwp_primary_selection_device_manager_v1_get_device(
+                         device_manager_.get(), connection_->seat()));
+  }
+  DCHECK(device_);
+  return device_.get();
+}
+
+std::unique_ptr<ZwpPrimarySelectionSource>
+ZwpPrimarySelectionDeviceManager::CreateSource(
+    ZwpPrimarySelectionSource::Delegate* delegate) {
+  auto* data_source = zwp_primary_selection_device_manager_v1_create_source(
+      device_manager_.get());
+  return std::make_unique<ZwpPrimarySelectionSource>(data_source, connection_,
+                                                  delegate);
+}
+
+}  // namespace ui
diff --git a/ui/ozone/platform/wayland/host/zwp_primary_selection_device_manager.h b/ui/ozone/platform/wayland/host/zwp_primary_selection_device_manager.h
new file mode 100644
index 0000000..4f48f897
--- /dev/null
+++ b/ui/ozone/platform/wayland/host/zwp_primary_selection_device_manager.h
@@ -0,0 +1,45 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef UI_OZONE_PLATFORM_WAYLAND_HOST_PRIMARY_SELECTION_DEVICE_MANAGER_H_
+#define UI_OZONE_PLATFORM_WAYLAND_HOST_PRIMARY_SELECTION_DEVICE_MANAGER_H_
+
+#include <memory>
+
+#include "ui/ozone/platform/wayland/common/wayland_object.h"
+#include "ui/ozone/platform/wayland/host/wayland_data_source.h"
+
+namespace ui {
+
+class ZwpPrimarySelectionDevice;
+class WaylandConnection;
+
+class ZwpPrimarySelectionDeviceManager {
+ public:
+  using DataSource = ZwpPrimarySelectionSource;
+  using DataDevice = ZwpPrimarySelectionDevice;
+
+  ZwpPrimarySelectionDeviceManager(
+      zwp_primary_selection_device_manager_v1* manager,
+      WaylandConnection* connection);
+  ZwpPrimarySelectionDeviceManager(const ZwpPrimarySelectionDeviceManager&) = delete;
+  ZwpPrimarySelectionDeviceManager& operator=(
+      const ZwpPrimarySelectionDeviceManager&) = delete;
+  ~ZwpPrimarySelectionDeviceManager();
+
+  ZwpPrimarySelectionDevice* GetDevice();
+  std::unique_ptr<ZwpPrimarySelectionSource> CreateSource(
+      ZwpPrimarySelectionSource::Delegate* delegate);
+
+ private:
+  wl::Object<zwp_primary_selection_device_manager_v1> device_manager_;
+
+  WaylandConnection* const connection_;
+
+  std::unique_ptr<ZwpPrimarySelectionDevice> device_;
+};
+
+}  // namespace ui
+
+#endif  // UI_OZONE_PLATFORM_WAYLAND_HOST_PRIMARY_SELECTION_DEVICE_MANAGER_H_
diff --git a/ui/ozone/platform/wayland/host/zwp_primary_selection_offer.cc b/ui/ozone/platform/wayland/host/zwp_primary_selection_offer.cc
new file mode 100644
index 0000000..9a869e7
--- /dev/null
+++ b/ui/ozone/platform/wayland/host/zwp_primary_selection_offer.cc
@@ -0,0 +1,59 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ui/ozone/platform/wayland/host/zwp_primary_selection_offer.h"
+
+#include <primary-selection-unstable-v1-client-protocol.h>
+
+#include <fcntl.h>
+#include <algorithm>
+
+#include "base/check.h"
+#include "base/files/file_util.h"
+#include "base/stl_util.h"
+#include "ui/base/clipboard/clipboard_constants.h"
+
+namespace ui {
+
+ZwpPrimarySelectionOffer::ZwpPrimarySelectionOffer(
+    zwp_primary_selection_offer_v1* data_offer)
+    : data_offer_(data_offer) {
+  static const struct zwp_primary_selection_offer_v1_listener kListener = {
+      ZwpPrimarySelectionOffer::OnOffer};
+  zwp_primary_selection_offer_v1_add_listener(data_offer, &kListener, this);
+}
+
+ZwpPrimarySelectionOffer::~ZwpPrimarySelectionOffer() {
+  data_offer_.reset();
+}
+
+base::ScopedFD ZwpPrimarySelectionOffer::Receive(const std::string& mime_type) {
+  if (!base::Contains(mime_types(), mime_type))
+    return base::ScopedFD();
+
+  base::ScopedFD read_fd;
+  base::ScopedFD write_fd;
+  PCHECK(base::CreatePipe(&read_fd, &write_fd));
+
+  // If we needed to forcibly write "text/plain" as an available
+  // mimetype, then it is safer to "read" the clipboard data with
+  // a mimetype mime_type known to be available.
+  std::string effective_mime_type = mime_type;
+  if (mime_type == kMimeTypeText && text_plain_mime_type_inserted())
+    effective_mime_type = kMimeTypeTextUtf8;
+
+  zwp_primary_selection_offer_v1_receive(
+      data_offer_.get(), effective_mime_type.data(), write_fd.get());
+  return read_fd;
+}
+
+// static
+void ZwpPrimarySelectionOffer::OnOffer(void* data,
+                                    zwp_primary_selection_offer_v1* data_offer,
+                                    const char* mime_type) {
+  auto* self = static_cast<ZwpPrimarySelectionOffer*>(data);
+  self->AddMimeType(mime_type);
+}
+
+}  // namespace ui
diff --git a/ui/ozone/platform/wayland/host/zwp_primary_selection_offer.h b/ui/ozone/platform/wayland/host/zwp_primary_selection_offer.h
new file mode 100644
index 0000000..e1b6330
--- /dev/null
+++ b/ui/ozone/platform/wayland/host/zwp_primary_selection_offer.h
@@ -0,0 +1,50 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef UI_OZONE_PLATFORM_WAYLAND_HOST_PRIMARY_SELECTION_OFFER_H_
+#define UI_OZONE_PLATFORM_WAYLAND_HOST_PRIMARY_SELECTION_OFFER_H_
+
+#include <string>
+
+#include "base/files/scoped_file.h"
+#include "base/macros.h"
+#include "ui/ozone/platform/wayland/common/wayland_object.h"
+#include "ui/ozone/platform/wayland/host/wayland_data_offer_base.h"
+
+struct zwp_primary_selection_offer_v1;
+
+namespace ui {
+
+// This class represents a piece of data offered for transfer by another client,
+// the source client (see ZwpPrimarySelectionSource for more). It is used by the
+// primary selection mechanism.
+//
+// The offer describes MIME types that the data can be converted to and provides
+// the mechanism for transferring the data directly from the source client.
+class ZwpPrimarySelectionOffer : public WaylandDataOfferBase {
+ public:
+  // Takes ownership of data_offer.
+  explicit ZwpPrimarySelectionOffer(zwp_primary_selection_offer_v1* data_offer);
+
+  ZwpPrimarySelectionOffer(const ZwpPrimarySelectionOffer &) = delete;
+  ZwpPrimarySelectionOffer &operator =(const ZwpPrimarySelectionOffer &) = delete;
+
+  ~ZwpPrimarySelectionOffer() override;
+
+  // WaylandDataOfferBase overrides:
+  base::ScopedFD Receive(const std::string& mime_type) override;
+
+ private:
+  // primary_selection_offer_listener callbacks.
+  static void OnOffer(void* data,
+                      zwp_primary_selection_offer_v1* data_offer,
+                      const char* mime_type);
+
+  // The Wayland object wrapped by this instance.
+  wl::Object<zwp_primary_selection_offer_v1> data_offer_;
+};
+
+}  // namespace ui
+
+#endif  // UI_OZONE_PLATFORM_WAYLAND_HOST_PRIMARY_SELECTION_OFFER_H_
diff --git a/ui/strings/translations/ui_strings_bs.xtb b/ui/strings/translations/ui_strings_bs.xtb
index e717d3a..4d961f6 100644
--- a/ui/strings/translations/ui_strings_bs.xtb
+++ b/ui/strings/translations/ui_strings_bs.xtb
@@ -134,7 +134,7 @@
 <translation id="520299402983819650"><ph name="QUANTITY" /> PB</translation>
 <translation id="5266161281976477809">Trougao za otkrivanje</translation>
 <translation id="5278860589123563674">Slanje nije uspjelo</translation>
-<translation id="5283099933536931082">Aplikacija <ph name="APP_ITEM_TITLE" /> zahtijeva vašu pažnju.</translation>
+<translation id="5283099933536931082"><ph name="APP_ITEM_TITLE" /> traži da reagirate.</translation>
 <translation id="528468243742722775">Prekid</translation>
 <translation id="5329858601952122676">&amp;Obriši</translation>
 <translation id="5395308026110844773"><ph name="DRAGGED_APP_NAME" /> prekriva aplikaciju <ph name="IN_PLACE_APP" />. Pustite da kreirate folder.</translation>
@@ -145,7 +145,7 @@
 <translation id="5574202486608032840"><ph name="IDS_SHORT_PRODUCT_OS_NAME" /> sistem</translation>
 <translation id="5583640892426849032">Tipka za brisanje</translation>
 <translation id="5613020302032141669">Strelica ulijevo</translation>
-<translation id="5652575806481723716">Aplikacija <ph name="FOCUSED_APP_NAME" /> zahtijeva vašu pažnju.</translation>
+<translation id="5652575806481723716"><ph name="FOCUSED_APP_NAME" /> traži da reagirate.</translation>
 <translation id="5675363643668471212">Stavka na polici</translation>
 <translation id="5754277640426581776">{MINUTES,plural, =1{1 min}one{# min}few{# min}other{# min}}</translation>
 <translation id="5763338081255973061">{DAYS,plural, =0{Aktivan danas}=1{Aktivan prije 1 dan}one{Aktivan prije # dan}few{Aktivan prije # dana}other{Aktivan prije # dana}}</translation>
diff --git a/ui/strings/translations/ui_strings_es-419.xtb b/ui/strings/translations/ui_strings_es-419.xtb
index 1d6f2ba..bc507e9 100644
--- a/ui/strings/translations/ui_strings_es-419.xtb
+++ b/ui/strings/translations/ui_strings_es-419.xtb
@@ -134,6 +134,7 @@
 <translation id="520299402983819650"><ph name="QUANTITY" /> PB</translation>
 <translation id="5266161281976477809">Triángulo desplegable</translation>
 <translation id="5278860589123563674">No se pudo enviar</translation>
+<translation id="5283099933536931082"><ph name="APP_ITEM_TITLE" /> requiere tu atención.</translation>
 <translation id="528468243742722775">Finalizar</translation>
 <translation id="5329858601952122676">&amp;Suprimir</translation>
 <translation id="5395308026110844773">Arrastra la app <ph name="DRAGGED_APP_NAME" /> sobre <ph name="IN_PLACE_APP" /> y suéltala para crear una carpeta.</translation>
@@ -144,6 +145,7 @@
 <translation id="5574202486608032840">Sistema <ph name="IDS_SHORT_PRODUCT_OS_NAME" /></translation>
 <translation id="5583640892426849032">Tecla de retroceso</translation>
 <translation id="5613020302032141669">Flecha izquierda</translation>
+<translation id="5652575806481723716"><ph name="FOCUSED_APP_NAME" /> requiere tu atención.</translation>
 <translation id="5675363643668471212">Elemento de la biblioteca</translation>
 <translation id="5754277640426581776">{MINUTES,plural, =1{1 min}other{# min}}</translation>
 <translation id="5763338081255973061">{DAYS,plural, =0{Activo hoy}=1{Activo hace 1 día}other{Activo hace # días}}</translation>
diff --git a/ui/strings/translations/ui_strings_es.xtb b/ui/strings/translations/ui_strings_es.xtb
index d124520a..77451717 100644
--- a/ui/strings/translations/ui_strings_es.xtb
+++ b/ui/strings/translations/ui_strings_es.xtb
@@ -134,6 +134,7 @@
 <translation id="520299402983819650"><ph name="QUANTITY" /> PB</translation>
 <translation id="5266161281976477809">Triángulo de expansión</translation>
 <translation id="5278860589123563674">No se ha podido enviar</translation>
+<translation id="5283099933536931082"><ph name="APP_ITEM_TITLE" /> solicita tu atención.</translation>
 <translation id="528468243742722775">Finalizar</translation>
 <translation id="5329858601952122676">&amp;Suprimir</translation>
 <translation id="5395308026110844773"><ph name="DRAGGED_APP_NAME" /> está encima de <ph name="IN_PLACE_APP" />. Suelta para crear una carpeta.</translation>
@@ -144,6 +145,7 @@
 <translation id="5574202486608032840">Sistema <ph name="IDS_SHORT_PRODUCT_OS_NAME" /></translation>
 <translation id="5583640892426849032">Tecla de retroceso</translation>
 <translation id="5613020302032141669">Flecha izquierda</translation>
+<translation id="5652575806481723716"><ph name="FOCUSED_APP_NAME" /> solicita tu atención.</translation>
 <translation id="5675363643668471212">Elemento de la estantería</translation>
 <translation id="5754277640426581776">{MINUTES,plural, =1{1 min}other{# min}}</translation>
 <translation id="5763338081255973061">{DAYS,plural, =0{Activo hoy}=1{Activo hace 1 día}other{Activo hace # días}}</translation>
diff --git a/ui/strings/translations/ui_strings_hi.xtb b/ui/strings/translations/ui_strings_hi.xtb
index a6726d79..15b6d5c5 100644
--- a/ui/strings/translations/ui_strings_hi.xtb
+++ b/ui/strings/translations/ui_strings_hi.xtb
@@ -134,6 +134,7 @@
 <translation id="520299402983819650"><ph name="QUANTITY" /> PB</translation>
 <translation id="5266161281976477809">प्रकटीकरण त्रिकोण</translation>
 <translation id="5278860589123563674">भेजा नहीं जा सका</translation>
+<translation id="5283099933536931082"><ph name="APP_ITEM_TITLE" /> पर एक सूचना है.</translation>
 <translation id="528468243742722775">खत्म</translation>
 <translation id="5329858601952122676">&amp;हटाएं</translation>
 <translation id="5395308026110844773"><ph name="IN_PLACE_APP" /> पर<ph name="DRAGGED_APP_NAME" /> को खींचकर लाया जा रहा है, फ़ोल्डर बनाने के लिए इसे छोड़ें.</translation>
@@ -144,6 +145,7 @@
 <translation id="5574202486608032840"><ph name="IDS_SHORT_PRODUCT_OS_NAME" /> सिस्टम</translation>
 <translation id="5583640892426849032">Backspace</translation>
 <translation id="5613020302032141669">बायां तीर</translation>
+<translation id="5652575806481723716"><ph name="FOCUSED_APP_NAME" /> पर एक सूचना है.</translation>
 <translation id="5675363643668471212">शेल्फ़ आइटम</translation>
 <translation id="5754277640426581776">{MINUTES,plural, =1{1 मिनट}one{# मिनट}other{# मिनट}}</translation>
 <translation id="5763338081255973061">{DAYS,plural, =0{आज चालू है}=1{1 दिन पहले चालू किया गया}one{# दिन पहले चालू किया गया}other{# दिन पहले चालू किया गया}}</translation>
diff --git a/ui/strings/translations/ui_strings_hu.xtb b/ui/strings/translations/ui_strings_hu.xtb
index 54f6a04b..1735290 100644
--- a/ui/strings/translations/ui_strings_hu.xtb
+++ b/ui/strings/translations/ui_strings_hu.xtb
@@ -134,6 +134,7 @@
 <translation id="520299402983819650"><ph name="QUANTITY" /> PB</translation>
 <translation id="5266161281976477809">Plusz tartalom kibontására szolgáló háromszög</translation>
 <translation id="5278860589123563674">Sikertelen küldés</translation>
+<translation id="5283099933536931082">A(z) <ph name="APP_ITEM_TITLE" /> alkalmazás a figyelmét igényli.</translation>
 <translation id="528468243742722775">Befejezés</translation>
 <translation id="5329858601952122676">&amp;Törlés</translation>
 <translation id="5395308026110844773"><ph name="DRAGGED_APP_NAME" /> az alatta lévő <ph name="IN_PLACE_APP" /> alkalmazáson; mappa létrehozásához engedje el.</translation>
@@ -144,6 +145,7 @@
 <translation id="5574202486608032840"><ph name="IDS_SHORT_PRODUCT_OS_NAME" /> rendszer</translation>
 <translation id="5583640892426849032">Backspace</translation>
 <translation id="5613020302032141669">Bal nyíl</translation>
+<translation id="5652575806481723716">A(z) <ph name="FOCUSED_APP_NAME" /> alkalmazás a figyelmét igényli.</translation>
 <translation id="5675363643668471212">Polcelem</translation>
 <translation id="5754277640426581776">{MINUTES,plural, =1{1 perc}other{# perc}}</translation>
 <translation id="5763338081255973061">{DAYS,plural, =0{Ma volt aktív}=1{1 napja volt aktív}other{# napja volt aktív}}</translation>
diff --git a/ui/strings/translations/ui_strings_it.xtb b/ui/strings/translations/ui_strings_it.xtb
index a71897e..bae5e986 100644
--- a/ui/strings/translations/ui_strings_it.xtb
+++ b/ui/strings/translations/ui_strings_it.xtb
@@ -134,6 +134,7 @@
 <translation id="520299402983819650"><ph name="QUANTITY" /> PB</translation>
 <translation id="5266161281976477809">Triangolo di apertura</translation>
 <translation id="5278860589123563674">Invio non riuscito</translation>
+<translation id="5283099933536931082"><ph name="APP_ITEM_TITLE" /> richiede la tua attenzione.</translation>
 <translation id="528468243742722775">Fine</translation>
 <translation id="5329858601952122676">&amp;Elimina</translation>
 <translation id="5395308026110844773"><ph name="DRAGGED_APP_NAME" /> sopra <ph name="IN_PLACE_APP" />, rilascia per creare una cartella.</translation>
@@ -144,6 +145,7 @@
 <translation id="5574202486608032840">Sistema <ph name="IDS_SHORT_PRODUCT_OS_NAME" /></translation>
 <translation id="5583640892426849032">Backspace</translation>
 <translation id="5613020302032141669">Freccia sinistra</translation>
+<translation id="5652575806481723716"><ph name="FOCUSED_APP_NAME" /> richiede la tua attenzione.</translation>
 <translation id="5675363643668471212">Elemento shelf</translation>
 <translation id="5754277640426581776">{MINUTES,plural, =1{1 min}other{# min}}</translation>
 <translation id="5763338081255973061">{DAYS,plural, =0{Ultima attività: oggi}=1{Ultima attività: 1 giorno fa}other{Ultima attività: # giorni fa}}</translation>
diff --git a/ui/strings/translations/ui_strings_ml.xtb b/ui/strings/translations/ui_strings_ml.xtb
index f4971b7..15317b9 100644
--- a/ui/strings/translations/ui_strings_ml.xtb
+++ b/ui/strings/translations/ui_strings_ml.xtb
@@ -134,6 +134,7 @@
 <translation id="520299402983819650"><ph name="QUANTITY" /> PB</translation>
 <translation id="5266161281976477809">ഡിസ്‌ക്ലോഷർ ത്രികോണം</translation>
 <translation id="5278860589123563674">അയയ്ക്കാനായില്ല</translation>
+<translation id="5283099933536931082"><ph name="APP_ITEM_TITLE" /> നിങ്ങളുടെ ശ്രദ്ധ അഭ്യർത്ഥിക്കുന്നു.</translation>
 <translation id="528468243742722775">അവസാനിപ്പിക്കുക</translation>
 <translation id="5329858601952122676">&amp;ഇല്ലാതാക്കൂ</translation>
 <translation id="5395308026110844773"><ph name="IN_PLACE_APP" /> എന്നതിന് മുകളിലാണ് <ph name="DRAGGED_APP_NAME" />, ഫോൾഡർ സൃഷ്‌ടിക്കാൻ റിലീസ് ചെയ്യുക.</translation>
@@ -144,6 +145,7 @@
 <translation id="5574202486608032840"><ph name="IDS_SHORT_PRODUCT_OS_NAME" /> സിസ്‌റ്റം</translation>
 <translation id="5583640892426849032">ബാക്ക്‌സ്പെയ്‌സ്</translation>
 <translation id="5613020302032141669">ഇടത് ആരോ അടയാളം</translation>
+<translation id="5652575806481723716"><ph name="FOCUSED_APP_NAME" /> നിങ്ങളുടെ ശ്രദ്ധ അഭ്യർത്ഥിക്കുന്നു.</translation>
 <translation id="5675363643668471212">ഷെൽഫ് ഇനം</translation>
 <translation id="5754277640426581776">{MINUTES,plural, =1{ഒരു മിനിറ്റ്}other{# മിനിറ്റ്}}</translation>
 <translation id="5763338081255973061">{DAYS,plural, =0{ഇന്ന് സജീവമായിരുന്നു}=1{ഒരു ദിവസം മുമ്പ് സജീവമായിരുന്നു}other{# ദിവസം മുമ്പ് സജീവമായിരുന്നു}}</translation>
diff --git a/ui/strings/translations/ui_strings_no.xtb b/ui/strings/translations/ui_strings_no.xtb
index db5a8bdf..8c80962 100644
--- a/ui/strings/translations/ui_strings_no.xtb
+++ b/ui/strings/translations/ui_strings_no.xtb
@@ -134,6 +134,7 @@
 <translation id="520299402983819650"><ph name="QUANTITY" /> PB</translation>
 <translation id="5266161281976477809">Trekant for mer innhold</translation>
 <translation id="5278860589123563674">Kunne ikke sende</translation>
+<translation id="5283099933536931082"><ph name="APP_ITEM_TITLE" /> ber om din oppmerksomhet.</translation>
 <translation id="528468243742722775">Avslutt</translation>
 <translation id="5329858601952122676">&amp;Slett</translation>
 <translation id="5395308026110844773"><ph name="DRAGGED_APP_NAME" /> oppå <ph name="IN_PLACE_APP" /> – slipp for å opprette en mappe.</translation>
@@ -144,6 +145,7 @@
 <translation id="5574202486608032840"><ph name="IDS_SHORT_PRODUCT_OS_NAME" />-systemet</translation>
 <translation id="5583640892426849032">Tilbake-tasten</translation>
 <translation id="5613020302032141669">Pil venstre</translation>
+<translation id="5652575806481723716"><ph name="FOCUSED_APP_NAME" /> ber om din oppmerksomhet.</translation>
 <translation id="5675363643668471212">Hylleelement</translation>
 <translation id="5754277640426581776">{MINUTES,plural, =1{1 min}other{# min}}</translation>
 <translation id="5763338081255973061">{DAYS,plural, =0{Aktiv i dag}=1{Aktiv for én dag siden}other{Aktiv for # dager siden}}</translation>
diff --git a/ui/strings/translations/ui_strings_pl.xtb b/ui/strings/translations/ui_strings_pl.xtb
index 4d71c8c1..d26ade4 100644
--- a/ui/strings/translations/ui_strings_pl.xtb
+++ b/ui/strings/translations/ui_strings_pl.xtb
@@ -134,6 +134,7 @@
 <translation id="520299402983819650"><ph name="QUANTITY" /> PB</translation>
 <translation id="5266161281976477809">Trójkąt rozwinięcia</translation>
 <translation id="5278860589123563674">Nie udało się wysłać</translation>
+<translation id="5283099933536931082"><ph name="APP_ITEM_TITLE" /> wymaga Twojej reakcji.</translation>
 <translation id="528468243742722775">Zakończ</translation>
 <translation id="5329858601952122676">&amp;Usuń</translation>
 <translation id="5395308026110844773">Aplikacja <ph name="DRAGGED_APP_NAME" /> jest nad aplikacją <ph name="IN_PLACE_APP" /> – puść, by utworzyć folder.</translation>
@@ -144,6 +145,7 @@
 <translation id="5574202486608032840">System <ph name="IDS_SHORT_PRODUCT_OS_NAME" /></translation>
 <translation id="5583640892426849032">Backspace</translation>
 <translation id="5613020302032141669">Strzałka w lewo</translation>
+<translation id="5652575806481723716"><ph name="FOCUSED_APP_NAME" /> wymaga Twojej reakcji.</translation>
 <translation id="5675363643668471212">Element na półce</translation>
 <translation id="5754277640426581776">{MINUTES,plural, =1{1 min}few{# min}many{# min}other{# min}}</translation>
 <translation id="5763338081255973061">{DAYS,plural, =0{Aktywność dzisiaj}=1{Aktywność 1 dzień temu}few{Aktywność # dni temu}many{Aktywność # dni temu}other{Aktywność # dnia temu}}</translation>
diff --git a/ui/strings/translations/ui_strings_pt-BR.xtb b/ui/strings/translations/ui_strings_pt-BR.xtb
index ff23507..24aa331b 100644
--- a/ui/strings/translations/ui_strings_pt-BR.xtb
+++ b/ui/strings/translations/ui_strings_pt-BR.xtb
@@ -134,6 +134,7 @@
 <translation id="520299402983819650"><ph name="QUANTITY" /> PB</translation>
 <translation id="5266161281976477809">Triângulo de divulgação</translation>
 <translation id="5278860589123563674">Falha ao enviar</translation>
+<translation id="5283099933536931082"><ph name="APP_ITEM_TITLE" /> precisa de atenção.</translation>
 <translation id="528468243742722775">Fim</translation>
 <translation id="5329858601952122676">&amp;Excluir</translation>
 <translation id="5395308026110844773"><ph name="DRAGGED_APP_NAME" /> sobre <ph name="IN_PLACE_APP" />, solte para criar pasta.</translation>
@@ -144,6 +145,7 @@
 <translation id="5574202486608032840">Sistema <ph name="IDS_SHORT_PRODUCT_OS_NAME" /></translation>
 <translation id="5583640892426849032">Backspace</translation>
 <translation id="5613020302032141669">Seta para a esquerda</translation>
+<translation id="5652575806481723716"><ph name="FOCUSED_APP_NAME" /> precisa de atenção.</translation>
 <translation id="5675363643668471212">Item da estante</translation>
 <translation id="5754277640426581776">{MINUTES,plural, =1{1 minuto}one{# minutos}other{# minutos}}</translation>
 <translation id="5763338081255973061">{DAYS,plural, =0{Ativo hoje}=1{Ativo há um dia}one{Ativo há # dia}other{Ativo há # dias}}</translation>
diff --git a/ui/strings/translations/ui_strings_pt-PT.xtb b/ui/strings/translations/ui_strings_pt-PT.xtb
index 5e64e98..585a653e 100644
--- a/ui/strings/translations/ui_strings_pt-PT.xtb
+++ b/ui/strings/translations/ui_strings_pt-PT.xtb
@@ -134,6 +134,7 @@
 <translation id="520299402983819650"><ph name="QUANTITY" /> PB</translation>
 <translation id="5266161281976477809">Triângulo de divulgação</translation>
 <translation id="5278860589123563674">Falha ao enviar</translation>
+<translation id="5283099933536931082">A app <ph name="APP_ITEM_TITLE" /> solicita a sua atenção.</translation>
 <translation id="528468243742722775">Sair</translation>
 <translation id="5329858601952122676">E&amp;liminar</translation>
 <translation id="5395308026110844773"><ph name="DRAGGED_APP_NAME" /> sobre <ph name="IN_PLACE_APP" />, solte para criar uma pasta.</translation>
@@ -144,6 +145,7 @@
 <translation id="5574202486608032840">Sistema <ph name="IDS_SHORT_PRODUCT_OS_NAME" /></translation>
 <translation id="5583640892426849032">Retrocesso</translation>
 <translation id="5613020302032141669">Seta para a esquerda</translation>
+<translation id="5652575806481723716">A app <ph name="FOCUSED_APP_NAME" /> solicita a sua atenção.</translation>
 <translation id="5675363643668471212">Item de prateleira</translation>
 <translation id="5754277640426581776">{MINUTES,plural, =1{1 min}other{# min}}</translation>
 <translation id="5763338081255973061">{DAYS,plural, =0{Ativo hoje}=1{Ativo há 1 dia}other{Ativo há # dias}}</translation>
diff --git a/ui/strings/translations/ui_strings_sl.xtb b/ui/strings/translations/ui_strings_sl.xtb
index fcf616d9..58d725d 100644
--- a/ui/strings/translations/ui_strings_sl.xtb
+++ b/ui/strings/translations/ui_strings_sl.xtb
@@ -134,6 +134,7 @@
 <translation id="520299402983819650"><ph name="QUANTITY" /> PB</translation>
 <translation id="5266161281976477809">Trikotnik z dodatno vsebino</translation>
 <translation id="5278860589123563674">Pošiljanje ni uspelo</translation>
+<translation id="5283099933536931082"><ph name="APP_ITEM_TITLE" /> potrebuje vašo pozornost.</translation>
 <translation id="528468243742722775">Konec</translation>
 <translation id="5329858601952122676">&amp;Izbriši</translation>
 <translation id="5395308026110844773"><ph name="DRAGGED_APP_NAME" /> na <ph name="IN_PLACE_APP" />, spustite, da ustvarite mapo.</translation>
@@ -143,6 +144,7 @@
 <translation id="5528053674512161860">Nalaganje strani ni uspelo, ker modul uporabniškega vmesnika za razvijalce (dev_ui) ni nameščen</translation>
 <translation id="5583640892426849032">Vračalka</translation>
 <translation id="5613020302032141669">Puščica levo</translation>
+<translation id="5652575806481723716"><ph name="FOCUSED_APP_NAME" /> potrebuje vašo pozornost.</translation>
 <translation id="5675363643668471212">Element na polici</translation>
 <translation id="5754277640426581776">{MINUTES,plural, =1{1 min}one{# min}two{# min}few{# min}other{# min}}</translation>
 <translation id="5763338081255973061">{DAYS,plural, =0{Aktivna danes}=1{Aktivna pred 1 dnevom}one{Aktivna pred # dnevom}two{Aktivna pred # dnevoma}few{Aktivna pred # dnevi}other{Aktivna pred # dnevi}}</translation>
diff --git a/ui/strings/translations/ui_strings_sr-Latn.xtb b/ui/strings/translations/ui_strings_sr-Latn.xtb
index 76fa384c8..ebe2e45 100644
--- a/ui/strings/translations/ui_strings_sr-Latn.xtb
+++ b/ui/strings/translations/ui_strings_sr-Latn.xtb
@@ -134,6 +134,7 @@
 <translation id="520299402983819650"><ph name="QUANTITY" /> PB</translation>
 <translation id="5266161281976477809">Trougao za otkrivanje</translation>
 <translation id="5278860589123563674">Slanje nije uspelo</translation>
+<translation id="5283099933536931082"><ph name="APP_ITEM_TITLE" /> zahteva vašu pažnju.</translation>
 <translation id="528468243742722775">Završi</translation>
 <translation id="5329858601952122676">&amp;Izbriši</translation>
 <translation id="5395308026110844773"><ph name="DRAGGED_APP_NAME" /> preko aplikacije <ph name="IN_PLACE_APP" />, otpustite da biste napravili direktorijum.</translation>
@@ -144,6 +145,7 @@
 <translation id="5574202486608032840"><ph name="IDS_SHORT_PRODUCT_OS_NAME" /> sistem</translation>
 <translation id="5583640892426849032">Backspace</translation>
 <translation id="5613020302032141669">Strelica nalevo</translation>
+<translation id="5652575806481723716"><ph name="FOCUSED_APP_NAME" /> zahteva vašu pažnju.</translation>
 <translation id="5675363643668471212">Stavka na polici</translation>
 <translation id="5754277640426581776">{MINUTES,plural, =1{1 min}one{# min}few{# min}other{# min}}</translation>
 <translation id="5763338081255973061">{DAYS,plural, =0{Poslednja aktivnost: danas}=1{Poslednja aktivnost: pre 1 dan}one{Poslednja aktivnost: pre # dan}few{Poslednja aktivnost: pre # dana}other{Poslednja aktivnost: pre # dana}}</translation>
diff --git a/ui/strings/translations/ui_strings_sr.xtb b/ui/strings/translations/ui_strings_sr.xtb
index 689f599e6..78c4eaa 100644
--- a/ui/strings/translations/ui_strings_sr.xtb
+++ b/ui/strings/translations/ui_strings_sr.xtb
@@ -134,6 +134,7 @@
 <translation id="520299402983819650"><ph name="QUANTITY" /> PB</translation>
 <translation id="5266161281976477809">Троугао за откривање</translation>
 <translation id="5278860589123563674">Слање није успело</translation>
+<translation id="5283099933536931082"><ph name="APP_ITEM_TITLE" /> захтева вашу пажњу.</translation>
 <translation id="528468243742722775">Заврши</translation>
 <translation id="5329858601952122676">&amp;Избриши</translation>
 <translation id="5395308026110844773"><ph name="DRAGGED_APP_NAME" /> преко апликације <ph name="IN_PLACE_APP" />, отпустите да бисте направили директоријум.</translation>
@@ -144,6 +145,7 @@
 <translation id="5574202486608032840"><ph name="IDS_SHORT_PRODUCT_OS_NAME" /> систем</translation>
 <translation id="5583640892426849032">Backspace</translation>
 <translation id="5613020302032141669">Стрелица налево</translation>
+<translation id="5652575806481723716"><ph name="FOCUSED_APP_NAME" /> захтева вашу пажњу.</translation>
 <translation id="5675363643668471212">Ставка на полици</translation>
 <translation id="5754277640426581776">{MINUTES,plural, =1{1 мин}one{# мин}few{# мин}other{# мин}}</translation>
 <translation id="5763338081255973061">{DAYS,plural, =0{Последња активност: данас}=1{Последња активност: пре 1 дан}one{Последња активност: пре # дан}few{Последња активност: пре # дана}other{Последња активност: пре # дана}}</translation>
diff --git a/ui/strings/translations/ui_strings_sv.xtb b/ui/strings/translations/ui_strings_sv.xtb
index 463599e..aa35665 100644
--- a/ui/strings/translations/ui_strings_sv.xtb
+++ b/ui/strings/translations/ui_strings_sv.xtb
@@ -134,6 +134,7 @@
 <translation id="520299402983819650"><ph name="QUANTITY" /> PB</translation>
 <translation id="5266161281976477809">Utökningstriangel</translation>
 <translation id="5278860589123563674">Det gick inte att skicka</translation>
+<translation id="5283099933536931082"><ph name="APP_ITEM_TITLE" /> begär din uppmärksamhet.</translation>
 <translation id="528468243742722775">Avsluta</translation>
 <translation id="5329858601952122676">&amp;Ta bort</translation>
 <translation id="5395308026110844773"><ph name="DRAGGED_APP_NAME" /> ovanpå <ph name="IN_PLACE_APP" />, om du släpper skapas en mapp.</translation>
@@ -144,6 +145,7 @@
 <translation id="5574202486608032840">Operativsystemet <ph name="IDS_SHORT_PRODUCT_OS_NAME" /></translation>
 <translation id="5583640892426849032">Backsteg</translation>
 <translation id="5613020302032141669">Vänsterpil</translation>
+<translation id="5652575806481723716"><ph name="FOCUSED_APP_NAME" /> begär din uppmärksamhet.</translation>
 <translation id="5675363643668471212">Hyllobjekt</translation>
 <translation id="5754277640426581776">{MINUTES,plural, =1{1 min}other{# min}}</translation>
 <translation id="5763338081255973061">{DAYS,plural, =0{Aktiv i dag}=1{Aktiv för 1 dag sedan}other{Aktiv för # dagar sedan}}</translation>
diff --git a/ui/strings/translations/ui_strings_te.xtb b/ui/strings/translations/ui_strings_te.xtb
index fd4ffd4..fbd9e721 100644
--- a/ui/strings/translations/ui_strings_te.xtb
+++ b/ui/strings/translations/ui_strings_te.xtb
@@ -134,6 +134,7 @@
 <translation id="520299402983819650"><ph name="QUANTITY" /> PB</translation>
 <translation id="5266161281976477809">కంటెంట్‌ను విస్తరింపజేసే లేదా కుదించే త్రిభుజం</translation>
 <translation id="5278860589123563674">పంపడం విఫలమైంది</translation>
+<translation id="5283099933536931082"><ph name="APP_ITEM_TITLE" />, మీ అటెన్షన్ కోసం రిక్వెస్ట్ చేస్తోంది.</translation>
 <translation id="528468243742722775">ముగించు</translation>
 <translation id="5329858601952122676">&amp;తొలగించు</translation>
 <translation id="5395308026110844773"><ph name="IN_PLACE_APP" />పై భాగాన <ph name="DRAGGED_APP_NAME" /> ఉంది, ఫోల్డర్ సృష్టించడానికి రిలీజ్ చేయండి.</translation>
@@ -144,6 +145,7 @@
 <translation id="5574202486608032840"><ph name="IDS_SHORT_PRODUCT_OS_NAME" /> సిస్టమ్</translation>
 <translation id="5583640892426849032">Backspace</translation>
 <translation id="5613020302032141669">ఎడమ బాణం</translation>
+<translation id="5652575806481723716"><ph name="FOCUSED_APP_NAME" />, మీ అటెన్షన్ కోసం రిక్వెస్ట్ చేస్తోంది.</translation>
 <translation id="5675363643668471212">అరలోని అంశం</translation>
 <translation id="5754277640426581776">{MINUTES,plural, =1{1 నిమి.}other{# నిమి.}}</translation>
 <translation id="5763338081255973061">{DAYS,plural, =0{ఈ రోజు యాక్టివ్‌గా ఉంది}=1{1 రోజు క్రితం యాక్టివ్‌గా ఉంది}other{# రోజుల క్రితం యాక్టివ్‌గా ఉంది}}</translation>
diff --git a/ui/strings/translations/ui_strings_th.xtb b/ui/strings/translations/ui_strings_th.xtb
index 067f474..b8a3c8d 100644
--- a/ui/strings/translations/ui_strings_th.xtb
+++ b/ui/strings/translations/ui_strings_th.xtb
@@ -134,6 +134,7 @@
 <translation id="520299402983819650"><ph name="QUANTITY" /> PB</translation>
 <translation id="5266161281976477809">สามเหลี่ยมซ่อนเนื้อหา</translation>
 <translation id="5278860589123563674">ส่งไม่สำเร็จ</translation>
+<translation id="5283099933536931082"><ph name="APP_ITEM_TITLE" /> ส่งคำขอให้คุณดำเนินการ</translation>
 <translation id="528468243742722775">สิ้นสุด</translation>
 <translation id="5329858601952122676">&amp;ลบ</translation>
 <translation id="5395308026110844773"><ph name="DRAGGED_APP_NAME" /> อยู่เหนือ <ph name="IN_PLACE_APP" /> ปล่อยเพื่อสร้างโฟลเดอร์</translation>
@@ -144,6 +145,7 @@
 <translation id="5574202486608032840">ระบบ <ph name="IDS_SHORT_PRODUCT_OS_NAME" /></translation>
 <translation id="5583640892426849032">Backspace</translation>
 <translation id="5613020302032141669">ลูกศรซ้าย</translation>
+<translation id="5652575806481723716"><ph name="FOCUSED_APP_NAME" /> ส่งคำขอให้คุณดำเนินการ</translation>
 <translation id="5675363643668471212">รายการชั้นวาง</translation>
 <translation id="5754277640426581776">{MINUTES,plural, =1{1 นาที}other{# นาที}}</translation>
 <translation id="5763338081255973061">{DAYS,plural, =0{ใช้งานวันนี้}=1{ใช้งานเมื่อ 1 วันที่ผ่านมา}other{ใช้งานเมื่อ # วันที่ผ่านมา}}</translation>
diff --git a/ui/webui/resources/cr_components/chromeos/network/BUILD.gn b/ui/webui/resources/cr_components/chromeos/network/BUILD.gn
index 271c35c..d5e0b10 100644
--- a/ui/webui/resources/cr_components/chromeos/network/BUILD.gn
+++ b/ui/webui/resources/cr_components/chromeos/network/BUILD.gn
@@ -432,6 +432,8 @@
 js_library("network_list.m") {
   sources = [ "$root_gen_dir/ui/webui/resources/cr_components/chromeos/network/network_list.m.js" ]
   deps = [
+    ":network_list_item.m",
+    ":network_list_types.m",
     "//third_party/polymer/v3_0/components-chromium/iron-list:iron-list",
     "//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled",
     "//ui/webui/resources/cr_elements:cr_scrollable_behavior.m",
@@ -442,6 +444,7 @@
 js_library("network_list_item.m") {
   sources = [ "$root_gen_dir/ui/webui/resources/cr_components/chromeos/network/network_list_item.m.js" ]
   deps = [
+    ":network_list_types.m",
     "//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled",
   ]
   extra_deps = [ ":network_list_item_module" ]
@@ -552,6 +555,7 @@
   sources = [ "$root_gen_dir/ui/webui/resources/cr_components/chromeos/network/network_select.m.js" ]
   deps = [
     ":network_list.m",
+    ":network_list_types.m",
     ":network_listener_behavior.m",
     ":onc_mojo.m",
     "//third_party/polymer/v3_0/components-chromium/paper-progress:paper-progress",
diff --git a/ui/webui/resources/cr_components/chromeos/network/network_list.html b/ui/webui/resources/cr_components/chromeos/network/network_list.html
index a473296..ceef28d 100644
--- a/ui/webui/resources/cr_components/chromeos/network/network_list.html
+++ b/ui/webui/resources/cr_components/chromeos/network/network_list.html
@@ -1,6 +1,7 @@
 <link rel="import" href="../../../html/polymer.html">
 
 <link rel="import" href="network_list_item.html">
+<link rel="import" href="network_list_types.html">
 <link rel="import" href="../../../cr_elements/cr_scrollable_behavior.html">
 <link rel="import" href="../../../cr_elements/shared_style_css.html">
 <link rel="import" href="chrome://resources/polymer/v1_0/iron-flex-layout/iron-flex-layout-classes.html">
diff --git a/ui/webui/resources/cr_components/chromeos/network/network_list_item.html b/ui/webui/resources/cr_components/chromeos/network/network_list_item.html
index e760d59..3511883 100644
--- a/ui/webui/resources/cr_components/chromeos/network/network_list_item.html
+++ b/ui/webui/resources/cr_components/chromeos/network/network_list_item.html
@@ -9,6 +9,7 @@
 <link rel="import" href="../../../html/i18n_behavior.html">
 <link rel="import" href="cr_policy_network_behavior_mojo.html">
 <link rel="import" href="network_icon.html">
+<link rel="import" href="network_list_types.html">
 <link rel="import" href="onc_mojo.html">
 
 <dom-module id="network-list-item">
diff --git a/ui/webui/resources/cr_components/chromeos/network/network_list_types.js b/ui/webui/resources/cr_components/chromeos/network/network_list_types.js
index a98bcf66..e8efab5 100644
--- a/ui/webui/resources/cr_components/chromeos/network/network_list_types.js
+++ b/ui/webui/resources/cr_components/chromeos/network/network_list_types.js
@@ -8,7 +8,7 @@
  * NetworkListItem.
  */
 
-const NetworkList = {};
+/* #export */ const NetworkList = {};
 
 /**
  * Custom data for implementation specific network list items.
@@ -23,5 +23,3 @@
 
 /** @typedef {OncMojo.NetworkStateProperties|NetworkList.CustomItemState} */
 NetworkList.NetworkListItemType;
-
-// #export {NetworkList}
diff --git a/ui/webui/resources/cr_components/chromeos/network/network_select.html b/ui/webui/resources/cr_components/chromeos/network/network_select.html
index 103a0c5e..d2abd38 100644
--- a/ui/webui/resources/cr_components/chromeos/network/network_select.html
+++ b/ui/webui/resources/cr_components/chromeos/network/network_select.html
@@ -4,6 +4,7 @@
 <link rel="import" href="chrome://resources/polymer/v1_0/paper-progress/paper-progress.html">
 <link rel="import" href="mojo_interface_provider.html">
 <link rel="import" href="network_list.html">
+<link rel="import" href="network_list_types.html">
 <link rel="import" href="network_listener_behavior.html">
 <link rel="import" href="onc_mojo.html">
 
diff --git a/ui/webui/resources/cr_components/chromeos/os_cr_components.gni b/ui/webui/resources/cr_components/chromeos/os_cr_components.gni
index 56c56b5..87791ee 100644
--- a/ui/webui/resources/cr_components/chromeos/os_cr_components.gni
+++ b/ui/webui/resources/cr_components/chromeos/os_cr_components.gni
@@ -33,6 +33,7 @@
   "ui/webui/resources/cr_components/chromeos/network/onc_mojo.html|OncMojo",
   "ui/webui/resources/cr_components/chromeos/network/network_config_element_behavior.html|NetworkConfigElementBehavior",
   "ui/webui/resources/cr_components/chromeos/network/network_listener_behavior.html|NetworkListenerBehavior",
+  "ui/webui/resources/cr_components/chromeos/network/network_list_types.html|NetworkList",
   "ui/webui/resources/cr_components/chromeos/network/mojo_interface_provider.html|MojoInterfaceProviderImpl,MojoInterfaceProvider",
   "ui/webui/resources/cr_components/chromeos/quick_unlock/lock_screen_constants.html|recordLockScreenProgress,LockScreenProgress",
   "ui/webui/resources/cr_components/chromeos/cellular_setup/webview_post_util.html|postDeviceDataToWebview",
diff --git a/url/DIR_METADATA b/url/DIR_METADATA
new file mode 100644
index 0000000..fb07a25
--- /dev/null
+++ b/url/DIR_METADATA
@@ -0,0 +1,11 @@
+# Metadata information for this directory.
+#
+# For more information on DIR_METADATA files, see:
+#   https://source.chromium.org/chromium/infra/infra/+/master:go/src/infra/tools/dirmd/README.md
+#
+# For the schema of this file, see Metadata message:
+#   https://source.chromium.org/chromium/infra/infra/+/master:go/src/infra/tools/dirmd/proto/dir_metadata.proto
+
+monorail {
+  component: "Internals>Core"
+}
\ No newline at end of file
diff --git a/url/OWNERS b/url/OWNERS
index 05cb46e..96e6f2a 100644
--- a/url/OWNERS
+++ b/url/OWNERS
@@ -1,5 +1,4 @@
 csharrison@chromium.org
 dcheng@chromium.org
 mkwst@chromium.org
-palmer@chromium.org
-# COMPONENT: Internals>Core
+palmer@chromium.org
\ No newline at end of file
diff --git a/url/android/DIR_METADATA b/url/android/DIR_METADATA
new file mode 100644
index 0000000..fb07a25
--- /dev/null
+++ b/url/android/DIR_METADATA
@@ -0,0 +1,11 @@
+# Metadata information for this directory.
+#
+# For more information on DIR_METADATA files, see:
+#   https://source.chromium.org/chromium/infra/infra/+/master:go/src/infra/tools/dirmd/README.md
+#
+# For the schema of this file, see Metadata message:
+#   https://source.chromium.org/chromium/infra/infra/+/master:go/src/infra/tools/dirmd/proto/dir_metadata.proto
+
+monorail {
+  component: "Internals>Core"
+}
\ No newline at end of file
diff --git a/url/android/OWNERS b/url/android/OWNERS
index 3605f481..e69de29 100644
--- a/url/android/OWNERS
+++ b/url/android/OWNERS
@@ -1 +0,0 @@
-# COMPONENT: Internals>Core
diff --git a/url/ipc/DIR_METADATA b/url/ipc/DIR_METADATA
new file mode 100644
index 0000000..fb07a25
--- /dev/null
+++ b/url/ipc/DIR_METADATA
@@ -0,0 +1,11 @@
+# Metadata information for this directory.
+#
+# For more information on DIR_METADATA files, see:
+#   https://source.chromium.org/chromium/infra/infra/+/master:go/src/infra/tools/dirmd/README.md
+#
+# For the schema of this file, see Metadata message:
+#   https://source.chromium.org/chromium/infra/infra/+/master:go/src/infra/tools/dirmd/proto/dir_metadata.proto
+
+monorail {
+  component: "Internals>Core"
+}
\ No newline at end of file
diff --git a/url/ipc/OWNERS b/url/ipc/OWNERS
index ac0d8dd..0a42834 100644
--- a/url/ipc/OWNERS
+++ b/url/ipc/OWNERS
@@ -1,3 +1,2 @@
 per-file *_param_traits*.*=set noparent
-per-file *_param_traits*.*=file://ipc/SECURITY_OWNERS
-# COMPONENT: Internals>Core
\ No newline at end of file
+per-file *_param_traits*.*=file://ipc/SECURITY_OWNERS
\ No newline at end of file
diff --git a/url/mojom/DIR_METADATA b/url/mojom/DIR_METADATA
new file mode 100644
index 0000000..06992d0
--- /dev/null
+++ b/url/mojom/DIR_METADATA
@@ -0,0 +1,11 @@
+# Metadata information for this directory.
+#
+# For more information on DIR_METADATA files, see:
+#   https://source.chromium.org/chromium/infra/infra/+/master:go/src/infra/tools/dirmd/README.md
+#
+# For the schema of this file, see Metadata message:
+#   https://source.chromium.org/chromium/infra/infra/+/master:go/src/infra/tools/dirmd/proto/dir_metadata.proto
+
+monorail {
+  component: "Internals>Mojo"
+}
\ No newline at end of file
diff --git a/url/mojom/OWNERS b/url/mojom/OWNERS
index 06776ee..d970307 100644
--- a/url/mojom/OWNERS
+++ b/url/mojom/OWNERS
@@ -1,5 +1,4 @@
 per-file *.mojom=set noparent
 per-file *.mojom=file://ipc/SECURITY_OWNERS
 per-file *_mojom_traits*.*=set noparent
-per-file *_mojom_traits*.*=file://ipc/SECURITY_OWNERS
-# COMPONENT: Internals>Mojo
+per-file *_mojom_traits*.*=file://ipc/SECURITY_OWNERS
\ No newline at end of file
diff --git a/url/third_party/mozilla/DIR_METADATA b/url/third_party/mozilla/DIR_METADATA
new file mode 100644
index 0000000..fb07a25
--- /dev/null
+++ b/url/third_party/mozilla/DIR_METADATA
@@ -0,0 +1,11 @@
+# Metadata information for this directory.
+#
+# For more information on DIR_METADATA files, see:
+#   https://source.chromium.org/chromium/infra/infra/+/master:go/src/infra/tools/dirmd/README.md
+#
+# For the schema of this file, see Metadata message:
+#   https://source.chromium.org/chromium/infra/infra/+/master:go/src/infra/tools/dirmd/proto/dir_metadata.proto
+
+monorail {
+  component: "Internals>Core"
+}
\ No newline at end of file
diff --git a/url/third_party/mozilla/OWNERS b/url/third_party/mozilla/OWNERS
deleted file mode 100644
index 3605f481..0000000
--- a/url/third_party/mozilla/OWNERS
+++ /dev/null
@@ -1 +0,0 @@
-# COMPONENT: Internals>Core
diff --git a/weblayer/DIR_METADATA b/weblayer/DIR_METADATA
new file mode 100644
index 0000000..bb8ad53a
--- /dev/null
+++ b/weblayer/DIR_METADATA
@@ -0,0 +1,12 @@
+# Metadata information for this directory.
+#
+# For more information on DIR_METADATA files, see:
+#   https://source.chromium.org/chromium/infra/infra/+/master:go/src/infra/tools/dirmd/README.md
+#
+# For the schema of this file, see Metadata message:
+#   https://source.chromium.org/chromium/infra/infra/+/master:go/src/infra/tools/dirmd/proto/dir_metadata.proto
+
+monorail {
+  component: "Internals>WebLayer"
+}
+team_email: "weblayer-dev@chromium.org"
\ No newline at end of file
diff --git a/weblayer/OWNERS b/weblayer/OWNERS
index d5ecf5ef..3af6880 100644
--- a/weblayer/OWNERS
+++ b/weblayer/OWNERS
@@ -8,6 +8,3 @@
 sky@chromium.org
 timvolodine@chromium.org
 tobiasjs@chromium.org
-
-# TEAM: weblayer-dev@chromium.org
-# COMPONENT: Internals>WebLayer
diff --git a/weblayer/browser/insecure_form_controller_client.cc b/weblayer/browser/insecure_form_controller_client.cc
index 9b7fed0..a3100503 100644
--- a/weblayer/browser/insecure_form_controller_client.cc
+++ b/weblayer/browser/insecure_form_controller_client.cc
@@ -4,6 +4,7 @@
 
 #include "weblayer/browser/insecure_form_controller_client.h"
 
+#include "components/security_interstitials/content/settings_page_helper.h"
 #include "content/public/browser/web_contents.h"
 #include "weblayer/browser/i18n_util.h"
 
@@ -18,6 +19,14 @@
                                                                  nullptr);
 }
 
+// static
+std::unique_ptr<security_interstitials::SettingsPageHelper>
+InsecureFormControllerClient::GetSettingsPageHelper() {
+  // Return nullptr since there is no enhanced protection message in insecure
+  // form interstitials.
+  return nullptr;
+}
+
 InsecureFormControllerClient::InsecureFormControllerClient(
     content::WebContents* web_contents,
     const GURL& form_target_url)
@@ -26,7 +35,8 @@
           GetMetricsHelper(form_target_url),
           nullptr, /* prefs */
           i18n::GetApplicationLocale(),
-          GURL("about:blank") /* default_safe_page */),
+          GURL("about:blank") /* default_safe_page */,
+          GetSettingsPageHelper()),
       web_contents_(web_contents) {}
 
 InsecureFormControllerClient::~InsecureFormControllerClient() = default;
diff --git a/weblayer/browser/insecure_form_controller_client.h b/weblayer/browser/insecure_form_controller_client.h
index e8c80c58..d88af6d4 100644
--- a/weblayer/browser/insecure_form_controller_client.h
+++ b/weblayer/browser/insecure_form_controller_client.h
@@ -22,6 +22,8 @@
  public:
   static std::unique_ptr<security_interstitials::MetricsHelper>
   GetMetricsHelper(const GURL& url);
+  static std::unique_ptr<security_interstitials::SettingsPageHelper>
+  GetSettingsPageHelper();
 
   InsecureFormControllerClient(content::WebContents* web_contents,
                                const GURL& form_target_url);
diff --git a/weblayer/browser/safe_browsing/safe_browsing_blocking_page.cc b/weblayer/browser/safe_browsing/safe_browsing_blocking_page.cc
index fd6c603..5be57fac 100644
--- a/weblayer/browser/safe_browsing/safe_browsing_blocking_page.cc
+++ b/weblayer/browser/safe_browsing/safe_browsing_blocking_page.cc
@@ -5,6 +5,7 @@
 #include "weblayer/browser/safe_browsing/safe_browsing_blocking_page.h"
 
 #include "components/security_interstitials/content/security_interstitial_controller_client.h"
+#include "components/security_interstitials/content/settings_page_helper.h"
 #include "components/security_interstitials/content/unsafe_resource_util.h"
 #include "components/security_interstitials/core/base_safe_browsing_error_ui.h"
 #include "content/public/browser/navigation_entry.h"
@@ -57,10 +58,13 @@
       safe_browsing::IsExtendedReportingEnabled(
           *(browser_context->pref_service()));
 
+  // TODO(crbug.com/1080748): Set settings_page_helper once enhanced protection
+  // is supported on weblayer.
   return new SafeBrowsingBlockingPage(
       ui_manager, web_contents, url, unsafe_resources,
       CreateControllerClient(web_contents, unsafe_resources, ui_manager,
-                             browser_context->pref_service()),
+                             browser_context->pref_service(),
+                             /*settings_page_helper*/ nullptr),
       display_options);
 }
 
diff --git a/weblayer/browser/ssl_error_controller_client.cc b/weblayer/browser/ssl_error_controller_client.cc
index 3b0228f3..06c4d66 100644
--- a/weblayer/browser/ssl_error_controller_client.cc
+++ b/weblayer/browser/ssl_error_controller_client.cc
@@ -7,6 +7,7 @@
 #include "base/task/post_task.h"
 #include "base/task/thread_pool.h"
 #include "build/build_config.h"
+#include "components/security_interstitials/content/settings_page_helper.h"
 #include "components/security_interstitials/content/utils.h"
 #include "components/security_interstitials/core/metrics_helper.h"
 #include "content/public/browser/browser_context.h"
@@ -24,13 +25,16 @@
     int cert_error,
     const net::SSLInfo& ssl_info,
     const GURL& request_url,
-    std::unique_ptr<security_interstitials::MetricsHelper> metrics_helper)
+    std::unique_ptr<security_interstitials::MetricsHelper> metrics_helper,
+    std::unique_ptr<security_interstitials::SettingsPageHelper>
+        settings_page_helper)
     : security_interstitials::SecurityInterstitialControllerClient(
           web_contents,
           std::move(metrics_helper),
           nullptr /*prefs*/,
           i18n::GetApplicationLocale(),
-          GURL("about:blank") /*default_safe_page*/),
+          GURL("about:blank") /*default_safe_page*/,
+          std::move(settings_page_helper)),
       cert_error_(cert_error),
       ssl_info_(ssl_info),
       request_url_(request_url) {}
diff --git a/weblayer/browser/ssl_error_controller_client.h b/weblayer/browser/ssl_error_controller_client.h
index 8924c48..1d7ba47 100644
--- a/weblayer/browser/ssl_error_controller_client.h
+++ b/weblayer/browser/ssl_error_controller_client.h
@@ -15,6 +15,7 @@
 
 namespace security_interstitials {
 class MetricsHelper;
+class SettingsPageHelper;
 }
 
 namespace weblayer {
@@ -30,7 +31,9 @@
       int cert_error,
       const net::SSLInfo& ssl_info,
       const GURL& request_url,
-      std::unique_ptr<security_interstitials::MetricsHelper> metrics_helper);
+      std::unique_ptr<security_interstitials::MetricsHelper> metrics_helper,
+      std::unique_ptr<security_interstitials::SettingsPageHelper>
+          settings_page_helper);
 
   ~SSLErrorControllerClient() override = default;
 
diff --git a/weblayer/browser/weblayer_security_blocking_page_factory.cc b/weblayer/browser/weblayer_security_blocking_page_factory.cc
index b7e9703..15c6c7b 100644
--- a/weblayer/browser/weblayer_security_blocking_page_factory.cc
+++ b/weblayer/browser/weblayer_security_blocking_page_factory.cc
@@ -7,6 +7,7 @@
 #include "components/captive_portal/core/buildflags.h"
 #include "components/security_interstitials/content/content_metrics_helper.h"
 #include "components/security_interstitials/content/insecure_form_blocking_page.h"
+#include "components/security_interstitials/content/settings_page_helper.h"
 #include "components/security_interstitials/content/ssl_blocking_page.h"
 #include "components/security_interstitials/core/metrics_helper.h"
 #include "content/public/browser/web_contents.h"
@@ -69,6 +70,13 @@
   return metrics_helper;
 }
 
+std::unique_ptr<security_interstitials::SettingsPageHelper>
+CreateSettingsPageHelper() {
+  // TODO(crbug.com/1080748): Set settings_page_helper once enhanced protection
+  // is supported on weblayer.
+  return nullptr;
+}
+
 }  // namespace
 
 std::unique_ptr<SSLBlockingPage>
@@ -87,7 +95,8 @@
       web_contents, cert_error, ssl_info, request_url,
       CreateMetricsHelperAndStartRecording(
           web_contents, request_url,
-          overridable ? "ssl_overridable" : "ssl_nonoverridable", overridable));
+          overridable ? "ssl_overridable" : "ssl_nonoverridable", overridable),
+      CreateSettingsPageHelper());
 
   auto interstitial_page = std::make_unique<SSLBlockingPage>(
       web_contents, cert_error, ssl_info, request_url, options_mask,
@@ -108,7 +117,8 @@
   auto controller_client = std::make_unique<SSLErrorControllerClient>(
       web_contents, cert_error, ssl_info, request_url,
       CreateMetricsHelperAndStartRecording(web_contents, request_url,
-                                           "captive_portal", false));
+                                           "captive_portal", false),
+      CreateSettingsPageHelper());
 
   auto interstitial_page = std::make_unique<CaptivePortalBlockingPage>(
       web_contents, request_url, login_url, std::move(ssl_cert_reporter),
@@ -130,7 +140,8 @@
   auto controller_client = std::make_unique<SSLErrorControllerClient>(
       web_contents, cert_error, ssl_info, request_url,
       CreateMetricsHelperAndStartRecording(web_contents, request_url,
-                                           "bad_clock", false));
+                                           "bad_clock", false),
+      CreateSettingsPageHelper());
 
   auto interstitial_page = std::make_unique<BadClockBlockingPage>(
       web_contents, cert_error, ssl_info, request_url,
@@ -150,7 +161,8 @@
   auto controller_client = std::make_unique<SSLErrorControllerClient>(
       web_contents, cert_error, ssl_info, request_url,
       CreateMetricsHelperAndStartRecording(web_contents, request_url,
-                                           "legacy_tls", false));
+                                           "legacy_tls", false),
+      CreateSettingsPageHelper());
 
   auto interstitial_page = std::make_unique<LegacyTLSBlockingPage>(
       web_contents, cert_error, request_url, std::move(ssl_cert_reporter),
@@ -170,7 +182,8 @@
   auto controller_client = std::make_unique<SSLErrorControllerClient>(
       web_contents, cert_error, ssl_info, request_url,
       CreateMetricsHelperAndStartRecording(web_contents, request_url,
-                                           "mitm_software", false));
+                                           "mitm_software", false),
+      CreateSettingsPageHelper());
 
   auto interstitial_page = std::make_unique<MITMSoftwareBlockingPage>(
       web_contents, cert_error, request_url, std::move(ssl_cert_reporter),
@@ -190,7 +203,8 @@
   auto controller_client = std::make_unique<SSLErrorControllerClient>(
       web_contents, cert_error, ssl_info, request_url,
       CreateMetricsHelperAndStartRecording(web_contents, request_url,
-                                           "blocked_interception", false));
+                                           "blocked_interception", false),
+      CreateSettingsPageHelper());
 
   auto interstitial_page = std::make_unique<BlockedInterceptionBlockingPage>(
       web_contents, cert_error, request_url, std::move(ssl_cert_reporter),